[{"data":1,"prerenderedAt":10753},["ShallowReactive",2],{"navigation_docs":3,"-reference-api-reference":191,"-reference-api-reference-surround":10748},[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":182,"body":193,"description":10741,"extension":10742,"links":10743,"meta":10744,"navigation":10745,"path":183,"seo":10746,"stem":184,"__hash__":10747},"docs\u002F7.reference\u002F1.api-reference.md",{"type":194,"value":195,"toc":10710},"minimark",[196,231,237,242,271,274,279,568,693,849,866,870,1072,1138,1314,1328,1367,1385,1389,1529,1615,2009,2084,2271,2276,2280,2429,2447,2451,2751,2857,2862,2866,3211,3324,3330,3334,3355,3360,3364,3380,3385,3550,3652,3871,3919,4169,4192,4206,4333,4464,4469,4473,4489,4494,4498,4760,4838,4842,5228,5320,5323,5422,5432,5436,5677,5789,5793,5809,5828,5831,6076,6153,6157,6302,6313,6317,6519,6539,6542,6716,6743,7527,7542,7697,7701,7752,7926,8037,8050,8054,8465,8694,8698,8714,8719,8881,8924,9267,9289,9391,9400,9404,9420,9425,9625,9705,9962,9983,9987,10006,10021,10212,10291,10295,10311,10354,10363,10367,10383,10394,10652,10706],[197,198,199,200,204,205,208,209,212,213,216,217,216,220,216,223,226,227,230],"p",{},"A map of the public surface, generated from ",[201,202,203],"code",{},"go doc -all"," and grouped by package. Each section links to the page that explains it in context. Most services import only the root package, plus ",[201,206,207],{},"data"," for the typed values and ",[201,210,211],{},"theme"," for the palette types. The other packages are the stages of the pipeline (",[201,214,215],{},"comark"," → ",[201,218,219],{},"ir",[201,221,222],{},"layout",[201,224,225],{},"render\u002Fhtml"," and ",[201,228,229],{},"render\u002Ftext","). They are exported so tools and tests can use them.",[197,232,233,236],{},[201,234,235],{},"internal\u002Fhtmlcheck",", the structural lint for rendered HTML used by the goldens, is internal and can't be imported from outside the module.",[238,239,241],"h2",{"id":240},"import-lttr","Import lttr",[243,244,249],"pre",{"className":245,"code":246,"language":247,"meta":248,"style":248},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import \"github.com\u002Fsulv-io\u002Flttr\"\n","go","",[201,250,251],{"__ignoreMap":248},[252,253,256,260,264,268],"span",{"class":254,"line":255},"line",1,[252,257,259],{"class":258},"s7zQu","import",[252,261,263],{"class":262},"sMK4o"," \"",[252,265,267],{"class":266},"sBMFI","github.com\u002Fsulv-io\u002Flttr",[252,269,270],{"class":262},"\"\n",[197,272,273],{},"The API: compile templates, render messages, and send them.",[275,276,278],"h3",{"id":277},"compile-templates","Compile templates",[243,280,282],{"className":245,"code":281,"language":247,"meta":248,"style":248},"func Compile[T any](reg *Registry, name string, src []byte) (*Template[T], error)\nfunc MustCompile[T any](reg *Registry, name string, src []byte) *Template[T]\n\ntype Template[T any] struct{ \u002F* unexported *\u002F }\n\nfunc (t *Template[T]) Render(r *Renderer, to Recipient, v T) (*Message, error)\nfunc (t *Template[T]) Meta() TemplateMeta\nfunc (t *Template[T]) Name() string\n",[201,283,284,358,407,414,442,447,513,541],{"__ignoreMap":248},[252,285,286,289,293,296,300,303,306,309,312,315,318,321,325,327,330,333,336,339,342,345,347,349,352,355],{"class":254,"line":255},[252,287,288],{"class":262},"func",[252,290,292],{"class":291},"s2Zo4"," Compile",[252,294,295],{"class":262},"[",[252,297,299],{"class":298},"sHdIc","T",[252,301,302],{"class":266}," any",[252,304,305],{"class":262},"](",[252,307,308],{"class":298},"reg",[252,310,311],{"class":262}," *",[252,313,314],{"class":266},"Registry",[252,316,317],{"class":262},",",[252,319,320],{"class":298}," name",[252,322,324],{"class":323},"spNyl"," string",[252,326,317],{"class":262},[252,328,329],{"class":298}," src",[252,331,332],{"class":262}," []",[252,334,335],{"class":323},"byte",[252,337,338],{"class":262},")",[252,340,341],{"class":262}," (*",[252,343,344],{"class":266},"Template",[252,346,295],{"class":262},[252,348,299],{"class":266},[252,350,351],{"class":262},"],",[252,353,354],{"class":323}," error",[252,356,357],{"class":262},")\n",[252,359,361,363,366,368,370,372,374,376,378,380,382,384,386,388,390,392,394,396,398,400,402,404],{"class":254,"line":360},2,[252,362,288],{"class":262},[252,364,365],{"class":291}," MustCompile",[252,367,295],{"class":262},[252,369,299],{"class":298},[252,371,302],{"class":266},[252,373,305],{"class":262},[252,375,308],{"class":298},[252,377,311],{"class":262},[252,379,314],{"class":266},[252,381,317],{"class":262},[252,383,320],{"class":298},[252,385,324],{"class":323},[252,387,317],{"class":262},[252,389,329],{"class":298},[252,391,332],{"class":262},[252,393,335],{"class":323},[252,395,338],{"class":262},[252,397,311],{"class":262},[252,399,344],{"class":266},[252,401,295],{"class":262},[252,403,299],{"class":266},[252,405,406],{"class":262},"]\n",[252,408,410],{"class":254,"line":409},3,[252,411,413],{"emptyLinePlaceholder":412},true,"\n",[252,415,417,420,423,425,427,429,432,435,439],{"class":254,"line":416},4,[252,418,419],{"class":262},"type",[252,421,422],{"class":266}," Template",[252,424,295],{"class":262},[252,426,299],{"class":298},[252,428,302],{"class":266},[252,430,431],{"class":262},"]",[252,433,434],{"class":262}," struct{",[252,436,438],{"class":437},"sHwdD"," \u002F* unexported *\u002F",[252,440,441],{"class":262}," }\n",[252,443,445],{"class":254,"line":444},5,[252,446,413],{"emptyLinePlaceholder":412},[252,448,450,452,455,458,461,463,465,467,470,473,476,479,481,484,486,489,492,494,497,500,502,504,507,509,511],{"class":254,"line":449},6,[252,451,288],{"class":262},[252,453,454],{"class":262}," (",[252,456,457],{"class":298},"t ",[252,459,460],{"class":262},"*",[252,462,344],{"class":266},[252,464,295],{"class":262},[252,466,299],{"class":266},[252,468,469],{"class":262},"])",[252,471,472],{"class":291}," Render",[252,474,475],{"class":262},"(",[252,477,478],{"class":298},"r",[252,480,311],{"class":262},[252,482,483],{"class":266},"Renderer",[252,485,317],{"class":262},[252,487,488],{"class":298}," to",[252,490,491],{"class":266}," Recipient",[252,493,317],{"class":262},[252,495,496],{"class":298}," v",[252,498,499],{"class":266}," T",[252,501,338],{"class":262},[252,503,341],{"class":262},[252,505,506],{"class":266},"Message",[252,508,317],{"class":262},[252,510,354],{"class":323},[252,512,357],{"class":262},[252,514,516,518,520,522,524,526,528,530,532,535,538],{"class":254,"line":515},7,[252,517,288],{"class":262},[252,519,454],{"class":262},[252,521,457],{"class":298},[252,523,460],{"class":262},[252,525,344],{"class":266},[252,527,295],{"class":262},[252,529,299],{"class":266},[252,531,469],{"class":262},[252,533,534],{"class":291}," Meta",[252,536,537],{"class":262},"()",[252,539,540],{"class":266}," TemplateMeta\n",[252,542,544,546,548,550,552,554,556,558,560,563,565],{"class":254,"line":543},8,[252,545,288],{"class":262},[252,547,454],{"class":262},[252,549,457],{"class":298},[252,551,460],{"class":262},[252,553,344],{"class":266},[252,555,295],{"class":262},[252,557,299],{"class":266},[252,559,469],{"class":262},[252,561,562],{"class":291}," Name",[252,564,537],{"class":262},[252,566,567],{"class":323}," string\n",[569,570,571,584],"table",{},[572,573,574],"thead",{},[575,576,577,581],"tr",{},[578,579,580],"th",{},"Identifier",[578,582,583],{},"Does",[585,586,587,626,638,648,670,683],"tbody",{},[575,588,589,595],{},[590,591,592],"td",{},[201,593,594],{},"Compile",[590,596,597,598,601,602,605,606,608,609,611,612,226,614,617,618,621,622,625],{},"Compiles ",[201,599,600],{},"src"," called ",[201,603,604],{},"name"," against the data type ",[201,607,299],{}," (which must be a struct) and the families in ",[201,610,308],{},". It checks the Comark source, frontmatter, modules and props, every merge tag and binding against ",[201,613,299],{},[201,615,616],{},"Recipient",", and the family rules. It returns every error joined, each an ",[201,619,620],{},"*ir.Error"," with ",[201,623,624],{},"name:line:col",".",[575,627,628,633],{},[590,629,630],{},[201,631,632],{},"MustCompile",[590,634,635,637],{},[201,636,594],{}," that panics on error, for package-level template variables.",[575,639,640,645],{},[590,641,642],{},[201,643,644],{},"Template[T]",[590,646,647],{},"A compiled template, immutable and safe for concurrent use.",[575,649,650,655],{},[590,651,652],{},[201,653,654],{},"Template.Render",[590,656,657,658,661,662,665,666,669],{},"Renders for recipient ",[201,659,660],{},"to"," with data ",[201,663,664],{},"v"," and runs the data-dependent checks (values, URLs, subject, addresses, entity, unsubscribe URL, the 100 KB size limit). It returns a whole ",[201,667,668],{},"*Message"," or an error, never both.",[575,671,672,677],{},[590,673,674],{},[201,675,676],{},"Template.Meta",[590,678,679,680,625],{},"A copy of the template's ",[201,681,682],{},"TemplateMeta",[575,684,685,690],{},[590,686,687],{},[201,688,689],{},"Template.Name",[590,691,692],{},"The template name.",[243,694,696],{"className":245,"code":695,"language":247,"meta":248,"style":248},"type TemplateMeta struct {\n    Name     string\n    Family   string\n    Stream   Stream    \u002F\u002F the family's stream, or its legal stream with \"legal: true\"\n    Tags     []TagInfo \u002F\u002F in source order\n    Modules  []string  \u002F\u002F module kinds in order, e.g. \"statement\"\n    Warnings []string  \u002F\u002F \"name:line:col: warning: msg\"\n}\n\ntype TagInfo struct {\n    Path    string \u002F\u002F dotted path, e.g. \"driver.first_name\"\n    Type    string \u002F\u002F the Go type it resolves to, e.g. \"string\", \"data.Money\"\n    Pos     string \u002F\u002F \"line:col\" in the template source\n    Binding bool   \u002F\u002F a :key=\"path\" binding rather than a {{path}} tag\n}\n",[201,697,698,711,720,727,738,752,765,777,782,787,799,810,821,832,844],{"__ignoreMap":248},[252,699,700,702,705,708],{"class":254,"line":255},[252,701,419],{"class":262},[252,703,704],{"class":266}," TemplateMeta",[252,706,707],{"class":262}," struct",[252,709,710],{"class":262}," {\n",[252,712,713,717],{"class":254,"line":360},[252,714,716],{"class":715},"sTEyZ","    Name     ",[252,718,719],{"class":323},"string\n",[252,721,722,725],{"class":254,"line":409},[252,723,724],{"class":715},"    Family   ",[252,726,719],{"class":323},[252,728,729,732,735],{"class":254,"line":416},[252,730,731],{"class":715},"    Stream   ",[252,733,734],{"class":266},"Stream",[252,736,737],{"class":437},"    \u002F\u002F the family's stream, or its legal stream with \"legal: true\"\n",[252,739,740,743,746,749],{"class":254,"line":444},[252,741,742],{"class":715},"    Tags     ",[252,744,745],{"class":262},"[]",[252,747,748],{"class":266},"TagInfo",[252,750,751],{"class":437}," \u002F\u002F in source order\n",[252,753,754,757,759,762],{"class":254,"line":449},[252,755,756],{"class":715},"    Modules  ",[252,758,745],{"class":262},[252,760,761],{"class":323},"string",[252,763,764],{"class":437},"  \u002F\u002F module kinds in order, e.g. \"statement\"\n",[252,766,767,770,772,774],{"class":254,"line":515},[252,768,769],{"class":715},"    Warnings ",[252,771,745],{"class":262},[252,773,761],{"class":323},[252,775,776],{"class":437},"  \u002F\u002F \"name:line:col: warning: msg\"\n",[252,778,779],{"class":254,"line":543},[252,780,781],{"class":262},"}\n",[252,783,785],{"class":254,"line":784},9,[252,786,413],{"emptyLinePlaceholder":412},[252,788,790,792,795,797],{"class":254,"line":789},10,[252,791,419],{"class":262},[252,793,794],{"class":266}," TagInfo",[252,796,707],{"class":262},[252,798,710],{"class":262},[252,800,802,805,807],{"class":254,"line":801},11,[252,803,804],{"class":715},"    Path    ",[252,806,761],{"class":323},[252,808,809],{"class":437}," \u002F\u002F dotted path, e.g. \"driver.first_name\"\n",[252,811,813,816,818],{"class":254,"line":812},12,[252,814,815],{"class":715},"    Type    ",[252,817,761],{"class":323},[252,819,820],{"class":437}," \u002F\u002F the Go type it resolves to, e.g. \"string\", \"data.Money\"\n",[252,822,824,827,829],{"class":254,"line":823},13,[252,825,826],{"class":715},"    Pos     ",[252,828,761],{"class":323},[252,830,831],{"class":437}," \u002F\u002F \"line:col\" in the template source\n",[252,833,835,838,841],{"class":254,"line":834},14,[252,836,837],{"class":715},"    Binding ",[252,839,840],{"class":323},"bool",[252,842,843],{"class":437},"   \u002F\u002F a :key=\"path\" binding rather than a {{path}} tag\n",[252,845,847],{"class":254,"line":846},15,[252,848,781],{"class":262},[197,850,851,853,854,856,857,860,861,226,864,625],{},[201,852,682],{}," describes a compiled template. ",[201,855,748],{}," is one merge tag or binding it uses, and is what ",[201,858,859],{},"lttr tags"," prints. See ",[862,863,63],"a",{"href":64},[862,865,53],{"href":54},[275,867,869],{"id":868},"configure-a-renderer","Configure a renderer",[243,871,873],{"className":245,"code":872,"language":247,"meta":248,"style":248},"func NewRenderer(cfg Config) (*Renderer, error)\n\ntype Renderer struct{ \u002F* unexported *\u002F }\n\ntype Config struct {\n    Domain    string \u002F\u002F sending domain; the {domain} placeholder\n    SiteURL   string \u002F\u002F absolute https URL; the {site} placeholder\n    AssetBase string \u002F\u002F base URL of the logo files\n\n    Theme    Theme     \u002F\u002F palettes, fonts and brand mark\n    Families *Registry \u002F\u002F the family registry templates are compiled against\n\n    Entities      map[string]Entity \u002F\u002F region → entity, for the footer address\n    DefaultRegion string            \u002F\u002F region used when a recipient has none; must be in Entities\n\n    AllowRelativeURLs bool \u002F\u002F previews only: relative asset and link URLs are allowed\n}\n\ntype Entity struct {\n    Address string\n}\n",[201,874,875,902,906,919,923,933,943,953,963,967,978,990,994,1012,1022,1026,1037,1042,1047,1059,1067],{"__ignoreMap":248},[252,876,877,879,882,884,887,890,892,894,896,898,900],{"class":254,"line":255},[252,878,288],{"class":262},[252,880,881],{"class":291}," NewRenderer",[252,883,475],{"class":262},[252,885,886],{"class":298},"cfg",[252,888,889],{"class":266}," Config",[252,891,338],{"class":262},[252,893,341],{"class":262},[252,895,483],{"class":266},[252,897,317],{"class":262},[252,899,354],{"class":323},[252,901,357],{"class":262},[252,903,904],{"class":254,"line":360},[252,905,413],{"emptyLinePlaceholder":412},[252,907,908,910,913,915,917],{"class":254,"line":409},[252,909,419],{"class":262},[252,911,912],{"class":266}," Renderer",[252,914,434],{"class":262},[252,916,438],{"class":437},[252,918,441],{"class":262},[252,920,921],{"class":254,"line":416},[252,922,413],{"emptyLinePlaceholder":412},[252,924,925,927,929,931],{"class":254,"line":444},[252,926,419],{"class":262},[252,928,889],{"class":266},[252,930,707],{"class":262},[252,932,710],{"class":262},[252,934,935,938,940],{"class":254,"line":449},[252,936,937],{"class":715},"    Domain    ",[252,939,761],{"class":323},[252,941,942],{"class":437}," \u002F\u002F sending domain; the {domain} placeholder\n",[252,944,945,948,950],{"class":254,"line":515},[252,946,947],{"class":715},"    SiteURL   ",[252,949,761],{"class":323},[252,951,952],{"class":437}," \u002F\u002F absolute https URL; the {site} placeholder\n",[252,954,955,958,960],{"class":254,"line":543},[252,956,957],{"class":715},"    AssetBase ",[252,959,761],{"class":323},[252,961,962],{"class":437}," \u002F\u002F base URL of the logo files\n",[252,964,965],{"class":254,"line":784},[252,966,413],{"emptyLinePlaceholder":412},[252,968,969,972,975],{"class":254,"line":789},[252,970,971],{"class":715},"    Theme    ",[252,973,974],{"class":266},"Theme",[252,976,977],{"class":437},"     \u002F\u002F palettes, fonts and brand mark\n",[252,979,980,983,985,987],{"class":254,"line":801},[252,981,982],{"class":715},"    Families ",[252,984,460],{"class":262},[252,986,314],{"class":266},[252,988,989],{"class":437}," \u002F\u002F the family registry templates are compiled against\n",[252,991,992],{"class":254,"line":812},[252,993,413],{"emptyLinePlaceholder":412},[252,995,996,999,1002,1004,1006,1009],{"class":254,"line":823},[252,997,998],{"class":715},"    Entities      ",[252,1000,1001],{"class":262},"map[",[252,1003,761],{"class":323},[252,1005,431],{"class":262},[252,1007,1008],{"class":266},"Entity",[252,1010,1011],{"class":437}," \u002F\u002F region → entity, for the footer address\n",[252,1013,1014,1017,1019],{"class":254,"line":834},[252,1015,1016],{"class":715},"    DefaultRegion ",[252,1018,761],{"class":323},[252,1020,1021],{"class":437},"            \u002F\u002F region used when a recipient has none; must be in Entities\n",[252,1023,1024],{"class":254,"line":846},[252,1025,413],{"emptyLinePlaceholder":412},[252,1027,1029,1032,1034],{"class":254,"line":1028},16,[252,1030,1031],{"class":715},"    AllowRelativeURLs ",[252,1033,840],{"class":323},[252,1035,1036],{"class":437}," \u002F\u002F previews only: relative asset and link URLs are allowed\n",[252,1038,1040],{"class":254,"line":1039},17,[252,1041,781],{"class":262},[252,1043,1045],{"class":254,"line":1044},18,[252,1046,413],{"emptyLinePlaceholder":412},[252,1048,1050,1052,1055,1057],{"class":254,"line":1049},19,[252,1051,419],{"class":262},[252,1053,1054],{"class":266}," Entity",[252,1056,707],{"class":262},[252,1058,710],{"class":262},[252,1060,1062,1065],{"class":254,"line":1061},20,[252,1063,1064],{"class":715},"    Address ",[252,1066,719],{"class":323},[252,1068,1070],{"class":254,"line":1069},21,[252,1071,781],{"class":262},[569,1073,1074,1082],{},[572,1075,1076],{},[575,1077,1078,1080],{},[578,1079,580],{},[578,1081,583],{},[585,1083,1084,1097,1110,1122],{},[575,1085,1086,1091],{},[590,1087,1088],{},[201,1089,1090],{},"NewRenderer",[590,1092,1093,1094,1096],{},"Validates ",[201,1095,886],{},", including the theme and the registry, and compiles every family's copy. It reports every problem at once.",[575,1098,1099,1103],{},[590,1100,1101],{},[201,1102,483],{},[590,1104,1105,1106,1109],{},"Renders compiled templates for one ",[201,1107,1108],{},"Config",". Immutable and safe for concurrent use.",[575,1111,1112,1116],{},[590,1113,1114],{},[201,1115,1108],{},[590,1117,1118,1119,1121],{},"Everything a ",[201,1120,483],{}," needs from the consumer.",[575,1123,1124,1128],{},[590,1125,1126],{},[201,1127,1008],{},[590,1129,1130,1131,1134,1135,625],{},"The legal entity a region's mail is sent on behalf of. ",[201,1132,1133],{},"Address"," fills ",[201,1136,1137],{},"{address}",[243,1139,1141],{"className":245,"code":1140,"language":247,"meta":248,"style":248},"type Vars struct {\n    Site        string `json:\"site\"`        \u002F\u002F Config.SiteURL\n    Brand       string `json:\"brand\"`       \u002F\u002F Theme.Brand.Name\n    Domain      string `json:\"domain\"`      \u002F\u002F Config.Domain\n    Region      string `json:\"region\"`      \u002F\u002F the recipient's region, or Config.DefaultRegion\n    Address     string `json:\"address\"`     \u002F\u002F the entity address for the region\n    About       string `json:\"about\"`       \u002F\u002F the F2 about value (family copy or footer.about)\n    Prefs       string `json:\"prefs\"`       \u002F\u002F the recipient's preferences URL\n    Unsubscribe string `json:\"unsubscribe\"` \u002F\u002F the recipient's unsubscribe URL\n    Issue       string `json:\"issue\"`       \u002F\u002F the evaluated frontmatter issue (H3 masthead)\n}\n",[201,1142,1143,1154,1174,1191,1208,1225,1242,1259,1276,1293,1310],{"__ignoreMap":248},[252,1144,1145,1147,1150,1152],{"class":254,"line":255},[252,1146,419],{"class":262},[252,1148,1149],{"class":266}," Vars",[252,1151,707],{"class":262},[252,1153,710],{"class":262},[252,1155,1156,1159,1161,1164,1168,1171],{"class":254,"line":360},[252,1157,1158],{"class":715},"    Site        ",[252,1160,761],{"class":323},[252,1162,1163],{"class":262}," `",[252,1165,1167],{"class":1166},"sfazB","json:\"site\"",[252,1169,1170],{"class":262},"`",[252,1172,1173],{"class":437},"        \u002F\u002F Config.SiteURL\n",[252,1175,1176,1179,1181,1183,1186,1188],{"class":254,"line":409},[252,1177,1178],{"class":715},"    Brand       ",[252,1180,761],{"class":323},[252,1182,1163],{"class":262},[252,1184,1185],{"class":1166},"json:\"brand\"",[252,1187,1170],{"class":262},[252,1189,1190],{"class":437},"       \u002F\u002F Theme.Brand.Name\n",[252,1192,1193,1196,1198,1200,1203,1205],{"class":254,"line":416},[252,1194,1195],{"class":715},"    Domain      ",[252,1197,761],{"class":323},[252,1199,1163],{"class":262},[252,1201,1202],{"class":1166},"json:\"domain\"",[252,1204,1170],{"class":262},[252,1206,1207],{"class":437},"      \u002F\u002F Config.Domain\n",[252,1209,1210,1213,1215,1217,1220,1222],{"class":254,"line":444},[252,1211,1212],{"class":715},"    Region      ",[252,1214,761],{"class":323},[252,1216,1163],{"class":262},[252,1218,1219],{"class":1166},"json:\"region\"",[252,1221,1170],{"class":262},[252,1223,1224],{"class":437},"      \u002F\u002F the recipient's region, or Config.DefaultRegion\n",[252,1226,1227,1230,1232,1234,1237,1239],{"class":254,"line":449},[252,1228,1229],{"class":715},"    Address     ",[252,1231,761],{"class":323},[252,1233,1163],{"class":262},[252,1235,1236],{"class":1166},"json:\"address\"",[252,1238,1170],{"class":262},[252,1240,1241],{"class":437},"     \u002F\u002F the entity address for the region\n",[252,1243,1244,1247,1249,1251,1254,1256],{"class":254,"line":515},[252,1245,1246],{"class":715},"    About       ",[252,1248,761],{"class":323},[252,1250,1163],{"class":262},[252,1252,1253],{"class":1166},"json:\"about\"",[252,1255,1170],{"class":262},[252,1257,1258],{"class":437},"       \u002F\u002F the F2 about value (family copy or footer.about)\n",[252,1260,1261,1264,1266,1268,1271,1273],{"class":254,"line":543},[252,1262,1263],{"class":715},"    Prefs       ",[252,1265,761],{"class":323},[252,1267,1163],{"class":262},[252,1269,1270],{"class":1166},"json:\"prefs\"",[252,1272,1170],{"class":262},[252,1274,1275],{"class":437},"       \u002F\u002F the recipient's preferences URL\n",[252,1277,1278,1281,1283,1285,1288,1290],{"class":254,"line":784},[252,1279,1280],{"class":715},"    Unsubscribe ",[252,1282,761],{"class":323},[252,1284,1163],{"class":262},[252,1286,1287],{"class":1166},"json:\"unsubscribe\"",[252,1289,1170],{"class":262},[252,1291,1292],{"class":437}," \u002F\u002F the recipient's unsubscribe URL\n",[252,1294,1295,1298,1300,1302,1305,1307],{"class":254,"line":789},[252,1296,1297],{"class":715},"    Issue       ",[252,1299,761],{"class":323},[252,1301,1163],{"class":262},[252,1303,1304],{"class":1166},"json:\"issue\"",[252,1306,1170],{"class":262},[252,1308,1309],{"class":437},"       \u002F\u002F the evaluated frontmatter issue (H3 masthead)\n",[252,1311,1312],{"class":254,"line":801},[252,1313,781],{"class":262},[197,1315,1316,1319,1320,1323,1324,1327],{},[201,1317,1318],{},"Vars"," are the ",[201,1321,1322],{},"{name}"," placeholders available to family copy and the ",[201,1325,1326],{},"footer.*"," frontmatter overrides. The renderer fills them per message.",[243,1329,1331],{"className":245,"code":1330,"language":247,"meta":248,"style":248},"type Theme = theme.Theme\ntype Recipient = data.Recipient\n",[201,1332,1333,1351],{"__ignoreMap":248},[252,1334,1335,1337,1340,1343,1346,1348],{"class":254,"line":255},[252,1336,419],{"class":262},[252,1338,1339],{"class":266}," Theme",[252,1341,1342],{"class":262}," =",[252,1344,1345],{"class":266}," theme",[252,1347,625],{"class":262},[252,1349,1350],{"class":266},"Theme\n",[252,1352,1353,1355,1357,1359,1362,1364],{"class":254,"line":360},[252,1354,419],{"class":262},[252,1356,491],{"class":266},[252,1358,1342],{"class":262},[252,1360,1361],{"class":266}," data",[252,1363,625],{"class":262},[252,1365,1366],{"class":266},"Recipient\n",[197,1368,1369,1371,1372,1375,1376,1378,1379,1382,1383,625],{},[201,1370,974],{}," is the brand a renderer draws with (see ",[862,1373,211],{"href":1374},"#import-lttrtheme","). ",[201,1377,616],{}," is the person a message is addressed to (see ",[862,1380,207],{"href":1381},"#import-lttrdata","). Templates can use its fields as merge tags. See ",[862,1384,84],{"href":85},[275,1386,1388],{"id":1387},"define-families","Define families",[243,1390,1392],{"className":245,"code":1391,"language":247,"meta":248,"style":248},"func NewRegistry(families ...Family) *Registry\n\ntype Registry struct{ \u002F* unexported *\u002F }\n\nfunc (r *Registry) Lookup(name string) (Family, bool)\nfunc (r *Registry) Names() []string\nfunc (r *Registry) Validate(domain string) error\n",[201,1393,1394,1419,1423,1436,1440,1477,1500],{"__ignoreMap":248},[252,1395,1396,1398,1401,1403,1406,1409,1412,1414,1416],{"class":254,"line":255},[252,1397,288],{"class":262},[252,1399,1400],{"class":291}," NewRegistry",[252,1402,475],{"class":262},[252,1404,1405],{"class":298},"families",[252,1407,1408],{"class":262}," ...",[252,1410,1411],{"class":266},"Family",[252,1413,338],{"class":262},[252,1415,311],{"class":262},[252,1417,1418],{"class":266},"Registry\n",[252,1420,1421],{"class":254,"line":360},[252,1422,413],{"emptyLinePlaceholder":412},[252,1424,1425,1427,1430,1432,1434],{"class":254,"line":409},[252,1426,419],{"class":262},[252,1428,1429],{"class":266}," Registry",[252,1431,434],{"class":262},[252,1433,438],{"class":437},[252,1435,441],{"class":262},[252,1437,1438],{"class":254,"line":416},[252,1439,413],{"emptyLinePlaceholder":412},[252,1441,1442,1444,1446,1449,1451,1453,1455,1458,1460,1462,1464,1466,1468,1470,1472,1475],{"class":254,"line":444},[252,1443,288],{"class":262},[252,1445,454],{"class":262},[252,1447,1448],{"class":298},"r ",[252,1450,460],{"class":262},[252,1452,314],{"class":266},[252,1454,338],{"class":262},[252,1456,1457],{"class":291}," Lookup",[252,1459,475],{"class":262},[252,1461,604],{"class":298},[252,1463,324],{"class":323},[252,1465,338],{"class":262},[252,1467,454],{"class":262},[252,1469,1411],{"class":266},[252,1471,317],{"class":262},[252,1473,1474],{"class":323}," bool",[252,1476,357],{"class":262},[252,1478,1479,1481,1483,1485,1487,1489,1491,1494,1496,1498],{"class":254,"line":449},[252,1480,288],{"class":262},[252,1482,454],{"class":262},[252,1484,1448],{"class":298},[252,1486,460],{"class":262},[252,1488,314],{"class":266},[252,1490,338],{"class":262},[252,1492,1493],{"class":291}," Names",[252,1495,537],{"class":262},[252,1497,332],{"class":262},[252,1499,719],{"class":323},[252,1501,1502,1504,1506,1508,1510,1512,1514,1517,1519,1522,1524,1526],{"class":254,"line":515},[252,1503,288],{"class":262},[252,1505,454],{"class":262},[252,1507,1448],{"class":298},[252,1509,460],{"class":262},[252,1511,314],{"class":266},[252,1513,338],{"class":262},[252,1515,1516],{"class":291}," Validate",[252,1518,475],{"class":262},[252,1520,1521],{"class":298},"domain",[252,1523,324],{"class":323},[252,1525,338],{"class":262},[252,1527,1528],{"class":323}," error\n",[569,1530,1531,1539],{},[572,1532,1533],{},[575,1534,1535,1537],{},[578,1536,580],{},[578,1538,583],{},[585,1540,1541,1557,1572,1585,1595],{},[575,1542,1543,1548],{},[590,1544,1545],{},[201,1546,1547],{},"NewRegistry",[590,1549,1550,1551,1553,1554,625],{},"A registry of deep copies of ",[201,1552,1405],{},". It never fails, because problems are reported by ",[201,1555,1556],{},"Validate",[575,1558,1559,1563],{},[590,1560,1561],{},[201,1562,314],{},[590,1564,1565,1566,1568,1569,625],{},"An immutable set of families, handed to ",[201,1567,594],{}," and to ",[201,1570,1571],{},"Config.Families",[575,1573,1574,1579],{},[590,1575,1576],{},[201,1577,1578],{},"Registry.Lookup",[590,1580,1581,1582,1584],{},"A copy of the family called ",[201,1583,604],{},". With duplicate names, the first wins.",[575,1586,1587,1592],{},[590,1588,1589],{},[201,1590,1591],{},"Registry.Names",[590,1593,1594],{},"The family names, sorted, each once.",[575,1596,1597,1602],{},[590,1598,1599],{},[201,1600,1601],{},"Registry.Validate",[590,1603,1604,1605,1608,1609,1611,1612,1614],{},"Reports every problem for a config whose ",[201,1606,1607],{},"Domain"," is ",[201,1610,1521],{},": duplicate or empty names, invalid streams or variants, a missing masthead (H3) or banner (H2), unknown forbidden modules, a sender outside its domain, and copy that doesn't compile. ",[201,1613,1090],{}," calls it.",[243,1616,1618],{"className":245,"code":1617,"language":247,"meta":248,"style":248},"type Family struct {\n    Name            string\n    From            mail.Address   \u002F\u002F fixed sender; zero when FromFrontmatter\n    FromFrontmatter bool           \u002F\u002F the template's frontmatter \"from\" is required and is the sender\n    SenderDomain    string         \u002F\u002F allowed sender domain; \"\" = Config.Domain; may use {domain}\n    Stream          Stream         \u002F\u002F sending stream\n    Header          HeaderVariant  \u002F\u002F header chrome\n    Footer          FooterVariant  \u002F\u002F footer chrome\n    Copy            FooterCopy     \u002F\u002F footer copy for Footer\n    Masthead        string         \u002F\u002F H3 masthead copy, e.g. \"Journal · No. {issue}\"; required for H3\n    Banner          string         \u002F\u002F H2 banner copy; required for H2\n    Legal           *LegalOverride \u002F\u002F what frontmatter \"legal: true\" switches to; nil = not allowed\n    Forbidden       []ir.Kind      \u002F\u002F modules templates of this family may not use\n    Tracking        bool           \u002F\u002F whether the sending service may track opens and clicks\n}\n\ntype FooterCopy struct {\n    Nav       []NavLink  \u002F\u002F F1 nav row; empty = no row\n    Reason    string     \u002F\u002F F1 lead (Markdown)\n    Links     string     \u002F\u002F F1 links after the reason\n    Note      string     \u002F\u002F F2 lead (Markdown)\n    About     string     \u002F\u002F F2 {about} value (plain text); \"\" drops the service line\n    Service   string     \u002F\u002F F2 service line\n    OptOut    string     \u002F\u002F F3 lead (Markdown)\n    Internal  string     \u002F\u002F F3·i lead (Markdown)\n    Address   string     \u002F\u002F every variant, plain text, e.g. \"{brand} · {address}\"\n    TextLinks []TextLink \u002F\u002F plain-text URL lines after the address\n}\n\ntype LegalOverride struct {\n    Stream Stream\n    Footer FooterVariant\n    Copy   FooterCopy\n}\n\ntype NavLink struct{ Label, Href string }\ntype TextLink struct{ Label, URL string }\n",[201,1619,1620,1631,1638,1653,1663,1673,1683,1694,1705,1716,1726,1736,1749,1766,1776,1780,1784,1795,1808,1818,1828,1838,1849,1860,1871,1882,1893,1907,1912,1917,1929,1938,1947,1956,1961,1966,1988],{"__ignoreMap":248},[252,1621,1622,1624,1627,1629],{"class":254,"line":255},[252,1623,419],{"class":262},[252,1625,1626],{"class":266}," Family",[252,1628,707],{"class":262},[252,1630,710],{"class":262},[252,1632,1633,1636],{"class":254,"line":360},[252,1634,1635],{"class":715},"    Name            ",[252,1637,719],{"class":323},[252,1639,1640,1643,1646,1648,1650],{"class":254,"line":409},[252,1641,1642],{"class":715},"    From            ",[252,1644,1645],{"class":266},"mail",[252,1647,625],{"class":262},[252,1649,1133],{"class":266},[252,1651,1652],{"class":437},"   \u002F\u002F fixed sender; zero when FromFrontmatter\n",[252,1654,1655,1658,1660],{"class":254,"line":416},[252,1656,1657],{"class":715},"    FromFrontmatter ",[252,1659,840],{"class":323},[252,1661,1662],{"class":437},"           \u002F\u002F the template's frontmatter \"from\" is required and is the sender\n",[252,1664,1665,1668,1670],{"class":254,"line":444},[252,1666,1667],{"class":715},"    SenderDomain    ",[252,1669,761],{"class":323},[252,1671,1672],{"class":437},"         \u002F\u002F allowed sender domain; \"\" = Config.Domain; may use {domain}\n",[252,1674,1675,1678,1680],{"class":254,"line":449},[252,1676,1677],{"class":715},"    Stream          ",[252,1679,734],{"class":266},[252,1681,1682],{"class":437},"         \u002F\u002F sending stream\n",[252,1684,1685,1688,1691],{"class":254,"line":515},[252,1686,1687],{"class":715},"    Header          ",[252,1689,1690],{"class":266},"HeaderVariant",[252,1692,1693],{"class":437},"  \u002F\u002F header chrome\n",[252,1695,1696,1699,1702],{"class":254,"line":543},[252,1697,1698],{"class":715},"    Footer          ",[252,1700,1701],{"class":266},"FooterVariant",[252,1703,1704],{"class":437},"  \u002F\u002F footer chrome\n",[252,1706,1707,1710,1713],{"class":254,"line":784},[252,1708,1709],{"class":715},"    Copy            ",[252,1711,1712],{"class":266},"FooterCopy",[252,1714,1715],{"class":437},"     \u002F\u002F footer copy for Footer\n",[252,1717,1718,1721,1723],{"class":254,"line":789},[252,1719,1720],{"class":715},"    Masthead        ",[252,1722,761],{"class":323},[252,1724,1725],{"class":437},"         \u002F\u002F H3 masthead copy, e.g. \"Journal · No. {issue}\"; required for H3\n",[252,1727,1728,1731,1733],{"class":254,"line":801},[252,1729,1730],{"class":715},"    Banner          ",[252,1732,761],{"class":323},[252,1734,1735],{"class":437},"         \u002F\u002F H2 banner copy; required for H2\n",[252,1737,1738,1741,1743,1746],{"class":254,"line":812},[252,1739,1740],{"class":715},"    Legal           ",[252,1742,460],{"class":262},[252,1744,1745],{"class":266},"LegalOverride",[252,1747,1748],{"class":437}," \u002F\u002F what frontmatter \"legal: true\" switches to; nil = not allowed\n",[252,1750,1751,1754,1756,1758,1760,1763],{"class":254,"line":823},[252,1752,1753],{"class":715},"    Forbidden       ",[252,1755,745],{"class":262},[252,1757,219],{"class":266},[252,1759,625],{"class":262},[252,1761,1762],{"class":266},"Kind",[252,1764,1765],{"class":437},"      \u002F\u002F modules templates of this family may not use\n",[252,1767,1768,1771,1773],{"class":254,"line":834},[252,1769,1770],{"class":715},"    Tracking        ",[252,1772,840],{"class":323},[252,1774,1775],{"class":437},"           \u002F\u002F whether the sending service may track opens and clicks\n",[252,1777,1778],{"class":254,"line":846},[252,1779,781],{"class":262},[252,1781,1782],{"class":254,"line":1028},[252,1783,413],{"emptyLinePlaceholder":412},[252,1785,1786,1788,1791,1793],{"class":254,"line":1039},[252,1787,419],{"class":262},[252,1789,1790],{"class":266}," FooterCopy",[252,1792,707],{"class":262},[252,1794,710],{"class":262},[252,1796,1797,1800,1802,1805],{"class":254,"line":1044},[252,1798,1799],{"class":715},"    Nav       ",[252,1801,745],{"class":262},[252,1803,1804],{"class":266},"NavLink",[252,1806,1807],{"class":437},"  \u002F\u002F F1 nav row; empty = no row\n",[252,1809,1810,1813,1815],{"class":254,"line":1049},[252,1811,1812],{"class":715},"    Reason    ",[252,1814,761],{"class":323},[252,1816,1817],{"class":437},"     \u002F\u002F F1 lead (Markdown)\n",[252,1819,1820,1823,1825],{"class":254,"line":1061},[252,1821,1822],{"class":715},"    Links     ",[252,1824,761],{"class":323},[252,1826,1827],{"class":437},"     \u002F\u002F F1 links after the reason\n",[252,1829,1830,1833,1835],{"class":254,"line":1069},[252,1831,1832],{"class":715},"    Note      ",[252,1834,761],{"class":323},[252,1836,1837],{"class":437},"     \u002F\u002F F2 lead (Markdown)\n",[252,1839,1841,1844,1846],{"class":254,"line":1840},22,[252,1842,1843],{"class":715},"    About     ",[252,1845,761],{"class":323},[252,1847,1848],{"class":437},"     \u002F\u002F F2 {about} value (plain text); \"\" drops the service line\n",[252,1850,1852,1855,1857],{"class":254,"line":1851},23,[252,1853,1854],{"class":715},"    Service   ",[252,1856,761],{"class":323},[252,1858,1859],{"class":437},"     \u002F\u002F F2 service line\n",[252,1861,1863,1866,1868],{"class":254,"line":1862},24,[252,1864,1865],{"class":715},"    OptOut    ",[252,1867,761],{"class":323},[252,1869,1870],{"class":437},"     \u002F\u002F F3 lead (Markdown)\n",[252,1872,1874,1877,1879],{"class":254,"line":1873},25,[252,1875,1876],{"class":715},"    Internal  ",[252,1878,761],{"class":323},[252,1880,1881],{"class":437},"     \u002F\u002F F3·i lead (Markdown)\n",[252,1883,1885,1888,1890],{"class":254,"line":1884},26,[252,1886,1887],{"class":715},"    Address   ",[252,1889,761],{"class":323},[252,1891,1892],{"class":437},"     \u002F\u002F every variant, plain text, e.g. \"{brand} · {address}\"\n",[252,1894,1896,1899,1901,1904],{"class":254,"line":1895},27,[252,1897,1898],{"class":715},"    TextLinks ",[252,1900,745],{"class":262},[252,1902,1903],{"class":266},"TextLink",[252,1905,1906],{"class":437}," \u002F\u002F plain-text URL lines after the address\n",[252,1908,1910],{"class":254,"line":1909},28,[252,1911,781],{"class":262},[252,1913,1915],{"class":254,"line":1914},29,[252,1916,413],{"emptyLinePlaceholder":412},[252,1918,1920,1922,1925,1927],{"class":254,"line":1919},30,[252,1921,419],{"class":262},[252,1923,1924],{"class":266}," LegalOverride",[252,1926,707],{"class":262},[252,1928,710],{"class":262},[252,1930,1932,1935],{"class":254,"line":1931},31,[252,1933,1934],{"class":715},"    Stream ",[252,1936,1937],{"class":266},"Stream\n",[252,1939,1941,1944],{"class":254,"line":1940},32,[252,1942,1943],{"class":715},"    Footer ",[252,1945,1946],{"class":266},"FooterVariant\n",[252,1948,1950,1953],{"class":254,"line":1949},33,[252,1951,1952],{"class":715},"    Copy   ",[252,1954,1955],{"class":266},"FooterCopy\n",[252,1957,1959],{"class":254,"line":1958},34,[252,1960,781],{"class":262},[252,1962,1964],{"class":254,"line":1963},35,[252,1965,413],{"emptyLinePlaceholder":412},[252,1967,1969,1971,1974,1976,1979,1981,1984,1986],{"class":254,"line":1968},36,[252,1970,419],{"class":262},[252,1972,1973],{"class":266}," NavLink",[252,1975,434],{"class":262},[252,1977,1978],{"class":715}," Label",[252,1980,317],{"class":262},[252,1982,1983],{"class":715}," Href ",[252,1985,761],{"class":323},[252,1987,441],{"class":262},[252,1989,1991,1993,1996,1998,2000,2002,2005,2007],{"class":254,"line":1990},37,[252,1992,419],{"class":262},[252,1994,1995],{"class":266}," TextLink",[252,1997,434],{"class":262},[252,1999,1978],{"class":715},[252,2001,317],{"class":262},[252,2003,2004],{"class":715}," URL ",[252,2006,761],{"class":323},[252,2008,441],{"class":262},[569,2010,2011,2019],{},[572,2012,2013],{},[575,2014,2015,2017],{},[578,2016,580],{},[578,2018,583],{},[585,2020,2021,2030,2042,2054,2063],{},[575,2022,2023,2027],{},[590,2024,2025],{},[201,2026,1411],{},[590,2028,2029],{},"A consumer-defined kind of email: sender, stream, chrome, footer copy and forbidden modules.",[575,2031,2032,2036],{},[590,2033,2034],{},[201,2035,1712],{},[590,2037,2038,2039,2041],{},"A family's footer copy. Each string is one paragraph of Markdown, or plain text, with ",[201,2040,1322],{}," placeholders and no merge tags. The footer variant decides which fields are shown.",[575,2043,2044,2048],{},[590,2045,2046],{},[201,2047,1745],{},[590,2049,2050,2051,625],{},"The stream, footer and copy a family switches to when a template sets ",[201,2052,2053],{},"legal: true",[575,2055,2056,2060],{},[590,2057,2058],{},[201,2059,1804],{},[590,2061,2062],{},"One link of the F1 nav row. Both fields may use placeholders.",[575,2064,2065,2069],{},[590,2066,2067],{},[201,2068,1903],{},[590,2070,2071,2072,2075,2076,2079,2080,2083],{},"One plain-text footer line, ",[201,2073,2074],{},"Label: URL",". ",[201,2077,2078],{},"URL"," may use placeholders. ",[201,2081,2082],{},"Label"," is literal.",[243,2085,2087],{"className":245,"code":2086,"language":247,"meta":248,"style":248},"type HeaderVariant = layout.HeaderVariant\ntype FooterVariant = layout.FooterVariant\n\nconst (\n    H1 = layout.H1 \u002F\u002F logo\n    H2 = layout.H2 \u002F\u002F logo with the internal banner (Family.Banner)\n    H3 = layout.H3 \u002F\u002F newsletter masthead (Family.Masthead)\n)\n\nconst (\n    F1         = layout.F1         \u002F\u002F marketing: nav, reason, unsubscribe and preferences links\n    F2         = layout.F2         \u002F\u002F service: note and \"service email about {about}\" line\n    F3         = layout.F3         \u002F\u002F outreach: opt-out line\n    F3Internal = layout.F3Internal \u002F\u002F internal: internal-only line\n)\n",[201,2088,2089,2106,2121,2125,2133,2151,2168,2185,2189,2193,2199,2216,2233,2250,2267],{"__ignoreMap":248},[252,2090,2091,2093,2096,2098,2101,2103],{"class":254,"line":255},[252,2092,419],{"class":262},[252,2094,2095],{"class":266}," HeaderVariant",[252,2097,1342],{"class":262},[252,2099,2100],{"class":266}," layout",[252,2102,625],{"class":262},[252,2104,2105],{"class":266},"HeaderVariant\n",[252,2107,2108,2110,2113,2115,2117,2119],{"class":254,"line":360},[252,2109,419],{"class":262},[252,2111,2112],{"class":266}," FooterVariant",[252,2114,1342],{"class":262},[252,2116,2100],{"class":266},[252,2118,625],{"class":262},[252,2120,1946],{"class":266},[252,2122,2123],{"class":254,"line":409},[252,2124,413],{"emptyLinePlaceholder":412},[252,2126,2127,2130],{"class":254,"line":416},[252,2128,2129],{"class":262},"const",[252,2131,2132],{"class":262}," (\n",[252,2134,2135,2138,2141,2143,2145,2148],{"class":254,"line":444},[252,2136,2137],{"class":715},"    H1 ",[252,2139,2140],{"class":262},"=",[252,2142,2100],{"class":715},[252,2144,625],{"class":262},[252,2146,2147],{"class":715},"H1 ",[252,2149,2150],{"class":437},"\u002F\u002F logo\n",[252,2152,2153,2156,2158,2160,2162,2165],{"class":254,"line":449},[252,2154,2155],{"class":715},"    H2 ",[252,2157,2140],{"class":262},[252,2159,2100],{"class":715},[252,2161,625],{"class":262},[252,2163,2164],{"class":715},"H2 ",[252,2166,2167],{"class":437},"\u002F\u002F logo with the internal banner (Family.Banner)\n",[252,2169,2170,2173,2175,2177,2179,2182],{"class":254,"line":515},[252,2171,2172],{"class":715},"    H3 ",[252,2174,2140],{"class":262},[252,2176,2100],{"class":715},[252,2178,625],{"class":262},[252,2180,2181],{"class":715},"H3 ",[252,2183,2184],{"class":437},"\u002F\u002F newsletter masthead (Family.Masthead)\n",[252,2186,2187],{"class":254,"line":543},[252,2188,357],{"class":262},[252,2190,2191],{"class":254,"line":784},[252,2192,413],{"emptyLinePlaceholder":412},[252,2194,2195,2197],{"class":254,"line":789},[252,2196,2129],{"class":262},[252,2198,2132],{"class":262},[252,2200,2201,2204,2206,2208,2210,2213],{"class":254,"line":801},[252,2202,2203],{"class":715},"    F1         ",[252,2205,2140],{"class":262},[252,2207,2100],{"class":715},[252,2209,625],{"class":262},[252,2211,2212],{"class":715},"F1         ",[252,2214,2215],{"class":437},"\u002F\u002F marketing: nav, reason, unsubscribe and preferences links\n",[252,2217,2218,2221,2223,2225,2227,2230],{"class":254,"line":812},[252,2219,2220],{"class":715},"    F2         ",[252,2222,2140],{"class":262},[252,2224,2100],{"class":715},[252,2226,625],{"class":262},[252,2228,2229],{"class":715},"F2         ",[252,2231,2232],{"class":437},"\u002F\u002F service: note and \"service email about {about}\" line\n",[252,2234,2235,2238,2240,2242,2244,2247],{"class":254,"line":823},[252,2236,2237],{"class":715},"    F3         ",[252,2239,2140],{"class":262},[252,2241,2100],{"class":715},[252,2243,625],{"class":262},[252,2245,2246],{"class":715},"F3         ",[252,2248,2249],{"class":437},"\u002F\u002F outreach: opt-out line\n",[252,2251,2252,2255,2257,2259,2261,2264],{"class":254,"line":834},[252,2253,2254],{"class":715},"    F3Internal ",[252,2256,2140],{"class":262},[252,2258,2100],{"class":715},[252,2260,625],{"class":262},[252,2262,2263],{"class":715},"F3Internal ",[252,2265,2266],{"class":437},"\u002F\u002F internal: internal-only line\n",[252,2268,2269],{"class":254,"line":846},[252,2270,357],{"class":262},[197,2272,2273,2274,625],{},"The header and footer chrome variants. See ",[862,2275,74],{"href":75},[275,2277,2279],{"id":2278},"pick-a-stream","Pick a stream",[243,2281,2283],{"className":245,"code":2282,"language":247,"meta":248,"style":248},"type Stream string\n\nconst (\n    Transactional Stream = \"transactional\" \u002F\u002F mail the recipient triggered: receipts, orders, payouts\n    Security      Stream = \"security\"      \u002F\u002F account security: sign-in codes, password resets\n    Marketing     Stream = \"marketing\"     \u002F\u002F opted-in promotional mail; carries List-Unsubscribe\n    Outreach      Stream = \"outreach\"      \u002F\u002F business-to-business mail, kept apart from Marketing\n    Internal      Stream = \"internal\"      \u002F\u002F mail to the operator's own staff only\n)\n\nfunc (s Stream) Valid() bool\n",[201,2284,2285,2294,2298,2304,2324,2343,2362,2381,2400,2404,2408],{"__ignoreMap":248},[252,2286,2287,2289,2292],{"class":254,"line":255},[252,2288,419],{"class":262},[252,2290,2291],{"class":266}," Stream",[252,2293,567],{"class":323},[252,2295,2296],{"class":254,"line":360},[252,2297,413],{"emptyLinePlaceholder":412},[252,2299,2300,2302],{"class":254,"line":409},[252,2301,2129],{"class":262},[252,2303,2132],{"class":262},[252,2305,2306,2309,2311,2313,2315,2318,2321],{"class":254,"line":416},[252,2307,2308],{"class":715},"    Transactional ",[252,2310,734],{"class":266},[252,2312,1342],{"class":262},[252,2314,263],{"class":262},[252,2316,2317],{"class":1166},"transactional",[252,2319,2320],{"class":262},"\"",[252,2322,2323],{"class":437}," \u002F\u002F mail the recipient triggered: receipts, orders, payouts\n",[252,2325,2326,2329,2331,2333,2335,2338,2340],{"class":254,"line":444},[252,2327,2328],{"class":715},"    Security      ",[252,2330,734],{"class":266},[252,2332,1342],{"class":262},[252,2334,263],{"class":262},[252,2336,2337],{"class":1166},"security",[252,2339,2320],{"class":262},[252,2341,2342],{"class":437},"      \u002F\u002F account security: sign-in codes, password resets\n",[252,2344,2345,2348,2350,2352,2354,2357,2359],{"class":254,"line":449},[252,2346,2347],{"class":715},"    Marketing     ",[252,2349,734],{"class":266},[252,2351,1342],{"class":262},[252,2353,263],{"class":262},[252,2355,2356],{"class":1166},"marketing",[252,2358,2320],{"class":262},[252,2360,2361],{"class":437},"     \u002F\u002F opted-in promotional mail; carries List-Unsubscribe\n",[252,2363,2364,2367,2369,2371,2373,2376,2378],{"class":254,"line":515},[252,2365,2366],{"class":715},"    Outreach      ",[252,2368,734],{"class":266},[252,2370,1342],{"class":262},[252,2372,263],{"class":262},[252,2374,2375],{"class":1166},"outreach",[252,2377,2320],{"class":262},[252,2379,2380],{"class":437},"      \u002F\u002F business-to-business mail, kept apart from Marketing\n",[252,2382,2383,2386,2388,2390,2392,2395,2397],{"class":254,"line":543},[252,2384,2385],{"class":715},"    Internal      ",[252,2387,734],{"class":266},[252,2389,1342],{"class":262},[252,2391,263],{"class":262},[252,2393,2394],{"class":1166},"internal",[252,2396,2320],{"class":262},[252,2398,2399],{"class":437},"      \u002F\u002F mail to the operator's own staff only\n",[252,2401,2402],{"class":254,"line":784},[252,2403,357],{"class":262},[252,2405,2406],{"class":254,"line":789},[252,2407,413],{"emptyLinePlaceholder":412},[252,2409,2410,2412,2414,2417,2419,2421,2424,2426],{"class":254,"line":801},[252,2411,288],{"class":262},[252,2413,454],{"class":262},[252,2415,2416],{"class":298},"s ",[252,2418,734],{"class":266},[252,2420,338],{"class":262},[252,2422,2423],{"class":291}," Valid",[252,2425,537],{"class":262},[252,2427,2428],{"class":323}," bool\n",[197,2430,2431,2432,2435,2436,2075,2439,2442,2443,2446],{},"A message's sending stream. Streams keep reputations apart: a ",[201,2433,2434],{},"Router"," sends each one through its own ",[201,2437,2438],{},"Sender",[201,2440,2441],{},"Valid"," reports whether ",[201,2444,2445],{},"s"," is one of the five.",[275,2448,2450],{"id":2449},"work-with-a-message","Work with a message",[243,2452,2454],{"className":245,"code":2453,"language":247,"meta":248,"style":248},"type Message struct {\n    Template, Family   string       \u002F\u002F not written to the wire\n    Stream             Stream       \u002F\u002F selects the Router's sender\n    From, To           mail.Address \u002F\u002F sender and the single recipient\n    Subject, Preheader string\n    HTML, Text         string       \u002F\u002F the two bodies of the multipart\u002Falternative message\n    Tracking           bool         \u002F\u002F whether the HTML carries tracked links (the family's Tracking)\n    Warnings           []string     \u002F\u002F non-fatal findings from compile and render\n    \u002F\u002F unexported header fields\n}\n\nfunc (m *Message) MIME(date time.Time) ([]byte, error)\nfunc (m *Message) SetHeader(name, value string) error\nfunc (m *Message) SetListUnsubscribe(u string) error\nfunc (m *Message) Header(name string) string\nfunc (m *Message) Headers() []string\nfunc (m *Message) Clone() *Message\n",[201,2455,2456,2467,2482,2492,2511,2523,2538,2548,2560,2565,2569,2573,2617,2649,2677,2704,2727],{"__ignoreMap":248},[252,2457,2458,2460,2463,2465],{"class":254,"line":255},[252,2459,419],{"class":262},[252,2461,2462],{"class":266}," Message",[252,2464,707],{"class":262},[252,2466,710],{"class":262},[252,2468,2469,2472,2474,2477,2479],{"class":254,"line":360},[252,2470,2471],{"class":715},"    Template",[252,2473,317],{"class":262},[252,2475,2476],{"class":715}," Family   ",[252,2478,761],{"class":323},[252,2480,2481],{"class":437},"       \u002F\u002F not written to the wire\n",[252,2483,2484,2487,2489],{"class":254,"line":409},[252,2485,2486],{"class":715},"    Stream             ",[252,2488,734],{"class":266},[252,2490,2491],{"class":437},"       \u002F\u002F selects the Router's sender\n",[252,2493,2494,2497,2499,2502,2504,2506,2508],{"class":254,"line":416},[252,2495,2496],{"class":715},"    From",[252,2498,317],{"class":262},[252,2500,2501],{"class":715}," To           ",[252,2503,1645],{"class":266},[252,2505,625],{"class":262},[252,2507,1133],{"class":266},[252,2509,2510],{"class":437}," \u002F\u002F sender and the single recipient\n",[252,2512,2513,2516,2518,2521],{"class":254,"line":444},[252,2514,2515],{"class":715},"    Subject",[252,2517,317],{"class":262},[252,2519,2520],{"class":715}," Preheader ",[252,2522,719],{"class":323},[252,2524,2525,2528,2530,2533,2535],{"class":254,"line":449},[252,2526,2527],{"class":715},"    HTML",[252,2529,317],{"class":262},[252,2531,2532],{"class":715}," Text         ",[252,2534,761],{"class":323},[252,2536,2537],{"class":437},"       \u002F\u002F the two bodies of the multipart\u002Falternative message\n",[252,2539,2540,2543,2545],{"class":254,"line":515},[252,2541,2542],{"class":715},"    Tracking           ",[252,2544,840],{"class":323},[252,2546,2547],{"class":437},"         \u002F\u002F whether the HTML carries tracked links (the family's Tracking)\n",[252,2549,2550,2553,2555,2557],{"class":254,"line":543},[252,2551,2552],{"class":715},"    Warnings           ",[252,2554,745],{"class":262},[252,2556,761],{"class":323},[252,2558,2559],{"class":437},"     \u002F\u002F non-fatal findings from compile and render\n",[252,2561,2562],{"class":254,"line":784},[252,2563,2564],{"class":437},"    \u002F\u002F unexported header fields\n",[252,2566,2567],{"class":254,"line":789},[252,2568,781],{"class":262},[252,2570,2571],{"class":254,"line":801},[252,2572,413],{"emptyLinePlaceholder":412},[252,2574,2575,2577,2579,2582,2584,2586,2588,2591,2593,2596,2599,2601,2604,2606,2609,2611,2613,2615],{"class":254,"line":812},[252,2576,288],{"class":262},[252,2578,454],{"class":262},[252,2580,2581],{"class":298},"m ",[252,2583,460],{"class":262},[252,2585,506],{"class":266},[252,2587,338],{"class":262},[252,2589,2590],{"class":291}," MIME",[252,2592,475],{"class":262},[252,2594,2595],{"class":298},"date",[252,2597,2598],{"class":266}," time",[252,2600,625],{"class":262},[252,2602,2603],{"class":266},"Time",[252,2605,338],{"class":262},[252,2607,2608],{"class":262}," ([]",[252,2610,335],{"class":323},[252,2612,317],{"class":262},[252,2614,354],{"class":323},[252,2616,357],{"class":262},[252,2618,2619,2621,2623,2625,2627,2629,2631,2634,2636,2638,2640,2643,2645,2647],{"class":254,"line":823},[252,2620,288],{"class":262},[252,2622,454],{"class":262},[252,2624,2581],{"class":298},[252,2626,460],{"class":262},[252,2628,506],{"class":266},[252,2630,338],{"class":262},[252,2632,2633],{"class":291}," SetHeader",[252,2635,475],{"class":262},[252,2637,604],{"class":298},[252,2639,317],{"class":262},[252,2641,2642],{"class":298}," value",[252,2644,324],{"class":323},[252,2646,338],{"class":262},[252,2648,1528],{"class":323},[252,2650,2651,2653,2655,2657,2659,2661,2663,2666,2668,2671,2673,2675],{"class":254,"line":834},[252,2652,288],{"class":262},[252,2654,454],{"class":262},[252,2656,2581],{"class":298},[252,2658,460],{"class":262},[252,2660,506],{"class":266},[252,2662,338],{"class":262},[252,2664,2665],{"class":291}," SetListUnsubscribe",[252,2667,475],{"class":262},[252,2669,2670],{"class":298},"u",[252,2672,324],{"class":323},[252,2674,338],{"class":262},[252,2676,1528],{"class":323},[252,2678,2679,2681,2683,2685,2687,2689,2691,2694,2696,2698,2700,2702],{"class":254,"line":846},[252,2680,288],{"class":262},[252,2682,454],{"class":262},[252,2684,2581],{"class":298},[252,2686,460],{"class":262},[252,2688,506],{"class":266},[252,2690,338],{"class":262},[252,2692,2693],{"class":291}," Header",[252,2695,475],{"class":262},[252,2697,604],{"class":298},[252,2699,324],{"class":323},[252,2701,338],{"class":262},[252,2703,567],{"class":323},[252,2705,2706,2708,2710,2712,2714,2716,2718,2721,2723,2725],{"class":254,"line":1028},[252,2707,288],{"class":262},[252,2709,454],{"class":262},[252,2711,2581],{"class":298},[252,2713,460],{"class":262},[252,2715,506],{"class":266},[252,2717,338],{"class":262},[252,2719,2720],{"class":291}," Headers",[252,2722,537],{"class":262},[252,2724,332],{"class":262},[252,2726,719],{"class":323},[252,2728,2729,2731,2733,2735,2737,2739,2741,2744,2746,2748],{"class":254,"line":1039},[252,2730,288],{"class":262},[252,2732,454],{"class":262},[252,2734,2581],{"class":298},[252,2736,460],{"class":262},[252,2738,506],{"class":266},[252,2740,338],{"class":262},[252,2742,2743],{"class":291}," Clone",[252,2745,537],{"class":262},[252,2747,311],{"class":262},[252,2749,2750],{"class":266},"Message\n",[569,2752,2753,2761],{},[572,2754,2755],{},[575,2756,2757,2759],{},[578,2758,580],{},[578,2760,583],{},[585,2762,2763,2772,2786,2800,2824,2837,2847],{},[575,2764,2765,2769],{},[590,2766,2767],{},[201,2768,506],{},[590,2770,2771],{},"A rendered email: envelope, both bodies and any extra headers.",[575,2773,2774,2779],{},[590,2775,2776],{},[201,2777,2778],{},"MIME",[590,2780,2781,2782,2785],{},"Serialises an RFC 5322 ",[201,2783,2784],{},"multipart\u002Falternative"," message with CRLF line endings: text part first, then HTML, both UTF-8 quoted-printable. Headers go in a fixed order, and non-ASCII subjects and names are RFC 2047 encoded. The Message-ID and boundary are random, so two calls differ.",[575,2787,2788,2793],{},[590,2789,2790],{},[201,2791,2792],{},"SetHeader",[590,2794,2795,2796,2799],{},"Sets a custom header. It refuses the headers MIME writes itself and ",[201,2797,2798],{},"List-Unsubscribe*",", and refuses names or values with CR, LF, NUL or non-printable bytes.",[575,2801,2802,2807],{},[590,2803,2804],{},[201,2805,2806],{},"SetListUnsubscribe",[590,2808,2809,2810,226,2813,2816,2817,2819,2820,2823],{},"Sets the RFC 8058 one-click ",[201,2811,2812],{},"List-Unsubscribe",[201,2814,2815],{},"List-Unsubscribe-Post"," headers. ",[201,2818,2670],{}," must be absolute https. ",[201,2821,2822],{},"Render"," calls it on the marketing stream.",[575,2825,2826,2831],{},[590,2827,2828],{},[201,2829,2830],{},"Header",[590,2832,2833,2834,625],{},"A custom header's value, matched case-insensitively, or ",[201,2835,2836],{},"\"\"",[575,2838,2839,2844],{},[590,2840,2841],{},[201,2842,2843],{},"Headers",[590,2845,2846],{},"The custom header names, canonical and sorted, in the order MIME writes them.",[575,2848,2849,2854],{},[590,2850,2851],{},[201,2852,2853],{},"Clone",[590,2855,2856],{},"A deep copy. Changing its headers or warnings doesn't affect the original.",[197,2858,2859,2860,625],{},"See ",[862,2861,110],{"href":111},[275,2863,2865],{"id":2864},"send","Send",[243,2867,2869],{"className":245,"code":2868,"language":247,"meta":248,"style":248},"type Sender interface {\n    Send(ctx context.Context, m *Message) error\n}\n\ntype Router struct {\n    Streams         map[Stream]Sender\n    InternalAllowed func(addr string) bool                                     \u002F\u002F nil denies all Internal mail\n    Suppressed      func(ctx context.Context, s Stream, addr string) (bool, error) \u002F\u002F nil suppresses nothing\n}\n\nfunc (r *Router) Send(ctx context.Context, m *Message) error\n\ntype SMTP struct {\n    Addr    string            \u002F\u002F host:port\n    Auth    smtp.Auth         \u002F\u002F nil sends without authentication\n    Headers map[string]string \u002F\u002F added to a copy of every message, e.g. X-SES-CONFIGURATION-SET\n    Now     func() time.Time  \u002F\u002F stamps the Date header; nil means time.Now\n}\n\nfunc (s *SMTP) Send(ctx context.Context, m *Message) error\n\nvar ErrSuppressed = errors.New(\"recipient suppressed\")\n",[201,2870,2871,2883,2914,2918,2922,2933,2947,2967,3011,3015,3019,3058,3062,3073,3083,3099,3115,3132,3136,3140,3178,3182],{"__ignoreMap":248},[252,2872,2873,2875,2878,2881],{"class":254,"line":255},[252,2874,419],{"class":262},[252,2876,2877],{"class":266}," Sender",[252,2879,2880],{"class":262}," interface",[252,2882,710],{"class":262},[252,2884,2885,2888,2890,2893,2896,2898,2901,2903,2906,2908,2910,2912],{"class":254,"line":360},[252,2886,2887],{"class":291},"    Send",[252,2889,475],{"class":262},[252,2891,2892],{"class":298},"ctx",[252,2894,2895],{"class":266}," context",[252,2897,625],{"class":262},[252,2899,2900],{"class":266},"Context",[252,2902,317],{"class":262},[252,2904,2905],{"class":298}," m",[252,2907,311],{"class":262},[252,2909,506],{"class":266},[252,2911,338],{"class":262},[252,2913,1528],{"class":323},[252,2915,2916],{"class":254,"line":409},[252,2917,781],{"class":262},[252,2919,2920],{"class":254,"line":416},[252,2921,413],{"emptyLinePlaceholder":412},[252,2923,2924,2926,2929,2931],{"class":254,"line":444},[252,2925,419],{"class":262},[252,2927,2928],{"class":266}," Router",[252,2930,707],{"class":262},[252,2932,710],{"class":262},[252,2934,2935,2938,2940,2942,2944],{"class":254,"line":449},[252,2936,2937],{"class":715},"    Streams         ",[252,2939,1001],{"class":262},[252,2941,734],{"class":266},[252,2943,431],{"class":262},[252,2945,2946],{"class":266},"Sender\n",[252,2948,2949,2952,2955,2958,2960,2962,2964],{"class":254,"line":515},[252,2950,2951],{"class":715},"    InternalAllowed ",[252,2953,2954],{"class":262},"func(",[252,2956,2957],{"class":298},"addr",[252,2959,324],{"class":323},[252,2961,338],{"class":262},[252,2963,1474],{"class":323},[252,2965,2966],{"class":437},"                                     \u002F\u002F nil denies all Internal mail\n",[252,2968,2969,2972,2974,2976,2978,2980,2982,2984,2987,2989,2991,2994,2996,2998,3000,3002,3004,3006,3008],{"class":254,"line":543},[252,2970,2971],{"class":715},"    Suppressed      ",[252,2973,2954],{"class":262},[252,2975,2892],{"class":298},[252,2977,2895],{"class":266},[252,2979,625],{"class":262},[252,2981,2900],{"class":266},[252,2983,317],{"class":262},[252,2985,2986],{"class":298}," s",[252,2988,2291],{"class":266},[252,2990,317],{"class":262},[252,2992,2993],{"class":298}," addr",[252,2995,324],{"class":323},[252,2997,338],{"class":262},[252,2999,454],{"class":262},[252,3001,840],{"class":323},[252,3003,317],{"class":262},[252,3005,354],{"class":323},[252,3007,338],{"class":262},[252,3009,3010],{"class":437}," \u002F\u002F nil suppresses nothing\n",[252,3012,3013],{"class":254,"line":784},[252,3014,781],{"class":262},[252,3016,3017],{"class":254,"line":789},[252,3018,413],{"emptyLinePlaceholder":412},[252,3020,3021,3023,3025,3027,3029,3031,3033,3036,3038,3040,3042,3044,3046,3048,3050,3052,3054,3056],{"class":254,"line":801},[252,3022,288],{"class":262},[252,3024,454],{"class":262},[252,3026,1448],{"class":298},[252,3028,460],{"class":262},[252,3030,2434],{"class":266},[252,3032,338],{"class":262},[252,3034,3035],{"class":291}," Send",[252,3037,475],{"class":262},[252,3039,2892],{"class":298},[252,3041,2895],{"class":266},[252,3043,625],{"class":262},[252,3045,2900],{"class":266},[252,3047,317],{"class":262},[252,3049,2905],{"class":298},[252,3051,311],{"class":262},[252,3053,506],{"class":266},[252,3055,338],{"class":262},[252,3057,1528],{"class":323},[252,3059,3060],{"class":254,"line":812},[252,3061,413],{"emptyLinePlaceholder":412},[252,3063,3064,3066,3069,3071],{"class":254,"line":823},[252,3065,419],{"class":262},[252,3067,3068],{"class":266}," SMTP",[252,3070,707],{"class":262},[252,3072,710],{"class":262},[252,3074,3075,3078,3080],{"class":254,"line":834},[252,3076,3077],{"class":715},"    Addr    ",[252,3079,761],{"class":323},[252,3081,3082],{"class":437},"            \u002F\u002F host:port\n",[252,3084,3085,3088,3091,3093,3096],{"class":254,"line":846},[252,3086,3087],{"class":715},"    Auth    ",[252,3089,3090],{"class":266},"smtp",[252,3092,625],{"class":262},[252,3094,3095],{"class":266},"Auth",[252,3097,3098],{"class":437},"         \u002F\u002F nil sends without authentication\n",[252,3100,3101,3104,3106,3108,3110,3112],{"class":254,"line":1028},[252,3102,3103],{"class":715},"    Headers ",[252,3105,1001],{"class":262},[252,3107,761],{"class":323},[252,3109,431],{"class":262},[252,3111,761],{"class":323},[252,3113,3114],{"class":437}," \u002F\u002F added to a copy of every message, e.g. X-SES-CONFIGURATION-SET\n",[252,3116,3117,3120,3123,3125,3127,3129],{"class":254,"line":1039},[252,3118,3119],{"class":715},"    Now     ",[252,3121,3122],{"class":262},"func()",[252,3124,2598],{"class":266},[252,3126,625],{"class":262},[252,3128,2603],{"class":266},[252,3130,3131],{"class":437},"  \u002F\u002F stamps the Date header; nil means time.Now\n",[252,3133,3134],{"class":254,"line":1044},[252,3135,781],{"class":262},[252,3137,3138],{"class":254,"line":1049},[252,3139,413],{"emptyLinePlaceholder":412},[252,3141,3142,3144,3146,3148,3150,3152,3154,3156,3158,3160,3162,3164,3166,3168,3170,3172,3174,3176],{"class":254,"line":1061},[252,3143,288],{"class":262},[252,3145,454],{"class":262},[252,3147,2416],{"class":298},[252,3149,460],{"class":262},[252,3151,120],{"class":266},[252,3153,338],{"class":262},[252,3155,3035],{"class":291},[252,3157,475],{"class":262},[252,3159,2892],{"class":298},[252,3161,2895],{"class":266},[252,3163,625],{"class":262},[252,3165,2900],{"class":266},[252,3167,317],{"class":262},[252,3169,2905],{"class":298},[252,3171,311],{"class":262},[252,3173,506],{"class":266},[252,3175,338],{"class":262},[252,3177,1528],{"class":323},[252,3179,3180],{"class":254,"line":1069},[252,3181,413],{"emptyLinePlaceholder":412},[252,3183,3184,3187,3190,3192,3195,3197,3200,3202,3204,3207,3209],{"class":254,"line":1840},[252,3185,3186],{"class":262},"var",[252,3188,3189],{"class":715}," ErrSuppressed ",[252,3191,2140],{"class":262},[252,3193,3194],{"class":715}," errors",[252,3196,625],{"class":262},[252,3198,3199],{"class":291},"New",[252,3201,475],{"class":262},[252,3203,2320],{"class":262},[252,3205,3206],{"class":1166},"recipient suppressed",[252,3208,2320],{"class":262},[252,3210,357],{"class":262},[569,3212,3213,3221],{},[572,3214,3215],{},[575,3216,3217,3219],{},[578,3218,580],{},[578,3220,583],{},[585,3222,3223,3232,3244,3262,3274,3307],{},[575,3224,3225,3229],{},[590,3226,3227],{},[201,3228,2438],{},[590,3230,3231],{},"Delivers a message.",[575,3233,3234,3238],{},[590,3235,3236],{},[201,3237,2434],{},[590,3239,3240,3241,3243],{},"Sends each message through the ",[201,3242,2438],{}," for its stream, after the internal-mail and suppression checks. It never modifies the message.",[575,3245,3246,3251],{},[590,3247,3248],{},[201,3249,3250],{},"Router.Send",[590,3252,3253,3254,3257,3258,3261],{},"Fails if the stream has no sender, if the recipient isn't a plain ",[201,3255,3256],{},"local@domain",", if Internal mail goes to an address ",[201,3259,3260],{},"InternalAllowed"," doesn't accept, or if the recipient is suppressed.",[575,3263,3264,3268],{},[590,3265,3266],{},[201,3267,120],{},[590,3269,3270,3271,3273],{},"A ",[201,3272,2438],{}," that delivers each message over one SMTP session.",[575,3275,3276,3281],{},[590,3277,3278],{},[201,3279,3280],{},"SMTP.Send",[590,3282,3283,3284,3286,3287,1608,3290,226,3293,1608,3296,3299,3300,3303,3304,3306],{},"Checks the message before connecting, then sends a copy with ",[201,3285,2843],{}," added. ",[201,3288,3289],{},"MAIL FROM",[201,3291,3292],{},"m.From.Address",[201,3294,3295],{},"RCPT TO",[201,3297,3298],{},"m.To.Address",". It uses STARTTLS when the server offers it, verified against the host of ",[201,3301,3302],{},"Addr",". Cancelling ",[201,3305,2892],{}," aborts the dial and the session.",[575,3308,3309,3314],{},[590,3310,3311],{},[201,3312,3313],{},"ErrSuppressed",[590,3315,3316,3317,3320,3321,625],{},"Returned, wrapped with the address, when ",[201,3318,3319],{},"Suppressed"," reports the recipient. Test with ",[201,3322,3323],{},"errors.Is",[197,3325,2859,3326,226,3328,625],{},[862,3327,115],{"href":116},[862,3329,120],{"href":121},[275,3331,3333],{"id":3332},"version","Version",[243,3335,3337],{"className":245,"code":3336,"language":247,"meta":248,"style":248},"const Version = \"v0.0.0-dev\"\n",[201,3338,3339],{"__ignoreMap":248},[252,3340,3341,3343,3346,3348,3350,3353],{"class":254,"line":255},[252,3342,2129],{"class":262},[252,3344,3345],{"class":715}," Version ",[252,3347,2140],{"class":262},[252,3349,263],{"class":262},[252,3351,3352],{"class":1166},"v0.0.0-dev",[252,3354,270],{"class":262},[197,3356,3357,3358,625],{},"The library's version string as written in source. The release workflow tags commits without rewriting it, so read a consumer's lttr version from its module graph instead. See ",[862,3359,171],{"href":172},[238,3361,3363],{"id":3362},"import-lttrcomark","Import lttr\u002Fcomark",[243,3365,3367],{"className":245,"code":3366,"language":247,"meta":248,"style":248},"import \"github.com\u002Fsulv-io\u002Flttr\u002Fcomark\"\n",[201,3368,3369],{"__ignoreMap":248},[252,3370,3371,3373,3375,3378],{"class":254,"line":255},[252,3372,259],{"class":258},[252,3374,263],{"class":262},[252,3376,3377],{"class":266},"github.com\u002Fsulv-io\u002Flttr\u002Fcomark",[252,3379,270],{"class":262},[197,3381,3382,3383,625],{},"The parser: Markdown with frontmatter, block and inline components, spans, element attributes and merge tags, built on goldmark. See ",[862,3384,38],{"href":39},[243,3386,3388],{"className":245,"code":3387,"language":247,"meta":248,"style":248},"func Parse(src []byte) (*Document, error)\nfunc ParseAttrs(s string, base Pos) (Attrs, int, error)\nfunc ParseText(s string, base Pos) (Text, error)\nfunc NodeAttrs(n ast.Node) (Attrs, bool)\nfunc PlainText(n ast.Node, src []byte) string\n",[201,3389,3390,3418,3457,3489,3521],{"__ignoreMap":248},[252,3391,3392,3394,3397,3399,3401,3403,3405,3407,3409,3412,3414,3416],{"class":254,"line":255},[252,3393,288],{"class":262},[252,3395,3396],{"class":291}," Parse",[252,3398,475],{"class":262},[252,3400,600],{"class":298},[252,3402,332],{"class":262},[252,3404,335],{"class":323},[252,3406,338],{"class":262},[252,3408,341],{"class":262},[252,3410,3411],{"class":266},"Document",[252,3413,317],{"class":262},[252,3415,354],{"class":323},[252,3417,357],{"class":262},[252,3419,3420,3422,3425,3427,3429,3431,3433,3436,3439,3441,3443,3446,3448,3451,3453,3455],{"class":254,"line":360},[252,3421,288],{"class":262},[252,3423,3424],{"class":291}," ParseAttrs",[252,3426,475],{"class":262},[252,3428,2445],{"class":298},[252,3430,324],{"class":323},[252,3432,317],{"class":262},[252,3434,3435],{"class":298}," base",[252,3437,3438],{"class":266}," Pos",[252,3440,338],{"class":262},[252,3442,454],{"class":262},[252,3444,3445],{"class":266},"Attrs",[252,3447,317],{"class":262},[252,3449,3450],{"class":323}," int",[252,3452,317],{"class":262},[252,3454,354],{"class":323},[252,3456,357],{"class":262},[252,3458,3459,3461,3464,3466,3468,3470,3472,3474,3476,3478,3480,3483,3485,3487],{"class":254,"line":409},[252,3460,288],{"class":262},[252,3462,3463],{"class":291}," ParseText",[252,3465,475],{"class":262},[252,3467,2445],{"class":298},[252,3469,324],{"class":323},[252,3471,317],{"class":262},[252,3473,3435],{"class":298},[252,3475,3438],{"class":266},[252,3477,338],{"class":262},[252,3479,454],{"class":262},[252,3481,3482],{"class":266},"Text",[252,3484,317],{"class":262},[252,3486,354],{"class":323},[252,3488,357],{"class":262},[252,3490,3491,3493,3496,3498,3501,3504,3506,3509,3511,3513,3515,3517,3519],{"class":254,"line":416},[252,3492,288],{"class":262},[252,3494,3495],{"class":291}," NodeAttrs",[252,3497,475],{"class":262},[252,3499,3500],{"class":298},"n",[252,3502,3503],{"class":266}," ast",[252,3505,625],{"class":262},[252,3507,3508],{"class":266},"Node",[252,3510,338],{"class":262},[252,3512,454],{"class":262},[252,3514,3445],{"class":266},[252,3516,317],{"class":262},[252,3518,1474],{"class":323},[252,3520,357],{"class":262},[252,3522,3523,3525,3528,3530,3532,3534,3536,3538,3540,3542,3544,3546,3548],{"class":254,"line":444},[252,3524,288],{"class":262},[252,3526,3527],{"class":291}," PlainText",[252,3529,475],{"class":262},[252,3531,3500],{"class":298},[252,3533,3503],{"class":266},[252,3535,625],{"class":262},[252,3537,3508],{"class":266},[252,3539,317],{"class":262},[252,3541,329],{"class":298},[252,3543,332],{"class":262},[252,3545,335],{"class":323},[252,3547,338],{"class":262},[252,3549,567],{"class":323},[569,3551,3552,3561],{},[572,3553,3554],{},[575,3555,3556,3559],{},[578,3557,3558],{},"Function",[578,3560,583],{},[585,3562,3563,3581,3602,3625,3638],{},[575,3564,3565,3570],{},[590,3566,3567],{},[201,3568,3569],{},"Parse",[590,3571,3572,3573,3576,3577,3580],{},"Parses a template. Safe for concurrent use and never panics. Errors are ",[201,3574,3575],{},"*Error"," values (",[201,3578,3579],{},"line:col: msg","). A leading BOM is ignored and CRLF is accepted.",[575,3582,3583,3588],{},[590,3584,3585],{},[201,3586,3587],{},"ParseAttrs",[590,3589,3590,3591,3593,3594,3597,3598,3601],{},"Parses an attribute list at the start of ",[201,3592,2445],{}," (which must start with ",[201,3595,3596],{},"{","). It returns the attributes and the bytes consumed. ",[201,3599,3600],{},"{{"," never starts attributes, and attributes never span lines.",[575,3603,3604,3609],{},[590,3605,3606],{},[201,3607,3608],{},"ParseText",[590,3610,3611,3612,3614,3615,3618,3619,3622,3623,625],{},"Splits ",[201,3613,2445],{}," into literals and merge tags. Malformed tag attempts become literal parts with ",[201,3616,3617],{},"Suspect"," set. The only error is invalid UTF-8. ",[201,3620,3621],{},"\\{{"," is a literal ",[201,3624,3600],{},[575,3626,3627,3632],{},[590,3628,3629],{},[201,3630,3631],{},"NodeAttrs",[590,3633,3634,3635,3637],{},"The attributes of a node: those attached to a link, image, emphasis or code span, or the ",[201,3636,3445],{}," of a component or span.",[575,3639,3640,3645],{},[590,3641,3642],{},[201,3643,3644],{},"PlainText",[590,3646,3647,3648,3651],{},"The text under a node, with escapes and entities resolved and merge tags written back as ",[201,3649,3650],{},"{{path}}",". Raw HTML is skipped.",[243,3653,3655],{"className":245,"code":3654,"language":247,"meta":248,"style":248},"type Document struct {\n    Frontmatter    map[string]any\n    FrontmatterPos map[string]Pos \u002F\u002F dotted key path (\"footer.note\") → key position\n    Root           ast.Node\n    Source         []byte         \u002F\u002F the source without a leading BOM\n}\n\nfunc (d *Document) Pos(n ast.Node) Pos\n\ntype Pos struct{ Line, Col int }\nfunc (p Pos) String() string \u002F\u002F \"3:7\"\n\ntype Error struct {\n    Pos Pos\n    Msg string\n}\nfunc (e *Error) Error() string \u002F\u002F \"line:col: msg\"\n",[201,3656,3657,3668,3682,3699,3712,3724,3728,3732,3764,3768,3789,3812,3816,3827,3835,3842,3846],{"__ignoreMap":248},[252,3658,3659,3661,3664,3666],{"class":254,"line":255},[252,3660,419],{"class":262},[252,3662,3663],{"class":266}," Document",[252,3665,707],{"class":262},[252,3667,710],{"class":262},[252,3669,3670,3673,3675,3677,3679],{"class":254,"line":360},[252,3671,3672],{"class":715},"    Frontmatter    ",[252,3674,1001],{"class":262},[252,3676,761],{"class":323},[252,3678,431],{"class":262},[252,3680,3681],{"class":266},"any\n",[252,3683,3684,3687,3689,3691,3693,3696],{"class":254,"line":409},[252,3685,3686],{"class":715},"    FrontmatterPos ",[252,3688,1001],{"class":262},[252,3690,761],{"class":323},[252,3692,431],{"class":262},[252,3694,3695],{"class":266},"Pos",[252,3697,3698],{"class":437}," \u002F\u002F dotted key path (\"footer.note\") → key position\n",[252,3700,3701,3704,3707,3709],{"class":254,"line":416},[252,3702,3703],{"class":715},"    Root           ",[252,3705,3706],{"class":266},"ast",[252,3708,625],{"class":262},[252,3710,3711],{"class":266},"Node\n",[252,3713,3714,3717,3719,3721],{"class":254,"line":444},[252,3715,3716],{"class":715},"    Source         ",[252,3718,745],{"class":262},[252,3720,335],{"class":323},[252,3722,3723],{"class":437},"         \u002F\u002F the source without a leading BOM\n",[252,3725,3726],{"class":254,"line":449},[252,3727,781],{"class":262},[252,3729,3730],{"class":254,"line":515},[252,3731,413],{"emptyLinePlaceholder":412},[252,3733,3734,3736,3738,3741,3743,3745,3747,3749,3751,3753,3755,3757,3759,3761],{"class":254,"line":543},[252,3735,288],{"class":262},[252,3737,454],{"class":262},[252,3739,3740],{"class":298},"d ",[252,3742,460],{"class":262},[252,3744,3411],{"class":266},[252,3746,338],{"class":262},[252,3748,3438],{"class":291},[252,3750,475],{"class":262},[252,3752,3500],{"class":298},[252,3754,3503],{"class":266},[252,3756,625],{"class":262},[252,3758,3508],{"class":266},[252,3760,338],{"class":262},[252,3762,3763],{"class":266}," Pos\n",[252,3765,3766],{"class":254,"line":784},[252,3767,413],{"emptyLinePlaceholder":412},[252,3769,3770,3772,3774,3776,3779,3781,3784,3787],{"class":254,"line":789},[252,3771,419],{"class":262},[252,3773,3438],{"class":266},[252,3775,434],{"class":262},[252,3777,3778],{"class":715}," Line",[252,3780,317],{"class":262},[252,3782,3783],{"class":715}," Col ",[252,3785,3786],{"class":323},"int",[252,3788,441],{"class":262},[252,3790,3791,3793,3795,3798,3800,3802,3805,3807,3809],{"class":254,"line":801},[252,3792,288],{"class":262},[252,3794,454],{"class":262},[252,3796,3797],{"class":298},"p ",[252,3799,3695],{"class":266},[252,3801,338],{"class":262},[252,3803,3804],{"class":291}," String",[252,3806,537],{"class":262},[252,3808,324],{"class":323},[252,3810,3811],{"class":437}," \u002F\u002F \"3:7\"\n",[252,3813,3814],{"class":254,"line":812},[252,3815,413],{"emptyLinePlaceholder":412},[252,3817,3818,3820,3823,3825],{"class":254,"line":823},[252,3819,419],{"class":262},[252,3821,3822],{"class":266}," Error",[252,3824,707],{"class":262},[252,3826,710],{"class":262},[252,3828,3829,3832],{"class":254,"line":834},[252,3830,3831],{"class":715},"    Pos ",[252,3833,3834],{"class":266},"Pos\n",[252,3836,3837,3840],{"class":254,"line":846},[252,3838,3839],{"class":715},"    Msg ",[252,3841,719],{"class":323},[252,3843,3844],{"class":254,"line":1028},[252,3845,781],{"class":262},[252,3847,3848,3850,3852,3855,3857,3860,3862,3864,3866,3868],{"class":254,"line":1039},[252,3849,288],{"class":262},[252,3851,454],{"class":262},[252,3853,3854],{"class":298},"e ",[252,3856,460],{"class":262},[252,3858,3859],{"class":266},"Error",[252,3861,338],{"class":262},[252,3863,3822],{"class":291},[252,3865,537],{"class":262},[252,3867,324],{"class":323},[252,3869,3870],{"class":437}," \u002F\u002F \"line:col: msg\"\n",[569,3872,3873,3883],{},[572,3874,3875],{},[575,3876,3877,3880],{},[578,3878,3879],{},"Type",[578,3881,3882],{},"Is",[585,3884,3885,3901,3910],{},[575,3886,3887,3891],{},[590,3888,3889],{},[201,3890,3411],{},[590,3892,3893,3894,3896,3897,3900],{},"A parsed template. ",[201,3895,3695],{}," returns a node's ",[201,3898,3899],{},"line:col",", falling back to its first positioned descendant and then its nearest ancestor.",[575,3902,3903,3907],{},[590,3904,3905],{},[201,3906,3695],{},[590,3908,3909],{},"A 1-based line and byte column.",[575,3911,3912,3916],{},[590,3913,3914],{},[201,3915,3859],{},[590,3917,3918],{},"A parse error at a position. Callers prefix the template name.",[243,3920,3922],{"className":245,"code":3921,"language":247,"meta":248,"style":248},"type Attrs struct {\n    ID       string\n    Classes  []string\n    Values   map[string]Text   \u002F\u002F plain attributes; a flag maps to an empty Text\n    Flags    map[string]bool   \u002F\u002F bare keys with no value\n    Bindings map[string]string \u002F\u002F :key=\"path\"\n    Pos      Pos               \u002F\u002F position of the opening \"{\"\n}\n\ntype Text []Part\nfunc (t Text) String() string\n\ntype Part struct {\n    Lit     string \u002F\u002F set when Tag == nil\n    Tag     *Tag\n    Suspect bool   \u002F\u002F Lit came from a malformed \"{{\" tag attempt\n}\n\ntype Tag struct {\n    Path        string \u002F\u002F dotted, e.g. \"driver.first_name\"\n    Fallback    string\n    HasFallback bool\n    Pos         Pos\n}\nfunc (t Tag) String() string \u002F\u002F {{path}} or {{path | fallback}}\n",[201,3923,3924,3935,3942,3951,3967,3983,3999,4009,4013,4017,4029,4047,4051,4062,4072,4082,4092,4096,4100,4111,4121,4128,4136,4143,4147],{"__ignoreMap":248},[252,3925,3926,3928,3931,3933],{"class":254,"line":255},[252,3927,419],{"class":262},[252,3929,3930],{"class":266}," Attrs",[252,3932,707],{"class":262},[252,3934,710],{"class":262},[252,3936,3937,3940],{"class":254,"line":360},[252,3938,3939],{"class":715},"    ID       ",[252,3941,719],{"class":323},[252,3943,3944,3947,3949],{"class":254,"line":409},[252,3945,3946],{"class":715},"    Classes  ",[252,3948,745],{"class":262},[252,3950,719],{"class":323},[252,3952,3953,3956,3958,3960,3962,3964],{"class":254,"line":416},[252,3954,3955],{"class":715},"    Values   ",[252,3957,1001],{"class":262},[252,3959,761],{"class":323},[252,3961,431],{"class":262},[252,3963,3482],{"class":266},[252,3965,3966],{"class":437},"   \u002F\u002F plain attributes; a flag maps to an empty Text\n",[252,3968,3969,3972,3974,3976,3978,3980],{"class":254,"line":444},[252,3970,3971],{"class":715},"    Flags    ",[252,3973,1001],{"class":262},[252,3975,761],{"class":323},[252,3977,431],{"class":262},[252,3979,840],{"class":323},[252,3981,3982],{"class":437},"   \u002F\u002F bare keys with no value\n",[252,3984,3985,3988,3990,3992,3994,3996],{"class":254,"line":449},[252,3986,3987],{"class":715},"    Bindings ",[252,3989,1001],{"class":262},[252,3991,761],{"class":323},[252,3993,431],{"class":262},[252,3995,761],{"class":323},[252,3997,3998],{"class":437}," \u002F\u002F :key=\"path\"\n",[252,4000,4001,4004,4006],{"class":254,"line":515},[252,4002,4003],{"class":715},"    Pos      ",[252,4005,3695],{"class":266},[252,4007,4008],{"class":437},"               \u002F\u002F position of the opening \"{\"\n",[252,4010,4011],{"class":254,"line":543},[252,4012,781],{"class":262},[252,4014,4015],{"class":254,"line":784},[252,4016,413],{"emptyLinePlaceholder":412},[252,4018,4019,4021,4024,4026],{"class":254,"line":789},[252,4020,419],{"class":262},[252,4022,4023],{"class":266}," Text",[252,4025,332],{"class":262},[252,4027,4028],{"class":266},"Part\n",[252,4030,4031,4033,4035,4037,4039,4041,4043,4045],{"class":254,"line":801},[252,4032,288],{"class":262},[252,4034,454],{"class":262},[252,4036,457],{"class":298},[252,4038,3482],{"class":266},[252,4040,338],{"class":262},[252,4042,3804],{"class":291},[252,4044,537],{"class":262},[252,4046,567],{"class":323},[252,4048,4049],{"class":254,"line":812},[252,4050,413],{"emptyLinePlaceholder":412},[252,4052,4053,4055,4058,4060],{"class":254,"line":823},[252,4054,419],{"class":262},[252,4056,4057],{"class":266}," Part",[252,4059,707],{"class":262},[252,4061,710],{"class":262},[252,4063,4064,4067,4069],{"class":254,"line":834},[252,4065,4066],{"class":715},"    Lit     ",[252,4068,761],{"class":323},[252,4070,4071],{"class":437}," \u002F\u002F set when Tag == nil\n",[252,4073,4074,4077,4079],{"class":254,"line":846},[252,4075,4076],{"class":715},"    Tag     ",[252,4078,460],{"class":262},[252,4080,4081],{"class":266},"Tag\n",[252,4083,4084,4087,4089],{"class":254,"line":1028},[252,4085,4086],{"class":715},"    Suspect ",[252,4088,840],{"class":323},[252,4090,4091],{"class":437},"   \u002F\u002F Lit came from a malformed \"{{\" tag attempt\n",[252,4093,4094],{"class":254,"line":1039},[252,4095,781],{"class":262},[252,4097,4098],{"class":254,"line":1044},[252,4099,413],{"emptyLinePlaceholder":412},[252,4101,4102,4104,4107,4109],{"class":254,"line":1049},[252,4103,419],{"class":262},[252,4105,4106],{"class":266}," Tag",[252,4108,707],{"class":262},[252,4110,710],{"class":262},[252,4112,4113,4116,4118],{"class":254,"line":1061},[252,4114,4115],{"class":715},"    Path        ",[252,4117,761],{"class":323},[252,4119,4120],{"class":437}," \u002F\u002F dotted, e.g. \"driver.first_name\"\n",[252,4122,4123,4126],{"class":254,"line":1069},[252,4124,4125],{"class":715},"    Fallback    ",[252,4127,719],{"class":323},[252,4129,4130,4133],{"class":254,"line":1840},[252,4131,4132],{"class":715},"    HasFallback ",[252,4134,4135],{"class":323},"bool\n",[252,4137,4138,4141],{"class":254,"line":1851},[252,4139,4140],{"class":715},"    Pos         ",[252,4142,3834],{"class":266},[252,4144,4145],{"class":254,"line":1862},[252,4146,781],{"class":262},[252,4148,4149,4151,4153,4155,4158,4160,4162,4164,4166],{"class":254,"line":1873},[252,4150,288],{"class":262},[252,4152,454],{"class":262},[252,4154,457],{"class":298},[252,4156,4157],{"class":266},"Tag",[252,4159,338],{"class":262},[252,4161,3804],{"class":291},[252,4163,537],{"class":262},[252,4165,324],{"class":323},[252,4167,4168],{"class":437}," \u002F\u002F {{path}} or {{path | fallback}}\n",[197,4170,4171,4173,4174,4177,4178,4180,4181,4184,4185,4187,4188,4191],{},[201,4172,3445],{}," is a parsed ",[201,4175,4176],{},"{#id .class key=value flag :binding=path}"," list. ",[201,4179,3482],{}," is literal text with embedded merge tags, and ",[201,4182,4183],{},"Part"," is one piece of it. ",[201,4186,4157],{}," is one merge tag. Its ",[201,4189,4190],{},"String"," quotes the fallback when it wouldn't survive a bare round trip.",[197,4193,4194,4195,4198,4199,226,4202,4205],{},"The AST nodes all implement goldmark's ",[201,4196,4197],{},"ast.Node",", through ",[201,4200,4201],{},"Kind()",[201,4203,4204],{},"Dump(src []byte, level int)",":",[569,4207,4208,4220],{},[572,4209,4210],{},[575,4211,4212,4214,4217],{},[578,4213,3508],{},[578,4215,4216],{},"Syntax",[578,4218,4219],{},"Fields",[585,4221,4222,4256,4275,4296,4314],{},[575,4223,4224,4229,4238],{},[590,4225,4226],{},[201,4227,4228],{},"Component",[590,4230,4231,4234,4235],{},[201,4232,4233],{},"::name{attrs}"," … ",[201,4236,4237],{},"::",[590,4239,4240,4243,4244,4243,4246,4249,4250,4243,4253],{},[201,4241,4242],{},"Name",", ",[201,4245,3445],{},[201,4247,4248],{},"Props map[string]any"," (nil without a props block), ",[201,4251,4252],{},"PropsPos",[201,4254,4255],{},"At",[575,4257,4258,4263,4269],{},[590,4259,4260],{},[201,4261,4262],{},"Slot",[590,4264,4265,4268],{},[201,4266,4267],{},"#name"," inside a component",[590,4270,4271,4243,4273],{},[201,4272,4242],{},[201,4274,4255],{},[575,4276,4277,4282,4287],{},[590,4278,4279],{},[201,4280,4281],{},"InlineComponent",[590,4283,4284],{},[201,4285,4286],{},":name[label]{attrs}",[590,4288,4289,4243,4291,4243,4293,4295],{},[201,4290,4242],{},[201,4292,3445],{},[201,4294,4255],{}," (the label is its children)",[575,4297,4298,4303,4308],{},[590,4299,4300],{},[201,4301,4302],{},"Span",[590,4304,4305],{},[201,4306,4307],{},"[text]{attrs}",[590,4309,4310,4243,4312],{},[201,4311,3445],{},[201,4313,4255],{},[575,4315,4316,4321,4329],{},[590,4317,4318],{},[201,4319,4320],{},"MergeTag",[590,4322,4323,4243,4325,4328],{},[201,4324,3650],{},[201,4326,4327],{},"{{path | fallback}}"," in prose",[590,4330,4331],{},[201,4332,4157],{},[243,4334,4336],{"className":245,"code":4335,"language":247,"meta":248,"style":248},"var (\n    KindComponent       = ast.NewNodeKind(\"Component\")\n    KindSlot            = ast.NewNodeKind(\"Slot\")\n    KindInlineComponent = ast.NewNodeKind(\"InlineComponent\")\n    KindSpan            = ast.NewNodeKind(\"Span\")\n    KindMergeTag        = ast.NewNodeKind(\"MergeTag\")\n)\n",[201,4337,4338,4344,4368,4391,4414,4437,4460],{"__ignoreMap":248},[252,4339,4340,4342],{"class":254,"line":255},[252,4341,3186],{"class":262},[252,4343,2132],{"class":262},[252,4345,4346,4349,4351,4353,4355,4358,4360,4362,4364,4366],{"class":254,"line":360},[252,4347,4348],{"class":715},"    KindComponent       ",[252,4350,2140],{"class":262},[252,4352,3503],{"class":715},[252,4354,625],{"class":262},[252,4356,4357],{"class":291},"NewNodeKind",[252,4359,475],{"class":262},[252,4361,2320],{"class":262},[252,4363,4228],{"class":1166},[252,4365,2320],{"class":262},[252,4367,357],{"class":262},[252,4369,4370,4373,4375,4377,4379,4381,4383,4385,4387,4389],{"class":254,"line":409},[252,4371,4372],{"class":715},"    KindSlot            ",[252,4374,2140],{"class":262},[252,4376,3503],{"class":715},[252,4378,625],{"class":262},[252,4380,4357],{"class":291},[252,4382,475],{"class":262},[252,4384,2320],{"class":262},[252,4386,4262],{"class":1166},[252,4388,2320],{"class":262},[252,4390,357],{"class":262},[252,4392,4393,4396,4398,4400,4402,4404,4406,4408,4410,4412],{"class":254,"line":416},[252,4394,4395],{"class":715},"    KindInlineComponent ",[252,4397,2140],{"class":262},[252,4399,3503],{"class":715},[252,4401,625],{"class":262},[252,4403,4357],{"class":291},[252,4405,475],{"class":262},[252,4407,2320],{"class":262},[252,4409,4281],{"class":1166},[252,4411,2320],{"class":262},[252,4413,357],{"class":262},[252,4415,4416,4419,4421,4423,4425,4427,4429,4431,4433,4435],{"class":254,"line":444},[252,4417,4418],{"class":715},"    KindSpan            ",[252,4420,2140],{"class":262},[252,4422,3503],{"class":715},[252,4424,625],{"class":262},[252,4426,4357],{"class":291},[252,4428,475],{"class":262},[252,4430,2320],{"class":262},[252,4432,4302],{"class":1166},[252,4434,2320],{"class":262},[252,4436,357],{"class":262},[252,4438,4439,4442,4444,4446,4448,4450,4452,4454,4456,4458],{"class":254,"line":449},[252,4440,4441],{"class":715},"    KindMergeTag        ",[252,4443,2140],{"class":262},[252,4445,3503],{"class":715},[252,4447,625],{"class":262},[252,4449,4357],{"class":291},[252,4451,475],{"class":262},[252,4453,2320],{"class":262},[252,4455,4320],{"class":1166},[252,4457,2320],{"class":262},[252,4459,357],{"class":262},[252,4461,4462],{"class":254,"line":515},[252,4463,357],{"class":262},[197,4465,4466,4467,625],{},"The node kinds those nodes return from ",[201,4468,4201],{},[238,4470,4472],{"id":4471},"import-lttrdata","Import lttr\u002Fdata",[243,4474,4476],{"className":245,"code":4475,"language":247,"meta":248,"style":248},"import \"github.com\u002Fsulv-io\u002Flttr\u002Fdata\"\n",[201,4477,4478],{"__ignoreMap":248},[252,4479,4480,4482,4484,4487],{"class":254,"line":255},[252,4481,259],{"class":258},[252,4483,263],{"class":262},[252,4485,4486],{"class":266},"github.com\u002Fsulv-io\u002Flttr\u002Fdata",[252,4488,270],{"class":262},[197,4490,4491,4492,625],{},"Money, the structured types templates bind to, the recipient, and the path resolver the compiler uses to check merge tags. See ",[862,4493,53],{"href":54},[275,4495,4497],{"id":4496},"money","Money",[243,4499,4501],{"className":245,"code":4500,"language":247,"meta":248,"style":248},"type Money struct {\n    Minor    int64    \u002F\u002F minor units, e.g. cents\n    Currency Currency\n}\n\nfunc XCD(minor int64) Money\nfunc USD(minor int64) Money\nfunc (m Money) String() string \u002F\u002F \"EC$1,019.90\", \"US$378\", \"−US$65\"\nfunc (m Money) Approx() string \u002F\u002F \"≈ US$378\"\n\ntype Exact Money\nfunc (e Exact) String() string \u002F\u002F always two decimals: \"EC$1,085.00\"\n\ntype Currency string\n\nconst (\n    XCDCode Currency = \"XCD\" \u002F\u002F EC$\n    USDCode Currency = \"USD\" \u002F\u002F US$\n    EURCode Currency = \"EUR\" \u002F\u002F €\n    GBPCode Currency = \"GBP\" \u002F\u002F £\n)\n",[201,4502,4503,4514,4525,4533,4537,4541,4561,4578,4599,4621,4625,4634,4656,4660,4669,4673,4679,4699,4718,4737,4756],{"__ignoreMap":248},[252,4504,4505,4507,4510,4512],{"class":254,"line":255},[252,4506,419],{"class":262},[252,4508,4509],{"class":266}," Money",[252,4511,707],{"class":262},[252,4513,710],{"class":262},[252,4515,4516,4519,4522],{"class":254,"line":360},[252,4517,4518],{"class":715},"    Minor    ",[252,4520,4521],{"class":323},"int64",[252,4523,4524],{"class":437},"    \u002F\u002F minor units, e.g. cents\n",[252,4526,4527,4530],{"class":254,"line":409},[252,4528,4529],{"class":715},"    Currency ",[252,4531,4532],{"class":266},"Currency\n",[252,4534,4535],{"class":254,"line":416},[252,4536,781],{"class":262},[252,4538,4539],{"class":254,"line":444},[252,4540,413],{"emptyLinePlaceholder":412},[252,4542,4543,4545,4548,4550,4553,4556,4558],{"class":254,"line":449},[252,4544,288],{"class":262},[252,4546,4547],{"class":291}," XCD",[252,4549,475],{"class":262},[252,4551,4552],{"class":298},"minor",[252,4554,4555],{"class":323}," int64",[252,4557,338],{"class":262},[252,4559,4560],{"class":266}," Money\n",[252,4562,4563,4565,4568,4570,4572,4574,4576],{"class":254,"line":515},[252,4564,288],{"class":262},[252,4566,4567],{"class":291}," USD",[252,4569,475],{"class":262},[252,4571,4552],{"class":298},[252,4573,4555],{"class":323},[252,4575,338],{"class":262},[252,4577,4560],{"class":266},[252,4579,4580,4582,4584,4586,4588,4590,4592,4594,4596],{"class":254,"line":543},[252,4581,288],{"class":262},[252,4583,454],{"class":262},[252,4585,2581],{"class":298},[252,4587,4497],{"class":266},[252,4589,338],{"class":262},[252,4591,3804],{"class":291},[252,4593,537],{"class":262},[252,4595,324],{"class":323},[252,4597,4598],{"class":437}," \u002F\u002F \"EC$1,019.90\", \"US$378\", \"−US$65\"\n",[252,4600,4601,4603,4605,4607,4609,4611,4614,4616,4618],{"class":254,"line":784},[252,4602,288],{"class":262},[252,4604,454],{"class":262},[252,4606,2581],{"class":298},[252,4608,4497],{"class":266},[252,4610,338],{"class":262},[252,4612,4613],{"class":291}," Approx",[252,4615,537],{"class":262},[252,4617,324],{"class":323},[252,4619,4620],{"class":437}," \u002F\u002F \"≈ US$378\"\n",[252,4622,4623],{"class":254,"line":789},[252,4624,413],{"emptyLinePlaceholder":412},[252,4626,4627,4629,4632],{"class":254,"line":801},[252,4628,419],{"class":262},[252,4630,4631],{"class":266}," Exact",[252,4633,4560],{"class":266},[252,4635,4636,4638,4640,4642,4645,4647,4649,4651,4653],{"class":254,"line":812},[252,4637,288],{"class":262},[252,4639,454],{"class":262},[252,4641,3854],{"class":298},[252,4643,4644],{"class":266},"Exact",[252,4646,338],{"class":262},[252,4648,3804],{"class":291},[252,4650,537],{"class":262},[252,4652,324],{"class":323},[252,4654,4655],{"class":437}," \u002F\u002F always two decimals: \"EC$1,085.00\"\n",[252,4657,4658],{"class":254,"line":823},[252,4659,413],{"emptyLinePlaceholder":412},[252,4661,4662,4664,4667],{"class":254,"line":834},[252,4663,419],{"class":262},[252,4665,4666],{"class":266}," Currency",[252,4668,567],{"class":323},[252,4670,4671],{"class":254,"line":846},[252,4672,413],{"emptyLinePlaceholder":412},[252,4674,4675,4677],{"class":254,"line":1028},[252,4676,2129],{"class":262},[252,4678,2132],{"class":262},[252,4680,4681,4684,4687,4689,4691,4694,4696],{"class":254,"line":1039},[252,4682,4683],{"class":715},"    XCDCode ",[252,4685,4686],{"class":266},"Currency",[252,4688,1342],{"class":262},[252,4690,263],{"class":262},[252,4692,4693],{"class":1166},"XCD",[252,4695,2320],{"class":262},[252,4697,4698],{"class":437}," \u002F\u002F EC$\n",[252,4700,4701,4704,4706,4708,4710,4713,4715],{"class":254,"line":1044},[252,4702,4703],{"class":715},"    USDCode ",[252,4705,4686],{"class":266},[252,4707,1342],{"class":262},[252,4709,263],{"class":262},[252,4711,4712],{"class":1166},"USD",[252,4714,2320],{"class":262},[252,4716,4717],{"class":437}," \u002F\u002F US$\n",[252,4719,4720,4723,4725,4727,4729,4732,4734],{"class":254,"line":1049},[252,4721,4722],{"class":715},"    EURCode ",[252,4724,4686],{"class":266},[252,4726,1342],{"class":262},[252,4728,263],{"class":262},[252,4730,4731],{"class":1166},"EUR",[252,4733,2320],{"class":262},[252,4735,4736],{"class":437}," \u002F\u002F €\n",[252,4738,4739,4742,4744,4746,4748,4751,4753],{"class":254,"line":1061},[252,4740,4741],{"class":715},"    GBPCode ",[252,4743,4686],{"class":266},[252,4745,1342],{"class":262},[252,4747,263],{"class":262},[252,4749,4750],{"class":1166},"GBP",[252,4752,2320],{"class":262},[252,4754,4755],{"class":437}," \u002F\u002F £\n",[252,4757,4758],{"class":254,"line":1069},[252,4759,357],{"class":262},[569,4761,4762,4770],{},[572,4763,4764],{},[575,4765,4766,4768],{},[578,4767,580],{},[578,4769,583],{},[585,4771,4772,4781,4795,4805,4818,4829],{},[575,4773,4774,4778],{},[590,4775,4776],{},[201,4777,4497],{},[590,4779,4780],{},"An amount in a currency's minor units.",[575,4782,4783,4789],{},[590,4784,4785,4243,4787],{},[201,4786,4693],{},[201,4788,4712],{},[590,4790,4791,4792,4794],{},"Build a ",[201,4793,4497],{}," in Eastern Caribbean or US dollars.",[575,4796,4797,4802],{},[590,4798,4799],{},[201,4800,4801],{},"Money.String",[590,4803,4804],{},"A currency prefix, comma thousands separators, decimals dropped for whole amounts, and a U+2212 minus before the prefix.",[575,4806,4807,4812],{},[590,4808,4809],{},[201,4810,4811],{},"Money.Approx",[590,4813,4814,4815,625],{},"Rounded half away from zero to whole units, prefixed ",[201,4816,4817],{},"≈ ",[575,4819,4820,4824],{},[590,4821,4822],{},[201,4823,4644],{},[590,4825,3270,4826,4828],{},[201,4827,4497],{}," that always shows two decimals, for breakdown copy that must match exactly.",[575,4830,4831,4835],{},[590,4832,4833],{},[201,4834,4686],{},[590,4836,4837],{},"An ISO 4217-style code. The four constants have a known prefix and formatting.",[275,4839,4841],{"id":4840},"structured-types","Structured types",[243,4843,4845],{"className":245,"code":4844,"language":247,"meta":248,"style":248},"type Receipt struct {\n    Lines      []ReceiptLine\n    Fees       []Fee\n    Total      Money\n    TotalUSD   *Money \u002F\u002F optional; shown as ≈ US$\n    TotalLabel string \u002F\u002F default \"Total\"\n}\n\ntype ReceiptLine struct {\n    Name, Detail string\n    Qty          int\n    Amount       Money\n    Thumb        string\n    Tone         Tone\n}\n\ntype Fee struct {\n    Label  string\n    Amount Money\n}\n\ntype Product struct {\n    Name        string\n    Price       Money\n    Href, Image string\n    Tone        Tone\n}\n\ntype StockItem struct {\n    Name, SKU string\n    Left      int\n}\n\ntype Tone string\n\nconst (\n    ToneNone Tone = \"\"\n    ToneWarm Tone = \"warm\"\n    ToneSea  Tone = \"sea\"\n    ToneSun  Tone = \"sun\"\n    ToneMap  Tone = \"map\"\n)\n\nfunc (t Tone) Valid() bool\n",[201,4846,4847,4858,4868,4878,4886,4898,4908,4912,4916,4927,4939,4947,4954,4961,4969,4973,4977,4988,4995,5002,5006,5010,5021,5028,5035,5047,5054,5058,5062,5073,5084,5091,5095,5099,5108,5112,5118,5131,5148,5165,5182,5199,5204,5209],{"__ignoreMap":248},[252,4848,4849,4851,4854,4856],{"class":254,"line":255},[252,4850,419],{"class":262},[252,4852,4853],{"class":266}," Receipt",[252,4855,707],{"class":262},[252,4857,710],{"class":262},[252,4859,4860,4863,4865],{"class":254,"line":360},[252,4861,4862],{"class":715},"    Lines      ",[252,4864,745],{"class":262},[252,4866,4867],{"class":266},"ReceiptLine\n",[252,4869,4870,4873,4875],{"class":254,"line":409},[252,4871,4872],{"class":715},"    Fees       ",[252,4874,745],{"class":262},[252,4876,4877],{"class":266},"Fee\n",[252,4879,4880,4883],{"class":254,"line":416},[252,4881,4882],{"class":715},"    Total      ",[252,4884,4885],{"class":266},"Money\n",[252,4887,4888,4891,4893,4895],{"class":254,"line":444},[252,4889,4890],{"class":715},"    TotalUSD   ",[252,4892,460],{"class":262},[252,4894,4497],{"class":266},[252,4896,4897],{"class":437}," \u002F\u002F optional; shown as ≈ US$\n",[252,4899,4900,4903,4905],{"class":254,"line":449},[252,4901,4902],{"class":715},"    TotalLabel ",[252,4904,761],{"class":323},[252,4906,4907],{"class":437}," \u002F\u002F default \"Total\"\n",[252,4909,4910],{"class":254,"line":515},[252,4911,781],{"class":262},[252,4913,4914],{"class":254,"line":543},[252,4915,413],{"emptyLinePlaceholder":412},[252,4917,4918,4920,4923,4925],{"class":254,"line":784},[252,4919,419],{"class":262},[252,4921,4922],{"class":266}," ReceiptLine",[252,4924,707],{"class":262},[252,4926,710],{"class":262},[252,4928,4929,4932,4934,4937],{"class":254,"line":789},[252,4930,4931],{"class":715},"    Name",[252,4933,317],{"class":262},[252,4935,4936],{"class":715}," Detail ",[252,4938,719],{"class":323},[252,4940,4941,4944],{"class":254,"line":801},[252,4942,4943],{"class":715},"    Qty          ",[252,4945,4946],{"class":323},"int\n",[252,4948,4949,4952],{"class":254,"line":812},[252,4950,4951],{"class":715},"    Amount       ",[252,4953,4885],{"class":266},[252,4955,4956,4959],{"class":254,"line":823},[252,4957,4958],{"class":715},"    Thumb        ",[252,4960,719],{"class":323},[252,4962,4963,4966],{"class":254,"line":834},[252,4964,4965],{"class":715},"    Tone         ",[252,4967,4968],{"class":266},"Tone\n",[252,4970,4971],{"class":254,"line":846},[252,4972,781],{"class":262},[252,4974,4975],{"class":254,"line":1028},[252,4976,413],{"emptyLinePlaceholder":412},[252,4978,4979,4981,4984,4986],{"class":254,"line":1039},[252,4980,419],{"class":262},[252,4982,4983],{"class":266}," Fee",[252,4985,707],{"class":262},[252,4987,710],{"class":262},[252,4989,4990,4993],{"class":254,"line":1044},[252,4991,4992],{"class":715},"    Label  ",[252,4994,719],{"class":323},[252,4996,4997,5000],{"class":254,"line":1049},[252,4998,4999],{"class":715},"    Amount ",[252,5001,4885],{"class":266},[252,5003,5004],{"class":254,"line":1061},[252,5005,781],{"class":262},[252,5007,5008],{"class":254,"line":1069},[252,5009,413],{"emptyLinePlaceholder":412},[252,5011,5012,5014,5017,5019],{"class":254,"line":1840},[252,5013,419],{"class":262},[252,5015,5016],{"class":266}," Product",[252,5018,707],{"class":262},[252,5020,710],{"class":262},[252,5022,5023,5026],{"class":254,"line":1851},[252,5024,5025],{"class":715},"    Name        ",[252,5027,719],{"class":323},[252,5029,5030,5033],{"class":254,"line":1862},[252,5031,5032],{"class":715},"    Price       ",[252,5034,4885],{"class":266},[252,5036,5037,5040,5042,5045],{"class":254,"line":1873},[252,5038,5039],{"class":715},"    Href",[252,5041,317],{"class":262},[252,5043,5044],{"class":715}," Image ",[252,5046,719],{"class":323},[252,5048,5049,5052],{"class":254,"line":1884},[252,5050,5051],{"class":715},"    Tone        ",[252,5053,4968],{"class":266},[252,5055,5056],{"class":254,"line":1895},[252,5057,781],{"class":262},[252,5059,5060],{"class":254,"line":1909},[252,5061,413],{"emptyLinePlaceholder":412},[252,5063,5064,5066,5069,5071],{"class":254,"line":1914},[252,5065,419],{"class":262},[252,5067,5068],{"class":266}," StockItem",[252,5070,707],{"class":262},[252,5072,710],{"class":262},[252,5074,5075,5077,5079,5082],{"class":254,"line":1919},[252,5076,4931],{"class":715},[252,5078,317],{"class":262},[252,5080,5081],{"class":715}," SKU ",[252,5083,719],{"class":323},[252,5085,5086,5089],{"class":254,"line":1931},[252,5087,5088],{"class":715},"    Left      ",[252,5090,4946],{"class":323},[252,5092,5093],{"class":254,"line":1940},[252,5094,781],{"class":262},[252,5096,5097],{"class":254,"line":1949},[252,5098,413],{"emptyLinePlaceholder":412},[252,5100,5101,5103,5106],{"class":254,"line":1958},[252,5102,419],{"class":262},[252,5104,5105],{"class":266}," Tone",[252,5107,567],{"class":323},[252,5109,5110],{"class":254,"line":1963},[252,5111,413],{"emptyLinePlaceholder":412},[252,5113,5114,5116],{"class":254,"line":1968},[252,5115,2129],{"class":262},[252,5117,2132],{"class":262},[252,5119,5120,5123,5126,5128],{"class":254,"line":1990},[252,5121,5122],{"class":715},"    ToneNone ",[252,5124,5125],{"class":266},"Tone",[252,5127,1342],{"class":262},[252,5129,5130],{"class":262}," \"\"\n",[252,5132,5134,5137,5139,5141,5143,5146],{"class":254,"line":5133},38,[252,5135,5136],{"class":715},"    ToneWarm ",[252,5138,5125],{"class":266},[252,5140,1342],{"class":262},[252,5142,263],{"class":262},[252,5144,5145],{"class":1166},"warm",[252,5147,270],{"class":262},[252,5149,5151,5154,5156,5158,5160,5163],{"class":254,"line":5150},39,[252,5152,5153],{"class":715},"    ToneSea  ",[252,5155,5125],{"class":266},[252,5157,1342],{"class":262},[252,5159,263],{"class":262},[252,5161,5162],{"class":1166},"sea",[252,5164,270],{"class":262},[252,5166,5168,5171,5173,5175,5177,5180],{"class":254,"line":5167},40,[252,5169,5170],{"class":715},"    ToneSun  ",[252,5172,5125],{"class":266},[252,5174,1342],{"class":262},[252,5176,263],{"class":262},[252,5178,5179],{"class":1166},"sun",[252,5181,270],{"class":262},[252,5183,5185,5188,5190,5192,5194,5197],{"class":254,"line":5184},41,[252,5186,5187],{"class":715},"    ToneMap  ",[252,5189,5125],{"class":266},[252,5191,1342],{"class":262},[252,5193,263],{"class":262},[252,5195,5196],{"class":1166},"map",[252,5198,270],{"class":262},[252,5200,5202],{"class":254,"line":5201},42,[252,5203,357],{"class":262},[252,5205,5207],{"class":254,"line":5206},43,[252,5208,413],{"emptyLinePlaceholder":412},[252,5210,5212,5214,5216,5218,5220,5222,5224,5226],{"class":254,"line":5211},44,[252,5213,288],{"class":262},[252,5215,454],{"class":262},[252,5217,457],{"class":298},[252,5219,5125],{"class":266},[252,5221,338],{"class":262},[252,5223,2423],{"class":291},[252,5225,537],{"class":262},[252,5227,2428],{"class":323},[569,5229,5230,5239],{},[572,5231,5232],{},[575,5233,5234,5236],{},[578,5235,3879],{},[578,5237,5238],{},"Binds to",[585,5240,5241,5254,5264,5274,5292,5308],{},[575,5242,5243,5248],{},[590,5244,5245],{},[201,5246,5247],{},"Receipt",[590,5249,5250,5253],{},[201,5251,5252],{},"::receipt{:order=\"…\"}",": line items, fees and a total.",[575,5255,5256,5261],{},[590,5257,5258],{},[201,5259,5260],{},"ReceiptLine",[590,5262,5263],{},"One line of a receipt.",[575,5265,5266,5271],{},[590,5267,5268],{},[201,5269,5270],{},"Fee",[590,5272,5273],{},"A labelled charge on a receipt, such as delivery.",[575,5275,5276,5281],{},[590,5277,5278],{},[201,5279,5280],{},"Product",[590,5282,5283,5284,5287,5288,5291],{},"One tile of ",[201,5285,5286],{},"::products{:items=\"…\"}"," (a ",[201,5289,5290],{},"[]Product",").",[575,5293,5294,5299],{},[590,5295,5296],{},[201,5297,5298],{},"StockItem",[590,5300,5301,5302,5287,5305,5291],{},"One row of ",[201,5303,5304],{},"::stock{:items=\"…\"}",[201,5306,5307],{},"[]StockItem",[575,5309,5310,5314],{},[590,5311,5312],{},[201,5313,5125],{},[590,5315,5316,5317,5319],{},"The placeholder ground a tile or band shows with no image. ",[201,5318,2441],{}," reports whether it is a known value.",[275,5321,616],{"id":5322},"recipient",[243,5324,5326],{"className":245,"code":5325,"language":247,"meta":248,"style":248},"type Recipient struct {\n    Address        string \u002F\u002F RFC 5322 address\n    FirstName      string `json:\"first_name\"`\n    Region         string `json:\"region\"`\n    EntityAddress  string `json:\"entity_address\"`\n    PreferencesURL string `json:\"preferences_url\"`\n    UnsubscribeURL string `json:\"unsubscribe_url\"`\n}\n",[201,5327,5328,5338,5348,5363,5376,5390,5404,5418],{"__ignoreMap":248},[252,5329,5330,5332,5334,5336],{"class":254,"line":255},[252,5331,419],{"class":262},[252,5333,491],{"class":266},[252,5335,707],{"class":262},[252,5337,710],{"class":262},[252,5339,5340,5343,5345],{"class":254,"line":360},[252,5341,5342],{"class":715},"    Address        ",[252,5344,761],{"class":323},[252,5346,5347],{"class":437}," \u002F\u002F RFC 5322 address\n",[252,5349,5350,5353,5355,5357,5360],{"class":254,"line":409},[252,5351,5352],{"class":715},"    FirstName      ",[252,5354,761],{"class":323},[252,5356,1163],{"class":262},[252,5358,5359],{"class":1166},"json:\"first_name\"",[252,5361,5362],{"class":262},"`\n",[252,5364,5365,5368,5370,5372,5374],{"class":254,"line":416},[252,5366,5367],{"class":715},"    Region         ",[252,5369,761],{"class":323},[252,5371,1163],{"class":262},[252,5373,1219],{"class":1166},[252,5375,5362],{"class":262},[252,5377,5378,5381,5383,5385,5388],{"class":254,"line":444},[252,5379,5380],{"class":715},"    EntityAddress  ",[252,5382,761],{"class":323},[252,5384,1163],{"class":262},[252,5386,5387],{"class":1166},"json:\"entity_address\"",[252,5389,5362],{"class":262},[252,5391,5392,5395,5397,5399,5402],{"class":254,"line":449},[252,5393,5394],{"class":715},"    PreferencesURL ",[252,5396,761],{"class":323},[252,5398,1163],{"class":262},[252,5400,5401],{"class":1166},"json:\"preferences_url\"",[252,5403,5362],{"class":262},[252,5405,5406,5409,5411,5413,5416],{"class":254,"line":515},[252,5407,5408],{"class":715},"    UnsubscribeURL ",[252,5410,761],{"class":323},[252,5412,1163],{"class":262},[252,5414,5415],{"class":1166},"json:\"unsubscribe_url\"",[252,5417,5362],{"class":262},[252,5419,5420],{"class":254,"line":543},[252,5421,781],{"class":262},[197,5423,5424,5425,5428,5429,625],{},"The person an email is addressed to. It is always searched second when a path is resolved, after the template's own data type, so ",[201,5426,5427],{},"{{first_name}}"," works in every template. The root package re-exports it as ",[201,5430,5431],{},"lttr.Recipient",[275,5433,5435],{"id":5434},"path-resolution","Path resolution",[243,5437,5439],{"className":245,"code":5438,"language":247,"meta":248,"style":248},"func NewScope(roots ...Root) Scope\nfunc (s Scope) Resolve(path string) (Accessor, error)\n\ntype Root struct {\n    Slot int\n    Type reflect.Type\n}\n\nfunc (a Accessor) Get(roots []reflect.Value) (reflect.Value, bool)\nfunc (a Accessor) Path() string\nfunc (a Accessor) Type() reflect.Type\n\nfunc IsScalar(t reflect.Type) bool\nfunc FormatScalar(v reflect.Value) string\n",[201,5440,5441,5463,5499,5503,5514,5521,5534,5538,5542,5587,5606,5630,5634,5656],{"__ignoreMap":248},[252,5442,5443,5445,5448,5450,5453,5455,5458,5460],{"class":254,"line":255},[252,5444,288],{"class":262},[252,5446,5447],{"class":291}," NewScope",[252,5449,475],{"class":262},[252,5451,5452],{"class":298},"roots",[252,5454,1408],{"class":262},[252,5456,5457],{"class":266},"Root",[252,5459,338],{"class":262},[252,5461,5462],{"class":266}," Scope\n",[252,5464,5465,5467,5469,5471,5474,5476,5479,5481,5484,5486,5488,5490,5493,5495,5497],{"class":254,"line":360},[252,5466,288],{"class":262},[252,5468,454],{"class":262},[252,5470,2416],{"class":298},[252,5472,5473],{"class":266},"Scope",[252,5475,338],{"class":262},[252,5477,5478],{"class":291}," Resolve",[252,5480,475],{"class":262},[252,5482,5483],{"class":298},"path",[252,5485,324],{"class":323},[252,5487,338],{"class":262},[252,5489,454],{"class":262},[252,5491,5492],{"class":266},"Accessor",[252,5494,317],{"class":262},[252,5496,354],{"class":323},[252,5498,357],{"class":262},[252,5500,5501],{"class":254,"line":409},[252,5502,413],{"emptyLinePlaceholder":412},[252,5504,5505,5507,5510,5512],{"class":254,"line":416},[252,5506,419],{"class":262},[252,5508,5509],{"class":266}," Root",[252,5511,707],{"class":262},[252,5513,710],{"class":262},[252,5515,5516,5519],{"class":254,"line":444},[252,5517,5518],{"class":715},"    Slot ",[252,5520,4946],{"class":323},[252,5522,5523,5526,5529,5531],{"class":254,"line":449},[252,5524,5525],{"class":715},"    Type ",[252,5527,5528],{"class":266},"reflect",[252,5530,625],{"class":262},[252,5532,5533],{"class":266},"Type\n",[252,5535,5536],{"class":254,"line":515},[252,5537,781],{"class":262},[252,5539,5540],{"class":254,"line":543},[252,5541,413],{"emptyLinePlaceholder":412},[252,5543,5544,5546,5548,5551,5553,5555,5558,5560,5562,5564,5566,5568,5571,5573,5575,5577,5579,5581,5583,5585],{"class":254,"line":784},[252,5545,288],{"class":262},[252,5547,454],{"class":262},[252,5549,5550],{"class":298},"a ",[252,5552,5492],{"class":266},[252,5554,338],{"class":262},[252,5556,5557],{"class":291}," Get",[252,5559,475],{"class":262},[252,5561,5452],{"class":298},[252,5563,332],{"class":262},[252,5565,5528],{"class":266},[252,5567,625],{"class":262},[252,5569,5570],{"class":266},"Value",[252,5572,338],{"class":262},[252,5574,454],{"class":262},[252,5576,5528],{"class":266},[252,5578,625],{"class":262},[252,5580,5570],{"class":266},[252,5582,317],{"class":262},[252,5584,1474],{"class":323},[252,5586,357],{"class":262},[252,5588,5589,5591,5593,5595,5597,5599,5602,5604],{"class":254,"line":789},[252,5590,288],{"class":262},[252,5592,454],{"class":262},[252,5594,5550],{"class":298},[252,5596,5492],{"class":266},[252,5598,338],{"class":262},[252,5600,5601],{"class":291}," Path",[252,5603,537],{"class":262},[252,5605,567],{"class":323},[252,5607,5608,5610,5612,5614,5616,5618,5621,5623,5626,5628],{"class":254,"line":801},[252,5609,288],{"class":262},[252,5611,454],{"class":262},[252,5613,5550],{"class":298},[252,5615,5492],{"class":266},[252,5617,338],{"class":262},[252,5619,5620],{"class":291}," Type",[252,5622,537],{"class":262},[252,5624,5625],{"class":266}," reflect",[252,5627,625],{"class":262},[252,5629,5533],{"class":266},[252,5631,5632],{"class":254,"line":812},[252,5633,413],{"emptyLinePlaceholder":412},[252,5635,5636,5638,5641,5643,5646,5648,5650,5652,5654],{"class":254,"line":823},[252,5637,288],{"class":262},[252,5639,5640],{"class":291}," IsScalar",[252,5642,475],{"class":262},[252,5644,5645],{"class":298},"t",[252,5647,5625],{"class":266},[252,5649,625],{"class":262},[252,5651,3879],{"class":266},[252,5653,338],{"class":262},[252,5655,2428],{"class":323},[252,5657,5658,5660,5663,5665,5667,5669,5671,5673,5675],{"class":254,"line":834},[252,5659,288],{"class":262},[252,5661,5662],{"class":291}," FormatScalar",[252,5664,475],{"class":262},[252,5666,664],{"class":298},[252,5668,5625],{"class":266},[252,5670,625],{"class":262},[252,5672,5570],{"class":266},[252,5674,338],{"class":262},[252,5676,567],{"class":323},[569,5678,5679,5687],{},[572,5680,5681],{},[575,5682,5683,5685],{},[578,5684,580],{},[578,5686,583],{},[585,5688,5689,5701,5716,5729,5738,5748,5761,5775],{},[575,5690,5691,5698],{},[590,5692,5693,4243,5695],{},[201,5694,5473],{},[201,5696,5697],{},"NewScope",[590,5699,5700],{},"An ordered, immutable set of roots. A path's first segment is looked up in each root in turn, and the first match wins.",[575,5702,5703,5707],{},[590,5704,5705],{},[201,5706,5457],{},[590,5708,5709,5710,5712,5713,625],{},"One root of a scope: the value at ",[201,5711,4262],{}," in the slice passed to ",[201,5714,5715],{},"Get",[575,5717,5718,5723],{},[590,5719,5720],{},[201,5721,5722],{},"Scope.Resolve",[590,5724,5725,5726,5728],{},"Compiles a dotted path into an ",[201,5727,5492],{}," once, at compile time. It follows JSON names, promoted fields, pointers and map keys.",[575,5730,5731,5735],{},[590,5732,5733],{},[201,5734,5492],{},[590,5736,5737],{},"A precompiled path, a plain value that is safe to copy.",[575,5739,5740,5745],{},[590,5741,5742],{},[201,5743,5744],{},"Accessor.Get",[590,5746,5747],{},"Walks the path against the roots. It returns false on a nil pointer or a missing map key, and never parses or allocates path strings.",[575,5749,5750,5758],{},[590,5751,5752,4243,5755],{},[201,5753,5754],{},"Accessor.Path",[201,5756,5757],{},"Accessor.Type",[590,5759,5760],{},"The dotted path, and the type it resolves to with pointers dereferenced.",[575,5762,5763,5768],{},[590,5764,5765],{},[201,5766,5767],{},"IsScalar",[590,5769,5770,5771,5774],{},"Whether a type may appear in a merge tag: a value-receiver ",[201,5772,5773],{},"fmt.Stringer",", a string kind or an integer kind.",[575,5776,5777,5782],{},[590,5778,5779],{},[201,5780,5781],{},"FormatScalar",[590,5783,5784,5785,5788],{},"A scalar's text: ",[201,5786,5787],{},"String()",", the string itself, or the decimal integer.",[238,5790,5792],{"id":5791},"import-lttrir","Import lttr\u002Fir",[243,5794,5796],{"className":245,"code":5795,"language":247,"meta":248,"style":248},"import \"github.com\u002Fsulv-io\u002Flttr\u002Fir\"\n",[201,5797,5798],{"__ignoreMap":248},[252,5799,5800,5802,5804,5807],{"class":254,"line":255},[252,5801,259],{"class":258},[252,5803,263],{"class":262},[252,5805,5806],{"class":266},"github.com\u002Fsulv-io\u002Flttr\u002Fir",[252,5808,270],{"class":262},[197,5810,5811,5812,5815,5816,5819,5820,5823,5824,226,5826,625],{},"The compiler: a parsed template becomes typed module IR, with every merge tag resolved against the data type at compile time, so rendering never parses paths. Most consumers only touch ",[201,5813,5814],{},"ir.Error"," (to read compile errors) and ",[201,5817,5818],{},"ir.Kind"," (for ",[201,5821,5822],{},"Family.Forbidden","). See ",[862,5825,63],{"href":64},[862,5827,48],{"href":49},[275,5829,594],{"id":5830},"compile",[243,5832,5834],{"className":245,"code":5833,"language":247,"meta":248,"style":248},"func Compile(name string, src []byte, opts Options) (*Document, error)\nfunc CompileCopy(label, src string, vars reflect.Type) (Inline, error)\nfunc CompileCopyText(label, src string, vars reflect.Type) (Text, error)\n\ntype Options struct {\n    Data      reflect.Type \u002F\u002F the template's T\n    Recipient reflect.Type \u002F\u002F reflect.TypeOf(data.Recipient{})\n    Vars      reflect.Type \u002F\u002F lttr.Vars: {name} placeholders in footer.* frontmatter\n}\n\ntype Document struct {\n    Name     string\n    Front    Frontmatter\n    Modules  []Module\n    Warnings []Diagnostic\n    Tags     []TagUse\n}\n",[201,5835,5836,5876,5918,5957,5961,5971,5985,5999,6013,6017,6021,6031,6037,6045,6054,6063,6072],{"__ignoreMap":248},[252,5837,5838,5840,5842,5844,5846,5848,5850,5852,5854,5856,5858,5861,5864,5866,5868,5870,5872,5874],{"class":254,"line":255},[252,5839,288],{"class":262},[252,5841,292],{"class":291},[252,5843,475],{"class":262},[252,5845,604],{"class":298},[252,5847,324],{"class":323},[252,5849,317],{"class":262},[252,5851,329],{"class":298},[252,5853,332],{"class":262},[252,5855,335],{"class":323},[252,5857,317],{"class":262},[252,5859,5860],{"class":298}," opts",[252,5862,5863],{"class":266}," Options",[252,5865,338],{"class":262},[252,5867,341],{"class":262},[252,5869,3411],{"class":266},[252,5871,317],{"class":262},[252,5873,354],{"class":323},[252,5875,357],{"class":262},[252,5877,5878,5880,5883,5885,5888,5890,5892,5894,5896,5899,5901,5903,5905,5907,5909,5912,5914,5916],{"class":254,"line":360},[252,5879,288],{"class":262},[252,5881,5882],{"class":291}," CompileCopy",[252,5884,475],{"class":262},[252,5886,5887],{"class":298},"label",[252,5889,317],{"class":262},[252,5891,329],{"class":298},[252,5893,324],{"class":323},[252,5895,317],{"class":262},[252,5897,5898],{"class":298}," vars",[252,5900,5625],{"class":266},[252,5902,625],{"class":262},[252,5904,3879],{"class":266},[252,5906,338],{"class":262},[252,5908,454],{"class":262},[252,5910,5911],{"class":266},"Inline",[252,5913,317],{"class":262},[252,5915,354],{"class":323},[252,5917,357],{"class":262},[252,5919,5920,5922,5925,5927,5929,5931,5933,5935,5937,5939,5941,5943,5945,5947,5949,5951,5953,5955],{"class":254,"line":409},[252,5921,288],{"class":262},[252,5923,5924],{"class":291}," CompileCopyText",[252,5926,475],{"class":262},[252,5928,5887],{"class":298},[252,5930,317],{"class":262},[252,5932,329],{"class":298},[252,5934,324],{"class":323},[252,5936,317],{"class":262},[252,5938,5898],{"class":298},[252,5940,5625],{"class":266},[252,5942,625],{"class":262},[252,5944,3879],{"class":266},[252,5946,338],{"class":262},[252,5948,454],{"class":262},[252,5950,3482],{"class":266},[252,5952,317],{"class":262},[252,5954,354],{"class":323},[252,5956,357],{"class":262},[252,5958,5959],{"class":254,"line":416},[252,5960,413],{"emptyLinePlaceholder":412},[252,5962,5963,5965,5967,5969],{"class":254,"line":444},[252,5964,419],{"class":262},[252,5966,5863],{"class":266},[252,5968,707],{"class":262},[252,5970,710],{"class":262},[252,5972,5973,5976,5978,5980,5982],{"class":254,"line":449},[252,5974,5975],{"class":715},"    Data      ",[252,5977,5528],{"class":266},[252,5979,625],{"class":262},[252,5981,3879],{"class":266},[252,5983,5984],{"class":437}," \u002F\u002F the template's T\n",[252,5986,5987,5990,5992,5994,5996],{"class":254,"line":515},[252,5988,5989],{"class":715},"    Recipient ",[252,5991,5528],{"class":266},[252,5993,625],{"class":262},[252,5995,3879],{"class":266},[252,5997,5998],{"class":437}," \u002F\u002F reflect.TypeOf(data.Recipient{})\n",[252,6000,6001,6004,6006,6008,6010],{"class":254,"line":543},[252,6002,6003],{"class":715},"    Vars      ",[252,6005,5528],{"class":266},[252,6007,625],{"class":262},[252,6009,3879],{"class":266},[252,6011,6012],{"class":437}," \u002F\u002F lttr.Vars: {name} placeholders in footer.* frontmatter\n",[252,6014,6015],{"class":254,"line":784},[252,6016,781],{"class":262},[252,6018,6019],{"class":254,"line":789},[252,6020,413],{"emptyLinePlaceholder":412},[252,6022,6023,6025,6027,6029],{"class":254,"line":801},[252,6024,419],{"class":262},[252,6026,3663],{"class":266},[252,6028,707],{"class":262},[252,6030,710],{"class":262},[252,6032,6033,6035],{"class":254,"line":812},[252,6034,716],{"class":715},[252,6036,719],{"class":323},[252,6038,6039,6042],{"class":254,"line":823},[252,6040,6041],{"class":715},"    Front    ",[252,6043,6044],{"class":266},"Frontmatter\n",[252,6046,6047,6049,6051],{"class":254,"line":834},[252,6048,756],{"class":715},[252,6050,745],{"class":262},[252,6052,6053],{"class":266},"Module\n",[252,6055,6056,6058,6060],{"class":254,"line":846},[252,6057,769],{"class":715},[252,6059,745],{"class":262},[252,6061,6062],{"class":266},"Diagnostic\n",[252,6064,6065,6067,6069],{"class":254,"line":1028},[252,6066,742],{"class":715},[252,6068,745],{"class":262},[252,6070,6071],{"class":266},"TagUse\n",[252,6073,6074],{"class":254,"line":1039},[252,6075,781],{"class":262},[569,6077,6078,6086],{},[572,6079,6080],{},[575,6081,6082,6084],{},[578,6083,580],{},[578,6085,583],{},[585,6087,6088,6107,6124,6134,6144],{},[575,6089,6090,6094],{},[590,6091,6092],{},[201,6093,594],{},[590,6095,6096,6097,6099,6100,6102,6103,6106],{},"Parses and compiles ",[201,6098,600],{}," into a ",[201,6101,3411],{},": frontmatter, implicit letters, typed modules, resolved merge tags and bindings, and every static rule. It returns the document or every error joined, never both. Family rules are checked by ",[201,6104,6105],{},"lttr.Compile",", not here.",[575,6108,6109,6114],{},[590,6110,6111],{},[201,6112,6113],{},"CompileCopy",[590,6115,6116,6117,6119,6120,6123],{},"Compiles family copy: one paragraph of Markdown with ",[201,6118,1322],{}," placeholders from ",[201,6121,6122],{},"vars"," and no merge tags.",[575,6125,6126,6131],{},[590,6127,6128],{},[201,6129,6130],{},"CompileCopyText",[590,6132,6133],{},"The same for plain copy with no Markdown.",[575,6135,6136,6141],{},[590,6137,6138],{},[201,6139,6140],{},"Options",[590,6142,6143],{},"The Go types a template is compiled against.",[575,6145,6146,6150],{},[590,6147,6148],{},[201,6149,3411],{},[590,6151,6152],{},"A compiled template, immutable once returned.",[275,6154,6156],{"id":6155},"errors-and-diagnostics","Errors and diagnostics",[243,6158,6160],{"className":245,"code":6159,"language":247,"meta":248,"style":248},"type Error struct {\n    Name string \u002F\u002F template (or copy) name\n    Pos  Pos\n    Msg  string\n}\nfunc (e *Error) Error() string \u002F\u002F \"name:line:col: msg\", or \"line:col: msg\" without a name\n\ntype Diagnostic struct {\n    Pos Pos\n    Msg string\n}\nfunc (d Diagnostic) Format(name string) string \u002F\u002F \"name:line:col: warning: msg\"\n\ntype Pos = comark.Pos\n",[201,6161,6162,6172,6182,6189,6196,6200,6223,6227,6238,6244,6250,6254,6283,6287],{"__ignoreMap":248},[252,6163,6164,6166,6168,6170],{"class":254,"line":255},[252,6165,419],{"class":262},[252,6167,3822],{"class":266},[252,6169,707],{"class":262},[252,6171,710],{"class":262},[252,6173,6174,6177,6179],{"class":254,"line":360},[252,6175,6176],{"class":715},"    Name ",[252,6178,761],{"class":323},[252,6180,6181],{"class":437}," \u002F\u002F template (or copy) name\n",[252,6183,6184,6187],{"class":254,"line":409},[252,6185,6186],{"class":715},"    Pos  ",[252,6188,3834],{"class":266},[252,6190,6191,6194],{"class":254,"line":416},[252,6192,6193],{"class":715},"    Msg  ",[252,6195,719],{"class":323},[252,6197,6198],{"class":254,"line":444},[252,6199,781],{"class":262},[252,6201,6202,6204,6206,6208,6210,6212,6214,6216,6218,6220],{"class":254,"line":449},[252,6203,288],{"class":262},[252,6205,454],{"class":262},[252,6207,3854],{"class":298},[252,6209,460],{"class":262},[252,6211,3859],{"class":266},[252,6213,338],{"class":262},[252,6215,3822],{"class":291},[252,6217,537],{"class":262},[252,6219,324],{"class":323},[252,6221,6222],{"class":437}," \u002F\u002F \"name:line:col: msg\", or \"line:col: msg\" without a name\n",[252,6224,6225],{"class":254,"line":515},[252,6226,413],{"emptyLinePlaceholder":412},[252,6228,6229,6231,6234,6236],{"class":254,"line":543},[252,6230,419],{"class":262},[252,6232,6233],{"class":266}," Diagnostic",[252,6235,707],{"class":262},[252,6237,710],{"class":262},[252,6239,6240,6242],{"class":254,"line":784},[252,6241,3831],{"class":715},[252,6243,3834],{"class":266},[252,6245,6246,6248],{"class":254,"line":789},[252,6247,3839],{"class":715},[252,6249,719],{"class":323},[252,6251,6252],{"class":254,"line":801},[252,6253,781],{"class":262},[252,6255,6256,6258,6260,6262,6265,6267,6270,6272,6274,6276,6278,6280],{"class":254,"line":812},[252,6257,288],{"class":262},[252,6259,454],{"class":262},[252,6261,3740],{"class":298},[252,6263,6264],{"class":266},"Diagnostic",[252,6266,338],{"class":262},[252,6268,6269],{"class":291}," Format",[252,6271,475],{"class":262},[252,6273,604],{"class":298},[252,6275,324],{"class":323},[252,6277,338],{"class":262},[252,6279,324],{"class":323},[252,6281,6282],{"class":437}," \u002F\u002F \"name:line:col: warning: msg\"\n",[252,6284,6285],{"class":254,"line":823},[252,6286,413],{"emptyLinePlaceholder":412},[252,6288,6289,6291,6293,6295,6298,6300],{"class":254,"line":834},[252,6290,419],{"class":262},[252,6292,3438],{"class":266},[252,6294,1342],{"class":262},[252,6296,6297],{"class":266}," comark",[252,6299,625],{"class":262},[252,6301,3834],{"class":266},[197,6303,6304,6306,6307,2075,6310,6312],{},[201,6305,3859],{}," is a compile or render error at a position. Reach it through a joined error with ",[201,6308,6309],{},"errors.As",[201,6311,6264],{}," is a compile warning, and warnings never fail compilation.",[275,6314,6316],{"id":6315},"frontmatter-and-tags","Frontmatter and tags",[243,6318,6320],{"className":245,"code":6319,"language":247,"meta":248,"style":248},"type Frontmatter struct {\n    Template, Family                string\n    Subject, Preheader, From, Issue Text\n    Legal                           bool\n    Footer                          FooterOverrides\n    Pos                             map[string]Pos \u002F\u002F dotted key → key position\n}\n\ntype FooterOverrides struct {\n    Note, Reason, OptOut *Inline \u002F\u002F Markdown, one paragraph\n    About                *Text   \u002F\u002F F2 {about}; empty drops the service line\n    Nav                  *bool   \u002F\u002F F1 nav row\n}\n\ntype TagUse struct {\n    Path    string\n    Type    reflect.Type \u002F\u002F the resolved type, pointers dereferenced\n    Pos     Pos\n    Binding bool         \u002F\u002F a :key=\"path\" binding rather than a {{path}} tag\n}\n",[201,6321,6322,6333,6344,6366,6373,6381,6397,6401,6405,6416,6438,6450,6462,6466,6470,6481,6487,6500,6506,6515],{"__ignoreMap":248},[252,6323,6324,6326,6329,6331],{"class":254,"line":255},[252,6325,419],{"class":262},[252,6327,6328],{"class":266}," Frontmatter",[252,6330,707],{"class":262},[252,6332,710],{"class":262},[252,6334,6335,6337,6339,6342],{"class":254,"line":360},[252,6336,2471],{"class":715},[252,6338,317],{"class":262},[252,6340,6341],{"class":715}," Family                ",[252,6343,719],{"class":323},[252,6345,6346,6348,6350,6353,6355,6358,6360,6363],{"class":254,"line":409},[252,6347,2515],{"class":715},[252,6349,317],{"class":262},[252,6351,6352],{"class":715}," Preheader",[252,6354,317],{"class":262},[252,6356,6357],{"class":715}," From",[252,6359,317],{"class":262},[252,6361,6362],{"class":715}," Issue ",[252,6364,6365],{"class":266},"Text\n",[252,6367,6368,6371],{"class":254,"line":416},[252,6369,6370],{"class":715},"    Legal                           ",[252,6372,4135],{"class":323},[252,6374,6375,6378],{"class":254,"line":444},[252,6376,6377],{"class":715},"    Footer                          ",[252,6379,6380],{"class":266},"FooterOverrides\n",[252,6382,6383,6386,6388,6390,6392,6394],{"class":254,"line":449},[252,6384,6385],{"class":715},"    Pos                             ",[252,6387,1001],{"class":262},[252,6389,761],{"class":323},[252,6391,431],{"class":262},[252,6393,3695],{"class":266},[252,6395,6396],{"class":437}," \u002F\u002F dotted key → key position\n",[252,6398,6399],{"class":254,"line":515},[252,6400,781],{"class":262},[252,6402,6403],{"class":254,"line":543},[252,6404,413],{"emptyLinePlaceholder":412},[252,6406,6407,6409,6412,6414],{"class":254,"line":784},[252,6408,419],{"class":262},[252,6410,6411],{"class":266}," FooterOverrides",[252,6413,707],{"class":262},[252,6415,710],{"class":262},[252,6417,6418,6421,6423,6426,6428,6431,6433,6435],{"class":254,"line":789},[252,6419,6420],{"class":715},"    Note",[252,6422,317],{"class":262},[252,6424,6425],{"class":715}," Reason",[252,6427,317],{"class":262},[252,6429,6430],{"class":715}," OptOut ",[252,6432,460],{"class":262},[252,6434,5911],{"class":266},[252,6436,6437],{"class":437}," \u002F\u002F Markdown, one paragraph\n",[252,6439,6440,6443,6445,6447],{"class":254,"line":801},[252,6441,6442],{"class":715},"    About                ",[252,6444,460],{"class":262},[252,6446,3482],{"class":266},[252,6448,6449],{"class":437},"   \u002F\u002F F2 {about}; empty drops the service line\n",[252,6451,6452,6455,6457,6459],{"class":254,"line":812},[252,6453,6454],{"class":715},"    Nav                  ",[252,6456,460],{"class":262},[252,6458,840],{"class":323},[252,6460,6461],{"class":437},"   \u002F\u002F F1 nav row\n",[252,6463,6464],{"class":254,"line":823},[252,6465,781],{"class":262},[252,6467,6468],{"class":254,"line":834},[252,6469,413],{"emptyLinePlaceholder":412},[252,6471,6472,6474,6477,6479],{"class":254,"line":846},[252,6473,419],{"class":262},[252,6475,6476],{"class":266}," TagUse",[252,6478,707],{"class":262},[252,6480,710],{"class":262},[252,6482,6483,6485],{"class":254,"line":1028},[252,6484,804],{"class":715},[252,6486,719],{"class":323},[252,6488,6489,6491,6493,6495,6497],{"class":254,"line":1039},[252,6490,815],{"class":715},[252,6492,5528],{"class":266},[252,6494,625],{"class":262},[252,6496,3879],{"class":266},[252,6498,6499],{"class":437}," \u002F\u002F the resolved type, pointers dereferenced\n",[252,6501,6502,6504],{"class":254,"line":1044},[252,6503,826],{"class":715},[252,6505,3834],{"class":266},[252,6507,6508,6510,6512],{"class":254,"line":1049},[252,6509,837],{"class":715},[252,6511,840],{"class":323},[252,6513,6514],{"class":437},"         \u002F\u002F a :key=\"path\" binding rather than a {{path}} tag\n",[252,6516,6517],{"class":254,"line":1061},[252,6518,781],{"class":262},[197,6520,6521,6523,6524,6527,6528,6530,6531,6534,6535,6538],{},[201,6522,43],{}," is the compiled template header. ",[201,6525,6526],{},"FooterOverrides"," holds the ",[201,6529,1326],{}," keys, where nil means \"use the family copy\". ",[201,6532,6533],{},"TagUse"," records one merge tag or binding, and ",[201,6536,6537],{},"lttr.TagInfo"," is its string form.",[275,6540,48],{"id":6541},"modules",[243,6543,6545],{"className":245,"code":6544,"language":247,"meta":248,"style":248},"type Module interface {\n    Kind() Kind\n    Class() Class\n    Pos() Pos\n}\n\ntype Kind string\nfunc Lookup(name string) (Kind, bool)\n\ntype Class uint8\n\nconst (\n    ClassHero Class = iota + 1\n    ClassBand\n    ClassTabular\n    ClassBody\n    ClassNotice\n    ClassSignoff\n    ClassTail\n    ClassRule\n    ClassEditorial\n)\n",[201,6546,6547,6558,6568,6578,6587,6591,6595,6604,6628,6632,6642,6646,6652,6672,6677,6682,6687,6692,6697,6702,6707,6712],{"__ignoreMap":248},[252,6548,6549,6551,6554,6556],{"class":254,"line":255},[252,6550,419],{"class":262},[252,6552,6553],{"class":266}," Module",[252,6555,2880],{"class":262},[252,6557,710],{"class":262},[252,6559,6560,6563,6565],{"class":254,"line":360},[252,6561,6562],{"class":291},"    Kind",[252,6564,537],{"class":262},[252,6566,6567],{"class":266}," Kind\n",[252,6569,6570,6573,6575],{"class":254,"line":409},[252,6571,6572],{"class":291},"    Class",[252,6574,537],{"class":262},[252,6576,6577],{"class":266}," Class\n",[252,6579,6580,6583,6585],{"class":254,"line":416},[252,6581,6582],{"class":291},"    Pos",[252,6584,537],{"class":262},[252,6586,3763],{"class":266},[252,6588,6589],{"class":254,"line":444},[252,6590,781],{"class":262},[252,6592,6593],{"class":254,"line":449},[252,6594,413],{"emptyLinePlaceholder":412},[252,6596,6597,6599,6602],{"class":254,"line":515},[252,6598,419],{"class":262},[252,6600,6601],{"class":266}," Kind",[252,6603,567],{"class":323},[252,6605,6606,6608,6610,6612,6614,6616,6618,6620,6622,6624,6626],{"class":254,"line":543},[252,6607,288],{"class":262},[252,6609,1457],{"class":291},[252,6611,475],{"class":262},[252,6613,604],{"class":298},[252,6615,324],{"class":323},[252,6617,338],{"class":262},[252,6619,454],{"class":262},[252,6621,1762],{"class":266},[252,6623,317],{"class":262},[252,6625,1474],{"class":323},[252,6627,357],{"class":262},[252,6629,6630],{"class":254,"line":784},[252,6631,413],{"emptyLinePlaceholder":412},[252,6633,6634,6636,6639],{"class":254,"line":789},[252,6635,419],{"class":262},[252,6637,6638],{"class":266}," Class",[252,6640,6641],{"class":323}," uint8\n",[252,6643,6644],{"class":254,"line":801},[252,6645,413],{"emptyLinePlaceholder":412},[252,6647,6648,6650],{"class":254,"line":812},[252,6649,2129],{"class":262},[252,6651,2132],{"class":262},[252,6653,6654,6657,6660,6662,6665,6668],{"class":254,"line":823},[252,6655,6656],{"class":715},"    ClassHero ",[252,6658,6659],{"class":266},"Class",[252,6661,1342],{"class":262},[252,6663,6664],{"class":262}," iota",[252,6666,6667],{"class":262}," +",[252,6669,6671],{"class":6670},"sbssI"," 1\n",[252,6673,6674],{"class":254,"line":834},[252,6675,6676],{"class":715},"    ClassBand\n",[252,6678,6679],{"class":254,"line":846},[252,6680,6681],{"class":715},"    ClassTabular\n",[252,6683,6684],{"class":254,"line":1028},[252,6685,6686],{"class":715},"    ClassBody\n",[252,6688,6689],{"class":254,"line":1039},[252,6690,6691],{"class":715},"    ClassNotice\n",[252,6693,6694],{"class":254,"line":1044},[252,6695,6696],{"class":715},"    ClassSignoff\n",[252,6698,6699],{"class":254,"line":1049},[252,6700,6701],{"class":715},"    ClassTail\n",[252,6703,6704],{"class":254,"line":1061},[252,6705,6706],{"class":715},"    ClassRule\n",[252,6708,6709],{"class":254,"line":1069},[252,6710,6711],{"class":715},"    ClassEditorial\n",[252,6713,6714],{"class":254,"line":1840},[252,6715,357],{"class":262},[197,6717,6718,6721,6722,6725,6726,4243,6729,6732,6733,6735,6736,6739,6740,6742],{},[201,6719,6720],{},"Module"," is one compiled top-level module. Every module type implements it with pointer receivers, so ",[201,6723,6724],{},"Document.Modules"," holds ",[201,6727,6728],{},"*Statement",[201,6730,6731],{},"*Figure"," and so on. ",[201,6734,1762],{}," names a module. ",[201,6737,6738],{},"Lookup"," maps a component name or handoff alias to its kind, case-insensitively. ",[201,6741,6659],{}," groups modules for layout spacing.",[569,6744,6745,6765],{},[572,6746,6747],{},[575,6748,6749,6751,6756,6758,6761,6763],{},[578,6750,3879],{},[578,6752,6753,6755],{},[201,6754,1762],{}," constant",[578,6757,5570],{},[578,6759,6760],{},"Alias",[578,6762,6659],{},[578,6764,4219],{},[585,6766,6767,6808,6845,6881,6921,6954,6985,7016,7049,7085,7118,7161,7198,7230,7265,7298,7331,7362,7394,7431,7468,7501],{},[575,6768,6769,6774,6779,6784,6789,6792],{},[590,6770,6771],{},[201,6772,6773],{},"Statement",[590,6775,6776],{},[201,6777,6778],{},"KindStatement",[590,6780,6781],{},[201,6782,6783],{},"statement",[590,6785,6786],{},[201,6787,6788],{},"k1",[590,6790,6791],{},"Hero",[590,6793,6794,4243,6796,4243,6799,4243,6802,4243,6805],{},[201,6795,4255],{},[201,6797,6798],{},"Eyebrow",[201,6800,6801],{},"Orange",[201,6803,6804],{},"XL",[201,6806,6807],{},"Blocks",[575,6809,6810,6815,6820,6825,6830,6832],{},[590,6811,6812],{},[201,6813,6814],{},"Figure",[590,6816,6817],{},[201,6818,6819],{},"KindFigure",[590,6821,6822],{},[201,6823,6824],{},"figure",[590,6826,6827],{},[201,6828,6829],{},"k2",[590,6831,6791],{},[590,6833,6834,4243,6836,4243,6838,4243,6841,4243,6843],{},[201,6835,4255],{},[201,6837,6798],{},[201,6839,6840],{},"Amount",[201,6842,4712],{},[201,6844,6807],{},[575,6846,6847,6852,6857,6862,6867,6869],{},[590,6848,6849],{},[201,6850,6851],{},"Offer",[590,6853,6854],{},[201,6855,6856],{},"KindOffer",[590,6858,6859],{},[201,6860,6861],{},"offer",[590,6863,6864],{},[201,6865,6866],{},"e3",[590,6868,6791],{},[590,6870,6871,4243,6873,4243,6875,4243,6878],{},[201,6872,4255],{},[201,6874,6798],{},[201,6876,6877],{},"Heading",[201,6879,6880],{},"Terms",[575,6882,6883,6888,6893,6898,6903,6906],{},[590,6884,6885],{},[201,6886,6887],{},"Image",[590,6889,6890],{},[201,6891,6892],{},"KindImage",[590,6894,6895],{},[201,6896,6897],{},"image",[590,6899,6900],{},[201,6901,6902],{},"k3",[590,6904,6905],{},"Band",[590,6907,6908,4243,6910,4243,6913,4243,6916,4243,6919],{},[201,6909,4255],{},[201,6911,6912],{},"Src",[201,6914,6915],{},"Alt",[201,6917,6918],{},"Height",[201,6920,5125],{},[575,6922,6923,6928,6933,6937,6942,6944],{},[590,6924,6925],{},[201,6926,6927],{},"Map",[590,6929,6930],{},[201,6931,6932],{},"KindMap",[590,6934,6935],{},[201,6936,5196],{},[590,6938,6939],{},[201,6940,6941],{},"t4",[590,6943,6905],{},[590,6945,6946,4243,6948,4243,6950,4243,6952],{},[201,6947,4255],{},[201,6949,6912],{},[201,6951,6915],{},[201,6953,6918],{},[575,6955,6956,6961,6966,6971,6976,6979],{},[590,6957,6958],{},[201,6959,6960],{},"Letter",[590,6962,6963],{},[201,6964,6965],{},"KindLetter",[590,6967,6968],{},[201,6969,6970],{},"letter",[590,6972,6973],{},[201,6974,6975],{},"b1",[590,6977,6978],{},"Body",[590,6980,6981,4243,6983],{},[201,6982,4255],{},[201,6984,6807],{},[575,6986,6987,6992,6997,7002,7007,7009],{},[590,6988,6989],{},[201,6990,6991],{},"Meta",[590,6993,6994],{},[201,6995,6996],{},"KindMeta",[590,6998,6999],{},[201,7000,7001],{},"meta",[590,7003,7004],{},[201,7005,7006],{},"t3",[590,7008,6978],{},[590,7010,7011,4243,7013],{},[201,7012,4255],{},[201,7014,7015],{},"Pairs []MetaPair",[575,7017,7018,7023,7028,7033,7038,7040],{},[590,7019,7020],{},[201,7021,7022],{},"Quote",[590,7024,7025],{},[201,7026,7027],{},"KindQuote",[590,7029,7030],{},[201,7031,7032],{},"quote",[590,7034,7035],{},[201,7036,7037],{},"e2",[590,7039,6978],{},[590,7041,7042,4243,7044,4243,7047],{},[201,7043,4255],{},[201,7045,7046],{},"Cite",[201,7048,6978],{},[575,7050,7051,7056,7061,7066,7071,7073],{},[590,7052,7053],{},[201,7054,7055],{},"Notice",[590,7057,7058],{},[201,7059,7060],{},"KindNotice",[590,7062,7063],{},[201,7064,7065],{},"notice",[590,7067,7068],{},[201,7069,7070],{},"b2",[590,7072,7055],{},[590,7074,7075,4243,7077,4243,7080,4243,7083],{},[201,7076,4255],{},[201,7078,7079],{},"Title",[201,7081,7082],{},"Warn",[201,7084,6807],{},[575,7086,7087,7092,7097,7101,7106,7109],{},[590,7088,7089],{},[201,7090,7091],{},"Code",[590,7093,7094],{},[201,7095,7096],{},"KindCode",[590,7098,7099],{},[201,7100,201],{},[590,7102,7103],{},[201,7104,7105],{},"b3",[590,7107,7108],{},"Tail",[590,7110,7111,4243,7113,4243,7115,7117],{},[201,7112,4255],{},[201,7114,5570],{},[201,7116,6807],{}," (at most one paragraph)",[575,7119,7120,7125,7130,7135,7140,7142],{},[590,7121,7122],{},[201,7123,7124],{},"Progress",[590,7126,7127],{},[201,7128,7129],{},"KindProgress",[590,7131,7132],{},[201,7133,7134],{},"progress",[590,7136,7137],{},[201,7138,7139],{},"t2",[590,7141,7108],{},[590,7143,7144,4243,7146,4243,7149,4243,7152,4243,7155,4243,7158],{},[201,7145,4255],{},[201,7147,7148],{},"Steps",[201,7150,7151],{},"StepsRef",[201,7153,7154],{},"Current",[201,7156,7157],{},"CurrentRef",[201,7159,7160],{},"CurrentIndex",[575,7162,7163,7168,7173,7178,7189,7191],{},[590,7164,7165],{},[201,7166,7167],{},"Actions",[590,7169,7170],{},[201,7171,7172],{},"KindActions",[590,7174,7175],{},[201,7176,7177],{},"actions",[590,7179,7180,4243,7183,4243,7186],{},[201,7181,7182],{},"c1",[201,7184,7185],{},"c2",[201,7187,7188],{},"c3",[590,7190,7108],{},[590,7192,7193,4243,7195],{},[201,7194,4255],{},[201,7196,7197],{},"Row ActionRow",[575,7199,7200,7205,7210,7215,7220,7223],{},[590,7201,7202],{},[201,7203,7204],{},"Breakdown",[590,7206,7207],{},[201,7208,7209],{},"KindBreakdown",[590,7211,7212],{},[201,7213,7214],{},"breakdown",[590,7216,7217],{},[201,7218,7219],{},"b4",[590,7221,7222],{},"Tabular",[590,7224,7225,4243,7227],{},[201,7226,4255],{},[201,7228,7229],{},"Rows",[575,7231,7232,7237,7242,7247,7252,7254],{},[590,7233,7234],{},[201,7235,7236],{},"Compare",[590,7238,7239],{},[201,7240,7241],{},"KindCompare",[590,7243,7244],{},[201,7245,7246],{},"compare",[590,7248,7249],{},[201,7250,7251],{},"b5",[590,7253,7222],{},[590,7255,7256,4243,7258,4243,7260,4243,7262],{},[201,7257,4255],{},[201,7259,2830],{},[201,7261,7229],{},[201,7263,7264],{},"Align",[575,7266,7267,7272,7277,7281,7283,7285],{},[590,7268,7269],{},[201,7270,7271],{},"Table",[590,7273,7274],{},[201,7275,7276],{},"KindTable",[590,7278,7279],{},[201,7280,569],{},[590,7282],{},[590,7284,7222],{},[590,7286,7287,4243,7289,4243,7292,4243,7294,4243,7296],{},[201,7288,4255],{},[201,7290,7291],{},"Headless",[201,7293,2830],{},[201,7295,7229],{},[201,7297,7264],{},[575,7299,7300,7304,7309,7314,7319,7321],{},[590,7301,7302],{},[201,7303,5247],{},[590,7305,7306],{},[201,7307,7308],{},"KindReceipt",[590,7310,7311],{},[201,7312,7313],{},"receipt",[590,7315,7316],{},[201,7317,7318],{},"t1",[590,7320,7222],{},[590,7322,7323,4243,7325,4243,7328],{},[201,7324,4255],{},[201,7326,7327],{},"Order data.Accessor",[201,7329,7330],{},"TotalLabel",[575,7332,7333,7338,7343,7348,7353,7355],{},[590,7334,7335],{},[201,7336,7337],{},"Stock",[590,7339,7340],{},[201,7341,7342],{},"KindStock",[590,7344,7345],{},[201,7346,7347],{},"stock",[590,7349,7350],{},[201,7351,7352],{},"t5",[590,7354,7222],{},[590,7356,7357,4243,7359],{},[201,7358,4255],{},[201,7360,7361],{},"Items data.Accessor",[575,7363,7364,7369,7374,7379,7384,7387],{},[590,7365,7366],{},[201,7367,7368],{},"Stories",[590,7370,7371],{},[201,7372,7373],{},"KindStories",[590,7375,7376],{},[201,7377,7378],{},"stories",[590,7380,7381],{},[201,7382,7383],{},"e1",[590,7385,7386],{},"Editorial",[590,7388,7389,4243,7391],{},[201,7390,4255],{},[201,7392,7393],{},"Items []Story",[575,7395,7396,7401,7406,7411,7416,7418],{},[590,7397,7398],{},[201,7399,7400],{},"Products",[590,7402,7403],{},[201,7404,7405],{},"KindProducts",[590,7407,7408],{},[201,7409,7410],{},"products",[590,7412,7413],{},[201,7414,7415],{},"e4",[590,7417,7386],{},[590,7419,7420,4243,7422,4243,7425,4243,7428],{},[201,7421,4255],{},[201,7423,7424],{},"Items []ProductTile",[201,7426,7427],{},"ItemsRef",[201,7429,7430],{},"CTA",[575,7432,7433,7438,7443,7448,7453,7456],{},[590,7434,7435],{},[201,7436,7437],{},"Signature",[590,7439,7440],{},[201,7441,7442],{},"KindSignature",[590,7444,7445],{},[201,7446,7447],{},"signature",[590,7449,7450],{},[201,7451,7452],{},"s1",[590,7454,7455],{},"Signoff",[590,7457,7458,4243,7460,4243,7462,4243,7465],{},[201,7459,4255],{},[201,7461,4242],{},[201,7463,7464],{},"Role",[201,7466,7467],{},"Contact",[575,7469,7470,7474,7479,7484,7489,7491],{},[590,7471,7472],{},[201,7473,7455],{},[590,7475,7476],{},[201,7477,7478],{},"KindSignoff",[590,7480,7481],{},[201,7482,7483],{},"signoff",[590,7485,7486],{},[201,7487,7488],{},"s2",[590,7490,7455],{},[590,7492,7493,4243,7495,4243,7498,7500],{},[201,7494,4255],{},[201,7496,7497],{},"Closing",[201,7499,4242],{}," (empty: \"The {brand} team\")",[575,7502,7503,7508,7513,7518,7520,7523],{},[590,7504,7505],{},[201,7506,7507],{},"Divider",[590,7509,7510],{},[201,7511,7512],{},"KindDivider",[590,7514,7515],{},[201,7516,7517],{},"divider",[590,7519],{},[590,7521,7522],{},"Rule",[590,7524,7525],{},[201,7526,4255],{},[197,7528,7529,7530,7532,7533,4243,7535,226,7538,7541],{},"Each module type has the three ",[201,7531,6720],{}," methods, ",[201,7534,4201],{},[201,7536,7537],{},"Class()",[201,7539,7540],{},"Pos()",". The parts of modules:",[569,7543,7544,7552],{},[572,7545,7546],{},[575,7547,7548,7550],{},[578,7549,3879],{},[578,7551,3882],{},[585,7553,7554,7572,7604,7633,7662,7676],{},[575,7555,7556,7561],{},[590,7557,7558],{},[201,7559,7560],{},"MetaPair",[590,7562,7563,7564,7567,7568,4243,7570],{},"One ",[201,7565,7566],{},"### Label"," and its paragraph: ",[201,7569,2082],{},[201,7571,6978],{},[575,7573,7574,7579],{},[590,7575,7576],{},[201,7577,7578],{},"Story",[590,7580,7563,7581,7584,7585,4243,7587,4243,7589,4243,7591,4243,7593,4243,7596,4243,7598,7600,7601,7603],{},[201,7582,7583],{},":::story"," tile: ",[201,7586,4255],{},[201,7588,6798],{},[201,7590,6887],{},[201,7592,6915],{},[201,7594,7595],{},"Href",[201,7597,7430],{},[201,7599,5125],{},", and ",[201,7602,7079],{}," (its body)",[575,7605,7606,7611],{},[590,7607,7608],{},[201,7609,7610],{},"ProductTile",[590,7612,7563,7613,7584,7616,4243,7618,4243,7620,4243,7623,4243,7625,4243,7627,4243,7629,4243,7631],{},[201,7614,7615],{},":::product",[201,7617,4255],{},[201,7619,4242],{},[201,7621,7622],{},"Price",[201,7624,6887],{},[201,7626,6915],{},[201,7628,7595],{},[201,7630,7430],{},[201,7632,5125],{},[575,7634,7635,7640],{},[590,7636,7637],{},[201,7638,7639],{},"Action",[590,7641,3270,7642,454,7645,7648,7649,454,7652,7655,7656,4243,7658,4243,7660],{},[201,7643,7644],{},":button",[201,7646,7647],{},"Primary",") or ",[201,7650,7651],{},":link",[201,7653,7654],{},"Arrow",") in an action row: ",[201,7657,2082],{},[201,7659,7595],{},[201,7661,3695],{},[575,7663,7664,7669],{},[590,7665,7666],{},[201,7667,7668],{},"Row",[590,7670,7671,7672,7675],{},"One table row, ",[201,7673,7674],{},"[]Inline",", one per column",[575,7677,7678,7682],{},[590,7679,7680],{},[201,7681,7264],{},[590,7683,7684,7685,4243,7688,4243,7691,4243,7694],{},"A GFM column alignment: ",[201,7686,7687],{},"AlignNone",[201,7689,7690],{},"AlignLeft",[201,7692,7693],{},"AlignCenter",[201,7695,7696],{},"AlignRight",[275,7698,7700],{"id":7699},"blocks-and-inline-content","Blocks and inline content",[243,7702,7704],{"className":245,"code":7703,"language":247,"meta":248,"style":248},"type Block interface{ \u002F* unexported *\u002F }       \u002F\u002F Heading, Para, ActionRow or List\ntype InlineNode interface{ \u002F* unexported *\u002F }  \u002F\u002F TextRun, Strong, Em, CodeSpan, Link, Span or Break\ntype Inline []InlineNode\n",[201,7705,7706,7724,7740],{"__ignoreMap":248},[252,7707,7708,7710,7713,7716,7718,7721],{"class":254,"line":255},[252,7709,419],{"class":262},[252,7711,7712],{"class":266}," Block",[252,7714,7715],{"class":262}," interface{",[252,7717,438],{"class":437},[252,7719,7720],{"class":262}," }",[252,7722,7723],{"class":437},"       \u002F\u002F Heading, Para, ActionRow or List\n",[252,7725,7726,7728,7731,7733,7735,7737],{"class":254,"line":360},[252,7727,419],{"class":262},[252,7729,7730],{"class":266}," InlineNode",[252,7732,7715],{"class":262},[252,7734,438],{"class":437},[252,7736,7720],{"class":262},[252,7738,7739],{"class":437},"  \u002F\u002F TextRun, Strong, Em, CodeSpan, Link, Span or Break\n",[252,7741,7742,7744,7747,7749],{"class":254,"line":409},[252,7743,419],{"class":262},[252,7745,7746],{"class":266}," Inline",[252,7748,332],{"class":262},[252,7750,7751],{"class":266},"InlineNode\n",[569,7753,7754,7762],{},[572,7755,7756],{},[575,7757,7758,7760],{},[578,7759,3879],{},[578,7761,3882],{},[585,7763,7764,7779,7791,7809,7826,7840,7860,7875,7896,7912],{},[575,7765,7766,7770],{},[590,7767,7768],{},[201,7769,6877],{},[590,7771,7772,7775,7776],{},[201,7773,7774],{},"Level"," 1–6 and ",[201,7777,7778],{},"Body Inline",[575,7780,7781,7786],{},[590,7782,7783],{},[201,7784,7785],{},"Para",[590,7787,7788,7789],{},"A paragraph, ",[201,7790,7778],{},[575,7792,7793,7798],{},[590,7794,7795],{},[201,7796,7797],{},"ActionRow",[590,7799,7800,7801,226,7803,7805,7806],{},"A paragraph made only of ",[201,7802,7644],{},[201,7804,7651],{},": ",[201,7807,7808],{},"Items []Action",[575,7810,7811,7816],{},[590,7812,7813],{},[201,7814,7815],{},"List",[590,7817,7818,7819,7822,7823],{},"A bulleted or ",[201,7820,7821],{},"Ordered"," list, one paragraph per item: ",[201,7824,7825],{},"Items []Inline",[575,7827,7828,7833],{},[590,7829,7830],{},[201,7831,7832],{},"TextRun",[590,7834,7835,7836,7839],{},"Text with merge tags, ",[201,7837,7838],{},"Value Text",". Renderers escape merge values and never parse them as Markdown.",[575,7841,7842,7850],{},[590,7843,7844,4243,7847],{},[201,7845,7846],{},"Strong",[201,7848,7849],{},"Em",[590,7851,7852,226,7855,4243,7858],{},[201,7853,7854],{},"**strong**",[201,7856,7857],{},"*emphasis*",[201,7859,7778],{},[575,7861,7862,7867],{},[590,7863,7864],{},[201,7865,7866],{},"CodeSpan",[590,7868,7869,4243,7872,7874],{},[201,7870,7871],{},"`code`",[201,7873,7838],{},". It may hold merge tags.",[575,7876,7877,7882],{},[590,7878,7879],{},[201,7880,7881],{},"Link",[590,7883,7884,7887,7888,7890,7891,4243,7894],{},[201,7885,7886],{},"[body](href)",", an autolink or a ",[201,7889,7651],{}," in running text: ",[201,7892,7893],{},"Href Text",[201,7895,7778],{},[575,7897,7898,7902],{},[590,7899,7900],{},[201,7901,4302],{},[590,7903,7904,7805,7907,4243,7910],{},[201,7905,7906],{},"[body]{.class …}",[201,7908,7909],{},"Style SpanStyle",[201,7911,7778],{},[575,7913,7914,7919],{},[590,7915,7916],{},[201,7917,7918],{},"Break",[590,7920,7921,7922,7925],{},"A line break, ",[201,7923,7924],{},"Hard"," or soft",[243,7927,7929],{"className":245,"code":7928,"language":247,"meta":248,"style":248},"type SpanStyle uint8\n\nconst (\n    Muted SpanStyle = 1 \u003C\u003C iota \u002F\u002F .muted\n    Teal                        \u002F\u002F .teal\n    Mono                        \u002F\u002F .mono\n    Small                       \u002F\u002F .small\n    Bold                        \u002F\u002F .bold\n)\n\nfunc (s SpanStyle) Has(x SpanStyle) bool\n",[201,7930,7931,7940,7944,7950,7971,7979,7987,7995,8003,8007,8011],{"__ignoreMap":248},[252,7932,7933,7935,7938],{"class":254,"line":255},[252,7934,419],{"class":262},[252,7936,7937],{"class":266}," SpanStyle",[252,7939,6641],{"class":323},[252,7941,7942],{"class":254,"line":360},[252,7943,413],{"emptyLinePlaceholder":412},[252,7945,7946,7948],{"class":254,"line":409},[252,7947,2129],{"class":262},[252,7949,2132],{"class":262},[252,7951,7952,7955,7958,7960,7963,7966,7968],{"class":254,"line":416},[252,7953,7954],{"class":715},"    Muted ",[252,7956,7957],{"class":266},"SpanStyle",[252,7959,1342],{"class":262},[252,7961,7962],{"class":6670}," 1",[252,7964,7965],{"class":262}," \u003C\u003C",[252,7967,6664],{"class":262},[252,7969,7970],{"class":437}," \u002F\u002F .muted\n",[252,7972,7973,7976],{"class":254,"line":444},[252,7974,7975],{"class":715},"    Teal                        ",[252,7977,7978],{"class":437},"\u002F\u002F .teal\n",[252,7980,7981,7984],{"class":254,"line":449},[252,7982,7983],{"class":715},"    Mono                        ",[252,7985,7986],{"class":437},"\u002F\u002F .mono\n",[252,7988,7989,7992],{"class":254,"line":515},[252,7990,7991],{"class":715},"    Small                       ",[252,7993,7994],{"class":437},"\u002F\u002F .small\n",[252,7996,7997,8000],{"class":254,"line":543},[252,7998,7999],{"class":715},"    Bold                        ",[252,8001,8002],{"class":437},"\u002F\u002F .bold\n",[252,8004,8005],{"class":254,"line":784},[252,8006,357],{"class":262},[252,8008,8009],{"class":254,"line":789},[252,8010,413],{"emptyLinePlaceholder":412},[252,8012,8013,8015,8017,8019,8021,8023,8026,8028,8031,8033,8035],{"class":254,"line":801},[252,8014,288],{"class":262},[252,8016,454],{"class":262},[252,8018,2416],{"class":298},[252,8020,7957],{"class":266},[252,8022,338],{"class":262},[252,8024,8025],{"class":291}," Has",[252,8027,475],{"class":262},[252,8029,8030],{"class":298},"x",[252,8032,7937],{"class":266},[252,8034,338],{"class":262},[252,8036,2428],{"class":323},[197,8038,8039,8041,8042,2442,8045,8047,8048,625],{},[201,8040,7957],{}," is a set of span classes, one flag per allowed class. ",[201,8043,8044],{},"Has",[201,8046,2445],{}," includes every style in ",[201,8049,8030],{},[275,8051,8053],{"id":8052},"text-and-evaluation","Text and evaluation",[243,8055,8057],{"className":245,"code":8056,"language":247,"meta":248,"style":248},"type Text []Part\n\ntype Part struct {\n    Lit string\n    Ref *Ref\n}\n\ntype Ref struct {\n    Path        string\n    Fallback    string\n    HasFallback bool\n    Pos         Pos\n    Get         data.Accessor \u002F\u002F precompiled; indexes Env.Roots\n    Placeholder bool          \u002F\u002F a {name} placeholder rather than a {{path}} merge tag\n}\nfunc (r *Ref) String() string \u002F\u002F {{path}} or {name}\n\ntype Env struct {\n    Name  string          \u002F\u002F template name, for error positions\n    Roots []reflect.Value \u002F\u002F [data, recipient, vars], indexed by the Slot constants\n}\n\nconst (\n    SlotData      = 0\n    SlotRecipient = 1\n    SlotVars      = 2\n)\n\nfunc Lit(s string) Text\nfunc (t Text) Literal() (string, bool)\nfunc (t Text) Eval(env Env) (string, error)\nfunc (t Text) EvalOptional(env Env) (string, error)\nfunc (t Text) EvalURL(env Env) (string, error)\nfunc (t Text) EvalURLOptional(env Env) (string, error)\n",[201,8058,8059,8069,8073,8083,8090,8100,8104,8108,8119,8125,8131,8137,8143,8157,8167,8171,8195,8199,8210,8220,8236,8240,8244,8250,8260,8269,8279,8283,8287,8305,8332,8366,8399,8432],{"__ignoreMap":248},[252,8060,8061,8063,8065,8067],{"class":254,"line":255},[252,8062,419],{"class":262},[252,8064,4023],{"class":266},[252,8066,332],{"class":262},[252,8068,4028],{"class":266},[252,8070,8071],{"class":254,"line":360},[252,8072,413],{"emptyLinePlaceholder":412},[252,8074,8075,8077,8079,8081],{"class":254,"line":409},[252,8076,419],{"class":262},[252,8078,4057],{"class":266},[252,8080,707],{"class":262},[252,8082,710],{"class":262},[252,8084,8085,8088],{"class":254,"line":416},[252,8086,8087],{"class":715},"    Lit ",[252,8089,719],{"class":323},[252,8091,8092,8095,8097],{"class":254,"line":444},[252,8093,8094],{"class":715},"    Ref ",[252,8096,460],{"class":262},[252,8098,8099],{"class":266},"Ref\n",[252,8101,8102],{"class":254,"line":449},[252,8103,781],{"class":262},[252,8105,8106],{"class":254,"line":515},[252,8107,413],{"emptyLinePlaceholder":412},[252,8109,8110,8112,8115,8117],{"class":254,"line":543},[252,8111,419],{"class":262},[252,8113,8114],{"class":266}," Ref",[252,8116,707],{"class":262},[252,8118,710],{"class":262},[252,8120,8121,8123],{"class":254,"line":784},[252,8122,4115],{"class":715},[252,8124,719],{"class":323},[252,8126,8127,8129],{"class":254,"line":789},[252,8128,4125],{"class":715},[252,8130,719],{"class":323},[252,8132,8133,8135],{"class":254,"line":801},[252,8134,4132],{"class":715},[252,8136,4135],{"class":323},[252,8138,8139,8141],{"class":254,"line":812},[252,8140,4140],{"class":715},[252,8142,3834],{"class":266},[252,8144,8145,8148,8150,8152,8154],{"class":254,"line":823},[252,8146,8147],{"class":715},"    Get         ",[252,8149,207],{"class":266},[252,8151,625],{"class":262},[252,8153,5492],{"class":266},[252,8155,8156],{"class":437}," \u002F\u002F precompiled; indexes Env.Roots\n",[252,8158,8159,8162,8164],{"class":254,"line":834},[252,8160,8161],{"class":715},"    Placeholder ",[252,8163,840],{"class":323},[252,8165,8166],{"class":437},"          \u002F\u002F a {name} placeholder rather than a {{path}} merge tag\n",[252,8168,8169],{"class":254,"line":846},[252,8170,781],{"class":262},[252,8172,8173,8175,8177,8179,8181,8184,8186,8188,8190,8192],{"class":254,"line":1028},[252,8174,288],{"class":262},[252,8176,454],{"class":262},[252,8178,1448],{"class":298},[252,8180,460],{"class":262},[252,8182,8183],{"class":266},"Ref",[252,8185,338],{"class":262},[252,8187,3804],{"class":291},[252,8189,537],{"class":262},[252,8191,324],{"class":323},[252,8193,8194],{"class":437}," \u002F\u002F {{path}} or {name}\n",[252,8196,8197],{"class":254,"line":1039},[252,8198,413],{"emptyLinePlaceholder":412},[252,8200,8201,8203,8206,8208],{"class":254,"line":1044},[252,8202,419],{"class":262},[252,8204,8205],{"class":266}," Env",[252,8207,707],{"class":262},[252,8209,710],{"class":262},[252,8211,8212,8215,8217],{"class":254,"line":1049},[252,8213,8214],{"class":715},"    Name  ",[252,8216,761],{"class":323},[252,8218,8219],{"class":437},"          \u002F\u002F template name, for error positions\n",[252,8221,8222,8225,8227,8229,8231,8233],{"class":254,"line":1061},[252,8223,8224],{"class":715},"    Roots ",[252,8226,745],{"class":262},[252,8228,5528],{"class":266},[252,8230,625],{"class":262},[252,8232,5570],{"class":266},[252,8234,8235],{"class":437}," \u002F\u002F [data, recipient, vars], indexed by the Slot constants\n",[252,8237,8238],{"class":254,"line":1069},[252,8239,781],{"class":262},[252,8241,8242],{"class":254,"line":1840},[252,8243,413],{"emptyLinePlaceholder":412},[252,8245,8246,8248],{"class":254,"line":1851},[252,8247,2129],{"class":262},[252,8249,2132],{"class":262},[252,8251,8252,8255,8257],{"class":254,"line":1862},[252,8253,8254],{"class":715},"    SlotData      ",[252,8256,2140],{"class":262},[252,8258,8259],{"class":6670}," 0\n",[252,8261,8262,8265,8267],{"class":254,"line":1873},[252,8263,8264],{"class":715},"    SlotRecipient ",[252,8266,2140],{"class":262},[252,8268,6671],{"class":6670},[252,8270,8271,8274,8276],{"class":254,"line":1884},[252,8272,8273],{"class":715},"    SlotVars      ",[252,8275,2140],{"class":262},[252,8277,8278],{"class":6670}," 2\n",[252,8280,8281],{"class":254,"line":1895},[252,8282,357],{"class":262},[252,8284,8285],{"class":254,"line":1909},[252,8286,413],{"emptyLinePlaceholder":412},[252,8288,8289,8291,8294,8296,8298,8300,8302],{"class":254,"line":1914},[252,8290,288],{"class":262},[252,8292,8293],{"class":291}," Lit",[252,8295,475],{"class":262},[252,8297,2445],{"class":298},[252,8299,324],{"class":323},[252,8301,338],{"class":262},[252,8303,8304],{"class":266}," Text\n",[252,8306,8307,8309,8311,8313,8315,8317,8320,8322,8324,8326,8328,8330],{"class":254,"line":1919},[252,8308,288],{"class":262},[252,8310,454],{"class":262},[252,8312,457],{"class":298},[252,8314,3482],{"class":266},[252,8316,338],{"class":262},[252,8318,8319],{"class":291}," Literal",[252,8321,537],{"class":262},[252,8323,454],{"class":262},[252,8325,761],{"class":323},[252,8327,317],{"class":262},[252,8329,1474],{"class":323},[252,8331,357],{"class":262},[252,8333,8334,8336,8338,8340,8342,8344,8347,8349,8352,8354,8356,8358,8360,8362,8364],{"class":254,"line":1931},[252,8335,288],{"class":262},[252,8337,454],{"class":262},[252,8339,457],{"class":298},[252,8341,3482],{"class":266},[252,8343,338],{"class":262},[252,8345,8346],{"class":291}," Eval",[252,8348,475],{"class":262},[252,8350,8351],{"class":298},"env",[252,8353,8205],{"class":266},[252,8355,338],{"class":262},[252,8357,454],{"class":262},[252,8359,761],{"class":323},[252,8361,317],{"class":262},[252,8363,354],{"class":323},[252,8365,357],{"class":262},[252,8367,8368,8370,8372,8374,8376,8378,8381,8383,8385,8387,8389,8391,8393,8395,8397],{"class":254,"line":1940},[252,8369,288],{"class":262},[252,8371,454],{"class":262},[252,8373,457],{"class":298},[252,8375,3482],{"class":266},[252,8377,338],{"class":262},[252,8379,8380],{"class":291}," EvalOptional",[252,8382,475],{"class":262},[252,8384,8351],{"class":298},[252,8386,8205],{"class":266},[252,8388,338],{"class":262},[252,8390,454],{"class":262},[252,8392,761],{"class":323},[252,8394,317],{"class":262},[252,8396,354],{"class":323},[252,8398,357],{"class":262},[252,8400,8401,8403,8405,8407,8409,8411,8414,8416,8418,8420,8422,8424,8426,8428,8430],{"class":254,"line":1949},[252,8402,288],{"class":262},[252,8404,454],{"class":262},[252,8406,457],{"class":298},[252,8408,3482],{"class":266},[252,8410,338],{"class":262},[252,8412,8413],{"class":291}," EvalURL",[252,8415,475],{"class":262},[252,8417,8351],{"class":298},[252,8419,8205],{"class":266},[252,8421,338],{"class":262},[252,8423,454],{"class":262},[252,8425,761],{"class":323},[252,8427,317],{"class":262},[252,8429,354],{"class":323},[252,8431,357],{"class":262},[252,8433,8434,8436,8438,8440,8442,8444,8447,8449,8451,8453,8455,8457,8459,8461,8463],{"class":254,"line":1958},[252,8435,288],{"class":262},[252,8437,454],{"class":262},[252,8439,457],{"class":298},[252,8441,3482],{"class":266},[252,8443,338],{"class":262},[252,8445,8446],{"class":291}," EvalURLOptional",[252,8448,475],{"class":262},[252,8450,8351],{"class":298},[252,8452,8205],{"class":266},[252,8454,338],{"class":262},[252,8456,454],{"class":262},[252,8458,761],{"class":323},[252,8460,317],{"class":262},[252,8462,354],{"class":323},[252,8464,357],{"class":262},[569,8466,8467,8475],{},[572,8468,8469],{},[575,8470,8471,8473],{},[578,8472,580],{},[578,8474,583],{},[585,8476,8477,8486,8502,8511,8524,8547,8560,8573,8596,8614,8681],{},[575,8478,8479,8483],{},[590,8480,8481],{},[201,8482,3482],{},[590,8484,8485],{},"Literal text with references resolved at compile time. Adjacent literals are always merged.",[575,8487,8488,8492],{},[590,8489,8490],{},[201,8491,4183],{},[590,8493,8494,8495,8497,8498,8501],{},"One piece of a ",[201,8496,3482],{},": a literal (",[201,8499,8500],{},"Ref == nil",") or a reference.",[575,8503,8504,8508],{},[590,8505,8506],{},[201,8507,8183],{},[590,8509,8510],{},"A compiled merge tag or copy placeholder.",[575,8512,8513,8518],{},[590,8514,8515],{},[201,8516,8517],{},"Env",[590,8519,8520,8521,8523],{},"The data a ",[201,8522,3482],{}," is evaluated against.",[575,8525,8526,8537],{},[590,8527,8528,4243,8531,4243,8534],{},[201,8529,8530],{},"SlotData",[201,8532,8533],{},"SlotRecipient",[201,8535,8536],{},"SlotVars",[590,8538,8539,8540,8543,8544,625],{},"The indexes of ",[201,8541,8542],{},"Env.Roots",", which is always ",[201,8545,8546],{},"[data, recipient, vars]",[575,8548,8549,8554],{},[590,8550,8551],{},[201,8552,8553],{},"Lit",[590,8555,8556,8557,8559],{},"A literal ",[201,8558,3482],{},". The empty string gives nil.",[575,8561,8562,8567],{},[590,8563,8564],{},[201,8565,8566],{},"Literal",[590,8568,8569,8570,8572],{},"The text and true when ",[201,8571,5645],{}," has no references.",[575,8574,8575,8580],{},[590,8576,8577],{},[201,8578,8579],{},"Eval",[590,8581,8582,8583,8585,8586,8588,8589,8591,8592,8595],{},"Renders ",[201,8584,5645],{},". A reference with no value (unresolvable, or formatting to ",[201,8587,2836],{},") uses its fallback. Without one it is an ",[201,8590,3575],{}," \"no value for ",[8593,8594],"binding",{"value":5483},"\".",[575,8597,8598,8603],{},[590,8599,8600],{},[201,8601,8602],{},"EvalOptional",[590,8604,8605,8606,8608,8609,8611,8612,625],{},"Like ",[201,8607,8579],{},", but a missing value with no fallback gives ",[201,8610,2836],{},". Used for an optional image or map ",[201,8613,600],{},[575,8615,8616,8621],{},[590,8617,8618],{},[201,8619,8620],{},"EvalURL",[590,8622,8623,8625,8626,226,8629,8632,8633,8636,8637,8640,8641,8644,8645,8648,8649,4243,8652,8654,8655,8658,8659,8654,8661,8663,8664,8666,8667,8670,8671,8674,8675,8677,8678,8680],{},[201,8624,8579],{}," for an href or src. A reference that opens the text is inserted as is, so ",[201,8627,8628],{},"{{track_url}}",[201,8630,8631],{},"{site}\u002Fhelp"," work. Every later value, fallback included, is percent-escaped for its place: as a query value once the URL has a ",[201,8634,8635],{},"?"," (spaces as ",[201,8638,8639],{},"%20","), otherwise as a path segment, so ",[201,8642,8643],{},"mailto:{{email}}"," keeps its address. A later reference inside the authority (after ",[201,8646,8647],{},"\u002F\u002F",", before any ",[201,8650,8651],{},"\u002F",[201,8653,8635],{}," or ",[201,8656,8657],{},"#",") is not escaped. It must be a single DNS label, immediately preceded by literal ",[201,8660,8647],{},[201,8662,625],{},", and immediately followed by literal text starting with ",[201,8665,625],{},", as in ",[201,8668,8669],{},"https:\u002F\u002F{{shop}}.example.com\u002F",". Anything else — including no value there, even in ",[201,8672,8673],{},"EvalURLOptional"," — is an ",[201,8676,3575],{}," at the reference, \"merge value ",[8593,8679],{"value":5483}," cannot form part of a url host\". A value can't add a query parameter, change the path or fragment, or move the host.",[575,8682,8683,8687],{},[590,8684,8685],{},[201,8686,8673],{},[590,8688,8689,621,8691,8693],{},[201,8690,8620],{},[201,8692,8602],{},"'s missing-value rule.",[238,8695,8697],{"id":8696},"import-lttrlayout","Import lttr\u002Flayout",[243,8699,8701],{"className":245,"code":8700,"language":247,"meta":248,"style":248},"import \"github.com\u002Fsulv-io\u002Flttr\u002Flayout\"\n",[201,8702,8703],{"__ignoreMap":248},[252,8704,8705,8707,8709,8712],{"class":254,"line":255},[252,8706,259],{"class":258},[252,8708,263],{"class":262},[252,8710,8711],{"class":266},"github.com\u002Fsulv-io\u002Flttr\u002Flayout",[252,8713,270],{"class":262},[197,8715,8716,8717,625],{},"Arranges compiled modules into a document the renderers draw: header and footer chrome, and the padding above and below every module. See ",[862,8718,89],{"href":90},[243,8720,8722],{"className":245,"code":8721,"language":247,"meta":248,"style":248},"func Arrange(mods []ir.Module, header HeaderVariant) []Section\n\ntype Section struct {\n    Module            ir.Module\n    PadTop, PadBottom int\n}\n\ntype Document struct {\n    Name               string \u002F\u002F template name, for render errors\n    Subject, Preheader string\n    Header             Header\n    Sections           []Section\n    Footer             Footer\n    Theme              theme.Theme\n    AllowRelativeURLs  bool\n}\n",[201,8723,8724,8758,8762,8773,8784,8796,8800,8804,8814,8824,8834,8842,8851,8859,8870,8877],{"__ignoreMap":248},[252,8725,8726,8728,8731,8733,8736,8738,8740,8742,8744,8746,8749,8751,8753,8755],{"class":254,"line":255},[252,8727,288],{"class":262},[252,8729,8730],{"class":291}," Arrange",[252,8732,475],{"class":262},[252,8734,8735],{"class":298},"mods",[252,8737,332],{"class":262},[252,8739,219],{"class":266},[252,8741,625],{"class":262},[252,8743,6720],{"class":266},[252,8745,317],{"class":262},[252,8747,8748],{"class":298}," header",[252,8750,2095],{"class":266},[252,8752,338],{"class":262},[252,8754,332],{"class":262},[252,8756,8757],{"class":266},"Section\n",[252,8759,8760],{"class":254,"line":360},[252,8761,413],{"emptyLinePlaceholder":412},[252,8763,8764,8766,8769,8771],{"class":254,"line":409},[252,8765,419],{"class":262},[252,8767,8768],{"class":266}," Section",[252,8770,707],{"class":262},[252,8772,710],{"class":262},[252,8774,8775,8778,8780,8782],{"class":254,"line":416},[252,8776,8777],{"class":715},"    Module            ",[252,8779,219],{"class":266},[252,8781,625],{"class":262},[252,8783,6053],{"class":266},[252,8785,8786,8789,8791,8794],{"class":254,"line":444},[252,8787,8788],{"class":715},"    PadTop",[252,8790,317],{"class":262},[252,8792,8793],{"class":715}," PadBottom ",[252,8795,4946],{"class":323},[252,8797,8798],{"class":254,"line":449},[252,8799,781],{"class":262},[252,8801,8802],{"class":254,"line":515},[252,8803,413],{"emptyLinePlaceholder":412},[252,8805,8806,8808,8810,8812],{"class":254,"line":543},[252,8807,419],{"class":262},[252,8809,3663],{"class":266},[252,8811,707],{"class":262},[252,8813,710],{"class":262},[252,8815,8816,8819,8821],{"class":254,"line":784},[252,8817,8818],{"class":715},"    Name               ",[252,8820,761],{"class":323},[252,8822,8823],{"class":437}," \u002F\u002F template name, for render errors\n",[252,8825,8826,8828,8830,8832],{"class":254,"line":789},[252,8827,2515],{"class":715},[252,8829,317],{"class":262},[252,8831,2520],{"class":715},[252,8833,719],{"class":323},[252,8835,8836,8839],{"class":254,"line":801},[252,8837,8838],{"class":715},"    Header             ",[252,8840,8841],{"class":266},"Header\n",[252,8843,8844,8847,8849],{"class":254,"line":812},[252,8845,8846],{"class":715},"    Sections           ",[252,8848,745],{"class":262},[252,8850,8757],{"class":266},[252,8852,8853,8856],{"class":254,"line":823},[252,8854,8855],{"class":715},"    Footer             ",[252,8857,8858],{"class":266},"Footer\n",[252,8860,8861,8864,8866,8868],{"class":254,"line":834},[252,8862,8863],{"class":715},"    Theme              ",[252,8865,211],{"class":266},[252,8867,625],{"class":262},[252,8869,1350],{"class":266},[252,8871,8872,8875],{"class":254,"line":846},[252,8873,8874],{"class":715},"    AllowRelativeURLs  ",[252,8876,4135],{"class":323},[252,8878,8879],{"class":254,"line":1028},[252,8880,781],{"class":262},[569,8882,8883,8891],{},[572,8884,8885],{},[575,8886,8887,8889],{},[578,8888,580],{},[578,8890,583],{},[585,8892,8893,8905,8915],{},[575,8894,8895,8900],{},[590,8896,8897],{},[201,8898,8899],{},"Arrange",[590,8901,8902,8903,625],{},"Lays modules into sections with their padding. Spacing is decided only here, in three passes: class defaults, then the pair rules, then first-module, last-module and header rules. It doesn't modify ",[201,8904,8735],{},[575,8906,8907,8912],{},[590,8908,8909],{},[201,8910,8911],{},"Section",[590,8913,8914],{},"One module with the padding (px) above and below it.",[575,8916,8917,8921],{},[590,8918,8919],{},[201,8920,3411],{},[590,8922,8923],{},"A laid-out email, ready for the HTML and text renderers.",[243,8925,8927],{"className":245,"code":8926,"language":247,"meta":248,"style":248},"type Header struct {\n    Variant     HeaderVariant\n    Banner      string \u002F\u002F H2 banner text\n    Masthead    string \u002F\u002F H3 masthead text\n    LogoURL     string\n    LogoDarkURL string\n}\n\ntype Footer struct {\n    Variant  FooterVariant\n    Nav      []ir.Action \u002F\u002F F1 nav row; empty = no row\n    Lead     ir.Inline   \u002F\u002F F1 reason · F2 note · F3 opt-out · F3·i internal line\n    Links    ir.Inline   \u002F\u002F F1 unsubscribe and preferences links\n    Service  ir.Inline   \u002F\u002F F2 service line; empty = dropped\n    Address  ir.Text     \u002F\u002F \"{brand} · {address}\"\n    TextURLs []TextURL   \u002F\u002F plain-text footer URL lines, in order\n}\n\ntype TextURL struct {\n    Label  string\n    URL    ir.Text\n    Source string \u002F\u002F the copy it was written in, naming render errors\n}\n\ntype HeaderVariant uint8\n\nconst (\n    H1 HeaderVariant = iota + 1 \u002F\u002F logo\n    H2                          \u002F\u002F logo with the internal banner\n    H3                          \u002F\u002F newsletter masthead\n)\n\ntype FooterVariant uint8\n\nconst (\n    F1         FooterVariant = iota + 1 \u002F\u002F marketing: nav, reason, unsubscribe and preferences\n    F2                                  \u002F\u002F service: note, \"service email about …\", address\n    F3                                  \u002F\u002F outreach: address and opt-out\n    F3Internal                          \u002F\u002F internal: internal line and address\n)\n",[201,8928,8929,8939,8946,8956,8966,8973,8980,8984,8988,8999,9006,9022,9036,9050,9064,9078,9091,9095,9099,9110,9116,9127,9137,9141,9145,9153,9157,9163,9180,9188,9196,9200,9204,9212,9216,9222,9239,9247,9255,9263],{"__ignoreMap":248},[252,8930,8931,8933,8935,8937],{"class":254,"line":255},[252,8932,419],{"class":262},[252,8934,2693],{"class":266},[252,8936,707],{"class":262},[252,8938,710],{"class":262},[252,8940,8941,8944],{"class":254,"line":360},[252,8942,8943],{"class":715},"    Variant     ",[252,8945,2105],{"class":266},[252,8947,8948,8951,8953],{"class":254,"line":409},[252,8949,8950],{"class":715},"    Banner      ",[252,8952,761],{"class":323},[252,8954,8955],{"class":437}," \u002F\u002F H2 banner text\n",[252,8957,8958,8961,8963],{"class":254,"line":416},[252,8959,8960],{"class":715},"    Masthead    ",[252,8962,761],{"class":323},[252,8964,8965],{"class":437}," \u002F\u002F H3 masthead text\n",[252,8967,8968,8971],{"class":254,"line":444},[252,8969,8970],{"class":715},"    LogoURL     ",[252,8972,719],{"class":323},[252,8974,8975,8978],{"class":254,"line":449},[252,8976,8977],{"class":715},"    LogoDarkURL ",[252,8979,719],{"class":323},[252,8981,8982],{"class":254,"line":515},[252,8983,781],{"class":262},[252,8985,8986],{"class":254,"line":543},[252,8987,413],{"emptyLinePlaceholder":412},[252,8989,8990,8992,8995,8997],{"class":254,"line":784},[252,8991,419],{"class":262},[252,8993,8994],{"class":266}," Footer",[252,8996,707],{"class":262},[252,8998,710],{"class":262},[252,9000,9001,9004],{"class":254,"line":789},[252,9002,9003],{"class":715},"    Variant  ",[252,9005,1946],{"class":266},[252,9007,9008,9011,9013,9015,9017,9019],{"class":254,"line":801},[252,9009,9010],{"class":715},"    Nav      ",[252,9012,745],{"class":262},[252,9014,219],{"class":266},[252,9016,625],{"class":262},[252,9018,7639],{"class":266},[252,9020,9021],{"class":437}," \u002F\u002F F1 nav row; empty = no row\n",[252,9023,9024,9027,9029,9031,9033],{"class":254,"line":812},[252,9025,9026],{"class":715},"    Lead     ",[252,9028,219],{"class":266},[252,9030,625],{"class":262},[252,9032,5911],{"class":266},[252,9034,9035],{"class":437},"   \u002F\u002F F1 reason · F2 note · F3 opt-out · F3·i internal line\n",[252,9037,9038,9041,9043,9045,9047],{"class":254,"line":823},[252,9039,9040],{"class":715},"    Links    ",[252,9042,219],{"class":266},[252,9044,625],{"class":262},[252,9046,5911],{"class":266},[252,9048,9049],{"class":437},"   \u002F\u002F F1 unsubscribe and preferences links\n",[252,9051,9052,9055,9057,9059,9061],{"class":254,"line":834},[252,9053,9054],{"class":715},"    Service  ",[252,9056,219],{"class":266},[252,9058,625],{"class":262},[252,9060,5911],{"class":266},[252,9062,9063],{"class":437},"   \u002F\u002F F2 service line; empty = dropped\n",[252,9065,9066,9069,9071,9073,9075],{"class":254,"line":846},[252,9067,9068],{"class":715},"    Address  ",[252,9070,219],{"class":266},[252,9072,625],{"class":262},[252,9074,3482],{"class":266},[252,9076,9077],{"class":437},"     \u002F\u002F \"{brand} · {address}\"\n",[252,9079,9080,9083,9085,9088],{"class":254,"line":1028},[252,9081,9082],{"class":715},"    TextURLs ",[252,9084,745],{"class":262},[252,9086,9087],{"class":266},"TextURL",[252,9089,9090],{"class":437},"   \u002F\u002F plain-text footer URL lines, in order\n",[252,9092,9093],{"class":254,"line":1039},[252,9094,781],{"class":262},[252,9096,9097],{"class":254,"line":1044},[252,9098,413],{"emptyLinePlaceholder":412},[252,9100,9101,9103,9106,9108],{"class":254,"line":1049},[252,9102,419],{"class":262},[252,9104,9105],{"class":266}," TextURL",[252,9107,707],{"class":262},[252,9109,710],{"class":262},[252,9111,9112,9114],{"class":254,"line":1061},[252,9113,4992],{"class":715},[252,9115,719],{"class":323},[252,9117,9118,9121,9123,9125],{"class":254,"line":1069},[252,9119,9120],{"class":715},"    URL    ",[252,9122,219],{"class":266},[252,9124,625],{"class":262},[252,9126,6365],{"class":266},[252,9128,9129,9132,9134],{"class":254,"line":1840},[252,9130,9131],{"class":715},"    Source ",[252,9133,761],{"class":323},[252,9135,9136],{"class":437}," \u002F\u002F the copy it was written in, naming render errors\n",[252,9138,9139],{"class":254,"line":1851},[252,9140,781],{"class":262},[252,9142,9143],{"class":254,"line":1862},[252,9144,413],{"emptyLinePlaceholder":412},[252,9146,9147,9149,9151],{"class":254,"line":1873},[252,9148,419],{"class":262},[252,9150,2095],{"class":266},[252,9152,6641],{"class":323},[252,9154,9155],{"class":254,"line":1884},[252,9156,413],{"emptyLinePlaceholder":412},[252,9158,9159,9161],{"class":254,"line":1895},[252,9160,2129],{"class":262},[252,9162,2132],{"class":262},[252,9164,9165,9167,9169,9171,9173,9175,9177],{"class":254,"line":1909},[252,9166,2137],{"class":715},[252,9168,1690],{"class":266},[252,9170,1342],{"class":262},[252,9172,6664],{"class":262},[252,9174,6667],{"class":262},[252,9176,7962],{"class":6670},[252,9178,9179],{"class":437}," \u002F\u002F logo\n",[252,9181,9182,9185],{"class":254,"line":1914},[252,9183,9184],{"class":715},"    H2                          ",[252,9186,9187],{"class":437},"\u002F\u002F logo with the internal banner\n",[252,9189,9190,9193],{"class":254,"line":1919},[252,9191,9192],{"class":715},"    H3                          ",[252,9194,9195],{"class":437},"\u002F\u002F newsletter masthead\n",[252,9197,9198],{"class":254,"line":1931},[252,9199,357],{"class":262},[252,9201,9202],{"class":254,"line":1940},[252,9203,413],{"emptyLinePlaceholder":412},[252,9205,9206,9208,9210],{"class":254,"line":1949},[252,9207,419],{"class":262},[252,9209,2112],{"class":266},[252,9211,6641],{"class":323},[252,9213,9214],{"class":254,"line":1958},[252,9215,413],{"emptyLinePlaceholder":412},[252,9217,9218,9220],{"class":254,"line":1963},[252,9219,2129],{"class":262},[252,9221,2132],{"class":262},[252,9223,9224,9226,9228,9230,9232,9234,9236],{"class":254,"line":1968},[252,9225,2203],{"class":715},[252,9227,1701],{"class":266},[252,9229,1342],{"class":262},[252,9231,6664],{"class":262},[252,9233,6667],{"class":262},[252,9235,7962],{"class":6670},[252,9237,9238],{"class":437}," \u002F\u002F marketing: nav, reason, unsubscribe and preferences\n",[252,9240,9241,9244],{"class":254,"line":1990},[252,9242,9243],{"class":715},"    F2                                  ",[252,9245,9246],{"class":437},"\u002F\u002F service: note, \"service email about …\", address\n",[252,9248,9249,9252],{"class":254,"line":5133},[252,9250,9251],{"class":715},"    F3                                  ",[252,9253,9254],{"class":437},"\u002F\u002F outreach: address and opt-out\n",[252,9256,9257,9260],{"class":254,"line":5150},[252,9258,9259],{"class":715},"    F3Internal                          ",[252,9261,9262],{"class":437},"\u002F\u002F internal: internal line and address\n",[252,9264,9265],{"class":254,"line":5167},[252,9266,357],{"class":262},[197,9268,9269,9271,9272,9275,9276,2075,9278,9280,9281,9284,9285,9288],{},[201,9270,2830],{}," is the evaluated header chrome. ",[201,9273,9274],{},"Footer"," is the footer chrome as compiled copy, evaluated by the renderers against the message ",[201,9277,8517],{},[201,9279,9087],{}," is one plain-text footer line. The root package re-exports the variants as ",[201,9282,9283],{},"lttr.H1","… and ",[201,9286,9287],{},"lttr.F1","….",[243,9290,9292],{"className":245,"code":9291,"language":247,"meta":248,"style":248},"type Rule struct {\n    Prev, Next          Selector\n    PrevBottom, NextTop *int\n    Source              string \u002F\u002F the handoff frame the value comes from, e.g. \"Q2 (D10)\"\n}\n\ntype Selector struct {\n    Class ir.Class\n    Kind  ir.Kind \u002F\u002F empty matches any kind of Class\n}\n",[201,9293,9294,9305,9318,9332,9342,9346,9350,9361,9373,9387],{"__ignoreMap":248},[252,9295,9296,9298,9301,9303],{"class":254,"line":255},[252,9297,419],{"class":262},[252,9299,9300],{"class":266}," Rule",[252,9302,707],{"class":262},[252,9304,710],{"class":262},[252,9306,9307,9310,9312,9315],{"class":254,"line":360},[252,9308,9309],{"class":715},"    Prev",[252,9311,317],{"class":262},[252,9313,9314],{"class":715}," Next          ",[252,9316,9317],{"class":266},"Selector\n",[252,9319,9320,9323,9325,9328,9330],{"class":254,"line":409},[252,9321,9322],{"class":715},"    PrevBottom",[252,9324,317],{"class":262},[252,9326,9327],{"class":715}," NextTop ",[252,9329,460],{"class":262},[252,9331,4946],{"class":323},[252,9333,9334,9337,9339],{"class":254,"line":416},[252,9335,9336],{"class":715},"    Source              ",[252,9338,761],{"class":323},[252,9340,9341],{"class":437}," \u002F\u002F the handoff frame the value comes from, e.g. \"Q2 (D10)\"\n",[252,9343,9344],{"class":254,"line":444},[252,9345,781],{"class":262},[252,9347,9348],{"class":254,"line":449},[252,9349,413],{"emptyLinePlaceholder":412},[252,9351,9352,9354,9357,9359],{"class":254,"line":515},[252,9353,419],{"class":262},[252,9355,9356],{"class":266}," Selector",[252,9358,707],{"class":262},[252,9360,710],{"class":262},[252,9362,9363,9366,9368,9370],{"class":254,"line":543},[252,9364,9365],{"class":715},"    Class ",[252,9367,219],{"class":266},[252,9369,625],{"class":262},[252,9371,9372],{"class":266},"Class\n",[252,9374,9375,9378,9380,9382,9384],{"class":254,"line":784},[252,9376,9377],{"class":715},"    Kind  ",[252,9379,219],{"class":266},[252,9381,625],{"class":262},[252,9383,1762],{"class":266},[252,9385,9386],{"class":437}," \u002F\u002F empty matches any kind of Class\n",[252,9388,9389],{"class":254,"line":789},[252,9390,781],{"class":262},[197,9392,9393,9395,9396,9399],{},[201,9394,7522],{}," overrides the class defaults for one adjacent pair of sections, and ",[201,9397,9398],{},"Selector"," matches a module by class and, optionally, kind. The rule table itself is unexported.",[238,9401,9403],{"id":9402},"import-lttrtheme","Import lttr\u002Ftheme",[243,9405,9407],{"className":245,"code":9406,"language":247,"meta":248,"style":248},"import \"github.com\u002Fsulv-io\u002Flttr\u002Ftheme\"\n",[201,9408,9409],{"__ignoreMap":248},[252,9410,9411,9413,9415,9418],{"class":254,"line":255},[252,9412,259],{"class":258},[252,9414,263],{"class":262},[252,9416,9417],{"class":266},"github.com\u002Fsulv-io\u002Flttr\u002Ftheme",[252,9419,270],{"class":262},[197,9421,9422,9423,625],{},"The brand values a renderer draws with. A leaf package: it imports only the standard library. See ",[862,9424,79],{"href":80},[243,9426,9428],{"className":245,"code":9427,"language":247,"meta":248,"style":248},"type Theme struct {\n    Light Light\n    Dark  Dark\n    Fonts Fonts\n    Brand Brand\n}\n\nfunc (t Theme) Validate() error\n\ntype Color string\nfunc (c Color) Valid() bool\n\ntype Fonts struct {\n    Serif, Sans, Mono string\n}\n\ntype Brand struct {\n    Name     string \u002F\u002F header text, logo alt and the default sign-off\n    Logo     string \u002F\u002F file name under Config.AssetBase, e.g. \"logo.png\" (72×72, shown at LogoSize)\n    LogoDark string \u002F\u002F white-chip version for dark mode\n    LogoSize int    \u002F\u002F display size in CSS pixels, 16..96\n}\n",[201,9429,9430,9440,9448,9456,9464,9472,9476,9480,9498,9502,9511,9531,9535,9546,9563,9567,9571,9582,9591,9601,9611,9621],{"__ignoreMap":248},[252,9431,9432,9434,9436,9438],{"class":254,"line":255},[252,9433,419],{"class":262},[252,9435,1339],{"class":266},[252,9437,707],{"class":262},[252,9439,710],{"class":262},[252,9441,9442,9445],{"class":254,"line":360},[252,9443,9444],{"class":715},"    Light ",[252,9446,9447],{"class":266},"Light\n",[252,9449,9450,9453],{"class":254,"line":409},[252,9451,9452],{"class":715},"    Dark  ",[252,9454,9455],{"class":266},"Dark\n",[252,9457,9458,9461],{"class":254,"line":416},[252,9459,9460],{"class":715},"    Fonts ",[252,9462,9463],{"class":266},"Fonts\n",[252,9465,9466,9469],{"class":254,"line":444},[252,9467,9468],{"class":715},"    Brand ",[252,9470,9471],{"class":266},"Brand\n",[252,9473,9474],{"class":254,"line":449},[252,9475,781],{"class":262},[252,9477,9478],{"class":254,"line":515},[252,9479,413],{"emptyLinePlaceholder":412},[252,9481,9482,9484,9486,9488,9490,9492,9494,9496],{"class":254,"line":543},[252,9483,288],{"class":262},[252,9485,454],{"class":262},[252,9487,457],{"class":298},[252,9489,974],{"class":266},[252,9491,338],{"class":262},[252,9493,1516],{"class":291},[252,9495,537],{"class":262},[252,9497,1528],{"class":323},[252,9499,9500],{"class":254,"line":784},[252,9501,413],{"emptyLinePlaceholder":412},[252,9503,9504,9506,9509],{"class":254,"line":789},[252,9505,419],{"class":262},[252,9507,9508],{"class":266}," Color",[252,9510,567],{"class":323},[252,9512,9513,9515,9517,9520,9523,9525,9527,9529],{"class":254,"line":801},[252,9514,288],{"class":262},[252,9516,454],{"class":262},[252,9518,9519],{"class":298},"c ",[252,9521,9522],{"class":266},"Color",[252,9524,338],{"class":262},[252,9526,2423],{"class":291},[252,9528,537],{"class":262},[252,9530,2428],{"class":323},[252,9532,9533],{"class":254,"line":812},[252,9534,413],{"emptyLinePlaceholder":412},[252,9536,9537,9539,9542,9544],{"class":254,"line":823},[252,9538,419],{"class":262},[252,9540,9541],{"class":266}," Fonts",[252,9543,707],{"class":262},[252,9545,710],{"class":262},[252,9547,9548,9551,9553,9556,9558,9561],{"class":254,"line":834},[252,9549,9550],{"class":715},"    Serif",[252,9552,317],{"class":262},[252,9554,9555],{"class":715}," Sans",[252,9557,317],{"class":262},[252,9559,9560],{"class":715}," Mono ",[252,9562,719],{"class":323},[252,9564,9565],{"class":254,"line":846},[252,9566,781],{"class":262},[252,9568,9569],{"class":254,"line":1028},[252,9570,413],{"emptyLinePlaceholder":412},[252,9572,9573,9575,9578,9580],{"class":254,"line":1039},[252,9574,419],{"class":262},[252,9576,9577],{"class":266}," Brand",[252,9579,707],{"class":262},[252,9581,710],{"class":262},[252,9583,9584,9586,9588],{"class":254,"line":1044},[252,9585,716],{"class":715},[252,9587,761],{"class":323},[252,9589,9590],{"class":437}," \u002F\u002F header text, logo alt and the default sign-off\n",[252,9592,9593,9596,9598],{"class":254,"line":1049},[252,9594,9595],{"class":715},"    Logo     ",[252,9597,761],{"class":323},[252,9599,9600],{"class":437}," \u002F\u002F file name under Config.AssetBase, e.g. \"logo.png\" (72×72, shown at LogoSize)\n",[252,9602,9603,9606,9608],{"class":254,"line":1061},[252,9604,9605],{"class":715},"    LogoDark ",[252,9607,761],{"class":323},[252,9609,9610],{"class":437}," \u002F\u002F white-chip version for dark mode\n",[252,9612,9613,9616,9618],{"class":254,"line":1069},[252,9614,9615],{"class":715},"    LogoSize ",[252,9617,3786],{"class":323},[252,9619,9620],{"class":437},"    \u002F\u002F display size in CSS pixels, 16..96\n",[252,9622,9623],{"class":254,"line":1840},[252,9624,781],{"class":262},[569,9626,9627,9635],{},[572,9628,9629],{},[575,9630,9631,9633],{},[578,9632,580],{},[578,9634,583],{},[585,9636,9637,9646,9671,9685,9695],{},[575,9638,9639,9643],{},[590,9640,9641],{},[201,9642,974],{},[590,9644,9645],{},"Everything brand-specific a renderer needs.",[575,9647,9648,9653],{},[590,9649,9650],{},[201,9651,9652],{},"Theme.Validate",[590,9654,9655,9656,9659,9660,4243,9663,9666,9667,9670],{},"Reports every invalid value, one line per problem, or nil: colours must be ",[201,9657,9658],{},"#RRGGBB",", font stacks non-empty and made only of ",[201,9661,9662],{},"[A-Za-z0-9 ,'-]",[201,9664,9665],{},"Brand.Name"," non-empty, logo names plain file names, and ",[201,9668,9669],{},"LogoSize"," 16 to 96.",[575,9672,9673,9677],{},[590,9674,9675],{},[201,9676,9522],{},[590,9678,9679,9680,2075,9682,9684],{},"A hex colour, ",[201,9681,9658],{},[201,9683,2441],{}," checks exactly that.",[575,9686,9687,9692],{},[590,9688,9689],{},[201,9690,9691],{},"Fonts",[590,9693,9694],{},"The three CSS font stacks.",[575,9696,9697,9702],{},[590,9698,9699],{},[201,9700,9701],{},"Brand",[590,9703,9704],{},"The sender's mark.",[243,9706,9708],{"className":245,"code":9707,"language":247,"meta":248,"style":248},"type Light struct {\n    Ink, Body, Secondary, StrongBody Color\n    Action, PillText, Accent         Color\n    Hairline, RowRule, NoticeBorder  Color\n    Ground, Canvas                   Color\n    WarnBg, WarnBorder, WarnText     Color\n    OutOfStock                       Color\n    BannerBg, BannerText             Color\n    Warm, Sea, Map, Sun              Color\n}\n\ntype Dark struct {\n    Canvas, Footer, Hairline     Color\n    Headline, Body               Color\n    Action, PillText             Color\n    CurrentStep, AccentText      Color\n    BannerBg, BannerText         Color\n    Placeholder                  Color\n    WarnBg, WarnBorder, WarnText Color\n    OutOfStock                   Color\n}\n",[201,9709,9710,9721,9744,9761,9778,9790,9807,9814,9826,9848,9852,9856,9867,9883,9895,9906,9918,9929,9936,9951,9958],{"__ignoreMap":248},[252,9711,9712,9714,9717,9719],{"class":254,"line":255},[252,9713,419],{"class":262},[252,9715,9716],{"class":266}," Light",[252,9718,707],{"class":262},[252,9720,710],{"class":262},[252,9722,9723,9726,9728,9731,9733,9736,9738,9741],{"class":254,"line":360},[252,9724,9725],{"class":715},"    Ink",[252,9727,317],{"class":262},[252,9729,9730],{"class":715}," Body",[252,9732,317],{"class":262},[252,9734,9735],{"class":715}," Secondary",[252,9737,317],{"class":262},[252,9739,9740],{"class":715}," StrongBody ",[252,9742,9743],{"class":266},"Color\n",[252,9745,9746,9749,9751,9754,9756,9759],{"class":254,"line":409},[252,9747,9748],{"class":715},"    Action",[252,9750,317],{"class":262},[252,9752,9753],{"class":715}," PillText",[252,9755,317],{"class":262},[252,9757,9758],{"class":715}," Accent         ",[252,9760,9743],{"class":266},[252,9762,9763,9766,9768,9771,9773,9776],{"class":254,"line":416},[252,9764,9765],{"class":715},"    Hairline",[252,9767,317],{"class":262},[252,9769,9770],{"class":715}," RowRule",[252,9772,317],{"class":262},[252,9774,9775],{"class":715}," NoticeBorder  ",[252,9777,9743],{"class":266},[252,9779,9780,9783,9785,9788],{"class":254,"line":444},[252,9781,9782],{"class":715},"    Ground",[252,9784,317],{"class":262},[252,9786,9787],{"class":715}," Canvas                   ",[252,9789,9743],{"class":266},[252,9791,9792,9795,9797,9800,9802,9805],{"class":254,"line":449},[252,9793,9794],{"class":715},"    WarnBg",[252,9796,317],{"class":262},[252,9798,9799],{"class":715}," WarnBorder",[252,9801,317],{"class":262},[252,9803,9804],{"class":715}," WarnText     ",[252,9806,9743],{"class":266},[252,9808,9809,9812],{"class":254,"line":515},[252,9810,9811],{"class":715},"    OutOfStock                       ",[252,9813,9743],{"class":266},[252,9815,9816,9819,9821,9824],{"class":254,"line":543},[252,9817,9818],{"class":715},"    BannerBg",[252,9820,317],{"class":262},[252,9822,9823],{"class":715}," BannerText             ",[252,9825,9743],{"class":266},[252,9827,9828,9831,9833,9836,9838,9841,9843,9846],{"class":254,"line":784},[252,9829,9830],{"class":715},"    Warm",[252,9832,317],{"class":262},[252,9834,9835],{"class":715}," Sea",[252,9837,317],{"class":262},[252,9839,9840],{"class":715}," Map",[252,9842,317],{"class":262},[252,9844,9845],{"class":715}," Sun              ",[252,9847,9743],{"class":266},[252,9849,9850],{"class":254,"line":789},[252,9851,781],{"class":262},[252,9853,9854],{"class":254,"line":801},[252,9855,413],{"emptyLinePlaceholder":412},[252,9857,9858,9860,9863,9865],{"class":254,"line":812},[252,9859,419],{"class":262},[252,9861,9862],{"class":266}," Dark",[252,9864,707],{"class":262},[252,9866,710],{"class":262},[252,9868,9869,9872,9874,9876,9878,9881],{"class":254,"line":823},[252,9870,9871],{"class":715},"    Canvas",[252,9873,317],{"class":262},[252,9875,8994],{"class":715},[252,9877,317],{"class":262},[252,9879,9880],{"class":715}," Hairline     ",[252,9882,9743],{"class":266},[252,9884,9885,9888,9890,9893],{"class":254,"line":834},[252,9886,9887],{"class":715},"    Headline",[252,9889,317],{"class":262},[252,9891,9892],{"class":715}," Body               ",[252,9894,9743],{"class":266},[252,9896,9897,9899,9901,9904],{"class":254,"line":846},[252,9898,9748],{"class":715},[252,9900,317],{"class":262},[252,9902,9903],{"class":715}," PillText             ",[252,9905,9743],{"class":266},[252,9907,9908,9911,9913,9916],{"class":254,"line":1028},[252,9909,9910],{"class":715},"    CurrentStep",[252,9912,317],{"class":262},[252,9914,9915],{"class":715}," AccentText      ",[252,9917,9743],{"class":266},[252,9919,9920,9922,9924,9927],{"class":254,"line":1039},[252,9921,9818],{"class":715},[252,9923,317],{"class":262},[252,9925,9926],{"class":715}," BannerText         ",[252,9928,9743],{"class":266},[252,9930,9931,9934],{"class":254,"line":1044},[252,9932,9933],{"class":715},"    Placeholder                  ",[252,9935,9743],{"class":266},[252,9937,9938,9940,9942,9944,9946,9949],{"class":254,"line":1049},[252,9939,9794],{"class":715},[252,9941,317],{"class":262},[252,9943,9799],{"class":715},[252,9945,317],{"class":262},[252,9947,9948],{"class":715}," WarnText ",[252,9950,9743],{"class":266},[252,9952,9953,9956],{"class":254,"line":1061},[252,9954,9955],{"class":715},"    OutOfStock                   ",[252,9957,9743],{"class":266},[252,9959,9960],{"class":254,"line":1069},[252,9961,781],{"class":262},[197,9963,9964,9967,9968,9971,9972,9975,9976,8651,9979,9982],{},[201,9965,9966],{},"Light"," is the light-mode palette. ",[201,9969,9970],{},"Dark"," is the dark-mode palette, applied by the head CSS under ",[201,9973,9974],{},"prefers-color-scheme: dark"," and by the Outlook.com ",[201,9977,9978],{},"data-ogsc",[201,9980,9981],{},"data-ogsb"," hooks.",[238,9984,9986],{"id":9985},"import-lttrrenderhtml","Import lttr\u002Frender\u002Fhtml",[243,9988,9990],{"className":245,"code":9989,"language":247,"meta":248,"style":248},"import htmlr \"github.com\u002Fsulv-io\u002Flttr\u002Frender\u002Fhtml\"\n",[201,9991,9992],{"__ignoreMap":248},[252,9993,9994,9996,9999,10001,10004],{"class":254,"line":255},[252,9995,259],{"class":258},[252,9997,9998],{"class":715}," htmlr ",[252,10000,2320],{"class":262},[252,10002,10003],{"class":266},"github.com\u002Fsulv-io\u002Flttr\u002Frender\u002Fhtml",[252,10005,270],{"class":262},[197,10007,10008,10009,10012,10013,8654,10015,10018,10019,625],{},"Renders a laid-out document as Outlook-safe, table-based HTML. The package is named ",[201,10010,10011],{},"html",", so import it under an alias if you also use the standard library's ",[201,10014,10011],{},[201,10016,10017],{},"html\u002Ftemplate",". See ",[862,10020,94],{"href":95},[243,10022,10024],{"className":245,"code":10023,"language":247,"meta":248,"style":248},"func Render(doc layout.Document, env ir.Env) (string, error)\nfunc CheckURL(raw string, allowRelative bool) (template.URL, error)\n\ntype Pill struct {\n    Href       template.URL\n    Label      string\n    Fill, Text theme.Color\n    Width      int \u002F\u002F estimated width in px; zero means computed from Label\n}\n\ntype Style struct{ \u002F* unexported *\u002F }\nfunc (s Style) CSS() template.CSS\n",[201,10025,10026,10067,10105,10109,10120,10132,10139,10155,10165,10169,10173,10186],{"__ignoreMap":248},[252,10027,10028,10030,10032,10034,10037,10039,10041,10043,10045,10048,10051,10053,10055,10057,10059,10061,10063,10065],{"class":254,"line":255},[252,10029,288],{"class":262},[252,10031,472],{"class":291},[252,10033,475],{"class":262},[252,10035,10036],{"class":298},"doc",[252,10038,2100],{"class":266},[252,10040,625],{"class":262},[252,10042,3411],{"class":266},[252,10044,317],{"class":262},[252,10046,10047],{"class":298}," env",[252,10049,10050],{"class":266}," ir",[252,10052,625],{"class":262},[252,10054,8517],{"class":266},[252,10056,338],{"class":262},[252,10058,454],{"class":262},[252,10060,761],{"class":323},[252,10062,317],{"class":262},[252,10064,354],{"class":323},[252,10066,357],{"class":262},[252,10068,10069,10071,10074,10076,10079,10081,10083,10086,10088,10090,10092,10095,10097,10099,10101,10103],{"class":254,"line":360},[252,10070,288],{"class":262},[252,10072,10073],{"class":291}," CheckURL",[252,10075,475],{"class":262},[252,10077,10078],{"class":298},"raw",[252,10080,324],{"class":323},[252,10082,317],{"class":262},[252,10084,10085],{"class":298}," allowRelative",[252,10087,1474],{"class":323},[252,10089,338],{"class":262},[252,10091,454],{"class":262},[252,10093,10094],{"class":266},"template",[252,10096,625],{"class":262},[252,10098,2078],{"class":266},[252,10100,317],{"class":262},[252,10102,354],{"class":323},[252,10104,357],{"class":262},[252,10106,10107],{"class":254,"line":409},[252,10108,413],{"emptyLinePlaceholder":412},[252,10110,10111,10113,10116,10118],{"class":254,"line":416},[252,10112,419],{"class":262},[252,10114,10115],{"class":266}," Pill",[252,10117,707],{"class":262},[252,10119,710],{"class":262},[252,10121,10122,10125,10127,10129],{"class":254,"line":444},[252,10123,10124],{"class":715},"    Href       ",[252,10126,10094],{"class":266},[252,10128,625],{"class":262},[252,10130,10131],{"class":266},"URL\n",[252,10133,10134,10137],{"class":254,"line":449},[252,10135,10136],{"class":715},"    Label      ",[252,10138,719],{"class":323},[252,10140,10141,10144,10146,10149,10151,10153],{"class":254,"line":515},[252,10142,10143],{"class":715},"    Fill",[252,10145,317],{"class":262},[252,10147,10148],{"class":715}," Text ",[252,10150,211],{"class":266},[252,10152,625],{"class":262},[252,10154,9743],{"class":266},[252,10156,10157,10160,10162],{"class":254,"line":543},[252,10158,10159],{"class":715},"    Width      ",[252,10161,3786],{"class":323},[252,10163,10164],{"class":437}," \u002F\u002F estimated width in px; zero means computed from Label\n",[252,10166,10167],{"class":254,"line":784},[252,10168,781],{"class":262},[252,10170,10171],{"class":254,"line":789},[252,10172,413],{"emptyLinePlaceholder":412},[252,10174,10175,10177,10180,10182,10184],{"class":254,"line":801},[252,10176,419],{"class":262},[252,10178,10179],{"class":266}," Style",[252,10181,434],{"class":262},[252,10183,438],{"class":437},[252,10185,441],{"class":262},[252,10187,10188,10190,10192,10194,10197,10199,10202,10204,10207,10209],{"class":254,"line":812},[252,10189,288],{"class":262},[252,10191,454],{"class":262},[252,10193,2416],{"class":298},[252,10195,10196],{"class":266},"Style",[252,10198,338],{"class":262},[252,10200,10201],{"class":291}," CSS",[252,10203,537],{"class":262},[252,10205,10206],{"class":266}," template",[252,10208,625],{"class":262},[252,10210,10211],{"class":266},"CSS\n",[569,10213,10214,10222],{},[572,10215,10216],{},[575,10217,10218,10220],{},[578,10219,580],{},[578,10221,583],{},[585,10223,10224,10233,10253,10268,10277],{},[575,10225,10226,10230],{},[590,10227,10228],{},[201,10229,2822],{},[590,10231,10232],{},"Renders a complete HTML email. It returns the HTML or an error, never both.",[575,10234,10235,10240],{},[590,10236,10237],{},[201,10238,10239],{},"CheckURL",[590,10241,10242,10243,10246,10247,10249,10250,625],{},"Vets a URL before it may appear in an href or src. Allowed schemes are https, http, mailto and tel, and relative URLs only with ",[201,10244,10245],{},"allowRelative",". Whitespace or a control character anywhere is an error, and a bad URL is always an error, never a substituted ",[201,10248,8657],{},". It returns the URL unchanged as ",[201,10251,10252],{},"template.URL",[575,10254,10255,10260],{},[590,10256,10257],{},[201,10258,10259],{},"Pill",[590,10261,10262,10263,10265,10266,625],{},"A call-to-action button as Outlook draws it: a VML rounded rectangle. ",[201,10264,7595],{}," must already have passed ",[201,10267,10239],{},[575,10269,10270,10274],{},[590,10271,10272],{},[201,10273,10196],{},[590,10275,10276],{},"An inline style built only from package constants and validated theme colours. Its builders are unexported, so no caller can put arbitrary text into a style attribute.",[575,10278,10279,10284],{},[590,10280,10281],{},[201,10282,10283],{},"Style.CSS",[590,10285,10286,10287,10290],{},"The declarations as ",[201,10288,10289],{},"prop:value;prop:value",", typed for html\u002Ftemplate.",[238,10292,10294],{"id":10293},"import-lttrrendertext","Import lttr\u002Frender\u002Ftext",[243,10296,10298],{"className":245,"code":10297,"language":247,"meta":248,"style":248},"import \"github.com\u002Fsulv-io\u002Flttr\u002Frender\u002Ftext\"\n",[201,10299,10300],{"__ignoreMap":248},[252,10301,10302,10304,10306,10309],{"class":254,"line":255},[252,10303,259],{"class":258},[252,10305,263],{"class":262},[252,10307,10308],{"class":266},"github.com\u002Fsulv-io\u002Flttr\u002Frender\u002Ftext",[252,10310,270],{"class":262},[243,10312,10314],{"className":245,"code":10313,"language":247,"meta":248,"style":248},"func Render(doc layout.Document, env ir.Env) (string, error)\n",[201,10315,10316],{"__ignoreMap":248},[252,10317,10318,10320,10322,10324,10326,10328,10330,10332,10334,10336,10338,10340,10342,10344,10346,10348,10350,10352],{"class":254,"line":255},[252,10319,288],{"class":262},[252,10321,472],{"class":291},[252,10323,475],{"class":262},[252,10325,10036],{"class":298},[252,10327,2100],{"class":266},[252,10329,625],{"class":262},[252,10331,3411],{"class":266},[252,10333,317],{"class":262},[252,10335,10047],{"class":298},[252,10337,10050],{"class":266},[252,10339,625],{"class":262},[252,10341,8517],{"class":266},[252,10343,338],{"class":262},[252,10345,454],{"class":262},[252,10347,761],{"class":323},[252,10349,317],{"class":262},[252,10351,354],{"class":323},[252,10353,357],{"class":262},[197,10355,10356,10357,10360,10361,625],{},"Renders the plain-text part from the laid-out document, working from the typed IR rather than the HTML: blocks separated by one blank line, 70-column wrapping, uppercase eyebrows, ",[201,10358,10359],{},"Label:"," plus URL for actions, and dot-leader tables. It returns the text or an error, never both. See ",[862,10362,99],{"href":100},[238,10364,10366],{"id":10365},"import-lttrmapbox","Import lttr\u002Fmapbox",[243,10368,10370],{"className":245,"code":10369,"language":247,"meta":248,"style":248},"import \"github.com\u002Fsulv-io\u002Flttr\u002Fmapbox\"\n",[201,10371,10372],{"__ignoreMap":248},[252,10373,10374,10376,10378,10381],{"class":254,"line":255},[252,10375,259],{"class":258},[252,10377,263],{"class":262},[252,10379,10380],{"class":266},"github.com\u002Fsulv-io\u002Flttr\u002Fmapbox",[252,10382,270],{"class":262},[197,10384,10385,10386,10388,10389,10018,10392,625],{},"Builds Mapbox Static Images API URLs for the ",[201,10387,5196],{}," band and fetches the image. The API URL carries your access token, so it must never go into an email. Fetch the image at send time, upload it to your CDN, and put only the CDN URL in ",[201,10390,10391],{},"::map{src}",[862,10393,125],{"href":126},[243,10395,10397],{"className":245,"code":10396,"language":247,"meta":248,"style":248},"type Static struct {\n    Token   string\n    Style   string \u002F\u002F owner\u002Fid map style\n    Width   int    \u002F\u002F default 600\n    Height  int    \u002F\u002F default 240\n    Padding int    \u002F\u002F default 80\n\n    RouteColor   string \u002F\u002F route line stroke; required, six hex digits without '#'\n    PickupColor  string \u002F\u002F pickup pin; required\n    DropoffColor string \u002F\u002F drop-off pin; required\n}\n\nfunc (s Static) URL(pickup, dropoff Point, route []Point) (string, error)\nfunc (s Static) Fetch(ctx context.Context, c *http.Client, pickup, dropoff Point, route []Point) ([]byte, error)\n\ntype Point struct {\n    Lng, Lat float64\n}\n",[201,10398,10399,10410,10417,10427,10437,10447,10457,10461,10471,10481,10491,10495,10499,10550,10621,10625,10635,10648],{"__ignoreMap":248},[252,10400,10401,10403,10406,10408],{"class":254,"line":255},[252,10402,419],{"class":262},[252,10404,10405],{"class":266}," Static",[252,10407,707],{"class":262},[252,10409,710],{"class":262},[252,10411,10412,10415],{"class":254,"line":360},[252,10413,10414],{"class":715},"    Token   ",[252,10416,719],{"class":323},[252,10418,10419,10422,10424],{"class":254,"line":409},[252,10420,10421],{"class":715},"    Style   ",[252,10423,761],{"class":323},[252,10425,10426],{"class":437}," \u002F\u002F owner\u002Fid map style\n",[252,10428,10429,10432,10434],{"class":254,"line":416},[252,10430,10431],{"class":715},"    Width   ",[252,10433,3786],{"class":323},[252,10435,10436],{"class":437},"    \u002F\u002F default 600\n",[252,10438,10439,10442,10444],{"class":254,"line":444},[252,10440,10441],{"class":715},"    Height  ",[252,10443,3786],{"class":323},[252,10445,10446],{"class":437},"    \u002F\u002F default 240\n",[252,10448,10449,10452,10454],{"class":254,"line":449},[252,10450,10451],{"class":715},"    Padding ",[252,10453,3786],{"class":323},[252,10455,10456],{"class":437},"    \u002F\u002F default 80\n",[252,10458,10459],{"class":254,"line":515},[252,10460,413],{"emptyLinePlaceholder":412},[252,10462,10463,10466,10468],{"class":254,"line":543},[252,10464,10465],{"class":715},"    RouteColor   ",[252,10467,761],{"class":323},[252,10469,10470],{"class":437}," \u002F\u002F route line stroke; required, six hex digits without '#'\n",[252,10472,10473,10476,10478],{"class":254,"line":784},[252,10474,10475],{"class":715},"    PickupColor  ",[252,10477,761],{"class":323},[252,10479,10480],{"class":437}," \u002F\u002F pickup pin; required\n",[252,10482,10483,10486,10488],{"class":254,"line":789},[252,10484,10485],{"class":715},"    DropoffColor ",[252,10487,761],{"class":323},[252,10489,10490],{"class":437}," \u002F\u002F drop-off pin; required\n",[252,10492,10493],{"class":254,"line":801},[252,10494,781],{"class":262},[252,10496,10497],{"class":254,"line":812},[252,10498,413],{"emptyLinePlaceholder":412},[252,10500,10501,10503,10505,10507,10510,10512,10515,10517,10520,10522,10525,10528,10530,10533,10535,10538,10540,10542,10544,10546,10548],{"class":254,"line":823},[252,10502,288],{"class":262},[252,10504,454],{"class":262},[252,10506,2416],{"class":298},[252,10508,10509],{"class":266},"Static",[252,10511,338],{"class":262},[252,10513,10514],{"class":291}," URL",[252,10516,475],{"class":262},[252,10518,10519],{"class":298},"pickup",[252,10521,317],{"class":262},[252,10523,10524],{"class":298}," dropoff",[252,10526,10527],{"class":266}," Point",[252,10529,317],{"class":262},[252,10531,10532],{"class":298}," route",[252,10534,332],{"class":262},[252,10536,10537],{"class":266},"Point",[252,10539,338],{"class":262},[252,10541,454],{"class":262},[252,10543,761],{"class":323},[252,10545,317],{"class":262},[252,10547,354],{"class":323},[252,10549,357],{"class":262},[252,10551,10552,10554,10556,10558,10560,10562,10565,10567,10569,10571,10573,10575,10577,10580,10582,10585,10587,10590,10592,10595,10597,10599,10601,10603,10605,10607,10609,10611,10613,10615,10617,10619],{"class":254,"line":834},[252,10553,288],{"class":262},[252,10555,454],{"class":262},[252,10557,2416],{"class":298},[252,10559,10509],{"class":266},[252,10561,338],{"class":262},[252,10563,10564],{"class":291}," Fetch",[252,10566,475],{"class":262},[252,10568,2892],{"class":298},[252,10570,2895],{"class":266},[252,10572,625],{"class":262},[252,10574,2900],{"class":266},[252,10576,317],{"class":262},[252,10578,10579],{"class":298}," c",[252,10581,311],{"class":262},[252,10583,10584],{"class":266},"http",[252,10586,625],{"class":262},[252,10588,10589],{"class":266},"Client",[252,10591,317],{"class":262},[252,10593,10594],{"class":298}," pickup",[252,10596,317],{"class":262},[252,10598,10524],{"class":298},[252,10600,10527],{"class":266},[252,10602,317],{"class":262},[252,10604,10532],{"class":298},[252,10606,332],{"class":262},[252,10608,10537],{"class":266},[252,10610,338],{"class":262},[252,10612,2608],{"class":262},[252,10614,335],{"class":323},[252,10616,317],{"class":262},[252,10618,354],{"class":323},[252,10620,357],{"class":262},[252,10622,10623],{"class":254,"line":846},[252,10624,413],{"emptyLinePlaceholder":412},[252,10626,10627,10629,10631,10633],{"class":254,"line":1028},[252,10628,419],{"class":262},[252,10630,10527],{"class":266},[252,10632,707],{"class":262},[252,10634,710],{"class":262},[252,10636,10637,10640,10642,10645],{"class":254,"line":1039},[252,10638,10639],{"class":715},"    Lng",[252,10641,317],{"class":262},[252,10643,10644],{"class":715}," Lat ",[252,10646,10647],{"class":323},"float64\n",[252,10649,10650],{"class":254,"line":1044},[252,10651,781],{"class":262},[569,10653,10654,10662],{},[572,10655,10656],{},[575,10657,10658,10660],{},[578,10659,580],{},[578,10661,583],{},[585,10663,10664,10677,10687,10697],{},[575,10665,10666,10670],{},[590,10667,10668],{},[201,10669,10509],{},[590,10671,10672,10673,10676],{},"Builds Static Images API requests. The three colours are the brand's, so the package has no defaults for them. ",[201,10674,10675],{},"quiet.Mapbox(token, style)"," shows one set up.",[575,10678,10679,10684],{},[590,10680,10681],{},[201,10682,10683],{},"Static.URL",[590,10685,10686],{},"The API URL for a pickup, a drop-off and a route. With an empty route, the line runs straight from pickup to drop-off. No error it returns contains the token.",[575,10688,10689,10694],{},[590,10690,10691],{},[201,10692,10693],{},"Static.Fetch",[590,10695,10696],{},"GETs the image and returns its bytes. A non-200 response is an error naming only the status code, never the URL, and a body over 8 MiB is an error.",[575,10698,10699,10703],{},[590,10700,10701],{},[201,10702,10537],{},[590,10704,10705],{},"A coordinate: longitude, latitude in decimal degrees.",[10707,10708,10709],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":248,"searchDepth":360,"depth":360,"links":10711},[10712,10721,10722,10728,10736,10737,10738,10739,10740],{"id":240,"depth":360,"text":241,"children":10713},[10714,10715,10716,10717,10718,10719,10720],{"id":277,"depth":409,"text":278},{"id":868,"depth":409,"text":869},{"id":1387,"depth":409,"text":1388},{"id":2278,"depth":409,"text":2279},{"id":2449,"depth":409,"text":2450},{"id":2864,"depth":409,"text":2865},{"id":3332,"depth":409,"text":3333},{"id":3362,"depth":360,"text":3363},{"id":4471,"depth":360,"text":4472,"children":10723},[10724,10725,10726,10727],{"id":4496,"depth":409,"text":4497},{"id":4840,"depth":409,"text":4841},{"id":5322,"depth":409,"text":616},{"id":5434,"depth":409,"text":5435},{"id":5791,"depth":360,"text":5792,"children":10729},[10730,10731,10732,10733,10734,10735],{"id":5830,"depth":409,"text":594},{"id":6155,"depth":409,"text":6156},{"id":6315,"depth":409,"text":6316},{"id":6541,"depth":409,"text":48},{"id":7699,"depth":409,"text":7700},{"id":8052,"depth":409,"text":8053},{"id":8696,"depth":360,"text":8697},{"id":9402,"depth":360,"text":9403},{"id":9985,"depth":360,"text":9986},{"id":10293,"depth":360,"text":10294},{"id":10365,"depth":360,"text":10366},"Every exported identifier of lttr and its sub-packages, package by package, with its signature and what it does.","md",null,{},{"icon":185},{"title":182,"description":10741},"lvy_uaFS4cgHV1LD3d3R_XrORDES9ttqcSh4Q-C7sjE",[10749,10751],{"title":171,"path":172,"stem":173,"description":10750,"icon":174,"children":-1},"How a commit on main becomes a lttr version that consumers can resolve, how to rehearse it with a dry run, and the pre-1.0 policy.",{"title":187,"path":188,"stem":189,"description":10752,"icon":190,"children":-1},"The nine Quiet reference emails, rendered live by lttr at build time, with their plain text and Comark source.",1790309828619]