[{"data":1,"prerenderedAt":6096},["ShallowReactive",2],{"navigation_docs":3,"-guides-your-own-family-and-theme":191,"-guides-your-own-family-and-theme-surround":6091},[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":167,"body":193,"description":6084,"extension":6085,"links":6086,"meta":6087,"navigation":6088,"path":168,"seo":6089,"stem":169,"__hash__":6090},"docs\u002F6.guides\u002F2.your-own-family-and-theme.md",{"type":194,"value":195,"toc":6076},"minimark",[196,213,254,259,281,1080,1106,1113,1167,1178,1186,1190,1193,1884,1919,1925,2036,2094,2106,2112,2116,2129,2316,2377,2389,2393,2396,2517,2528,2709,2727,2738,2794,2812,2816,2830,3725,3734,3755,3762,3791,3795,3798,6032,6038,6072],[197,198,199,200,204,205,208,209,212],"p",{},"lttr holds no brand. Your service supplies the colours, fonts and logo (a ",[201,202,203],"code",{},"Theme","), the kinds of email it sends (a ",[201,206,207],{},"Registry"," of families), and the legal addresses its mail is sent from (entities in the ",[201,210,211],{},"Config","). This guide builds all three for a fictional bookshop, Tidewater Books, then writes one template and a test for it.",[197,214,215,216,219,220,225,226,229,230,233,234,233,237,233,240,233,243,246,247,250,251,253],{},"Everything below goes into one ",[201,217,218],{},"main.go"," so you can run it as it stands; the ",[221,222,224],"a",{"href":223},"#run-the-complete-program","complete program"," is at the end. In a real service, split it the way ",[201,227,228],{},"examples\u002Fquiet"," does: ",[201,231,232],{},"theme.go",", ",[201,235,236],{},"families.go",[201,238,239],{},"config.go",[201,241,242],{},"templates\u002F*.md",[201,244,245],{},"templates.go"," and ",[201,248,249],{},"samples.go",". See ",[221,252,162],{"href":163},".",[255,256,258],"h2",{"id":257},"define-the-theme","Define the theme",[197,260,261,262,265,266,246,269,272,273,276,277,280],{},"A ",[201,263,264],{},"lttr.Theme"," has four parts. ",[201,267,268],{},"Light",[201,270,271],{},"Dark"," are the two palettes, ",[201,274,275],{},"Fonts"," holds three CSS font stacks, and ",[201,278,279],{},"Brand"," is the sender's mark:",[282,283,288],"pre",{"className":284,"code":285,"filename":218,"language":286,"meta":287,"style":287},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","var brand = lttr.Theme{\n    Light: theme.Light{\n        Ink: \"#1B1F2A\", Body: \"#4A5060\", Secondary: \"#6A7080\", StrongBody: \"#343A48\",\n        Action: \"#1F3A68\", PillText: \"#FFFFFF\", Accent: \"#A8323A\",\n        Hairline: \"#E2E4EA\", RowRule: \"#ECEEF2\", NoticeBorder: \"#D5D8E0\",\n        Ground: \"#F5F6F8\", Canvas: \"#FFFFFF\",\n        WarnBg: \"#FEF5E0\", WarnBorder: \"#F0AE23\", WarnText: \"#5A3D04\",\n        OutOfStock: \"#9D1411\", BannerBg: \"#F8ECEC\", BannerText: \"#7A2229\",\n        Warm: \"#F4ECE4\", Sea: \"#E4ECF4\", Map: \"#E6EEF4\", Sun: \"#1F3A68\",\n    },\n    Dark: theme.Dark{\n        Canvas: \"#12151C\", Footer: \"#1A1E27\", Hairline: \"#2A2F3A\",\n        Headline: \"#F1F2F5\", Body: \"#A9AEBA\",\n        Action: \"#9DB8E6\", PillText: \"#0E1A30\",\n        CurrentStep: \"#E8878D\", AccentText: \"#F2B3B7\",\n        BannerBg: \"#2A1618\", BannerText: \"#F2B3B7\", Placeholder: \"#1B1F28\",\n        WarnBg: \"#2A2210\", WarnBorder: \"#6B5314\", WarnText: \"#F0D9A8\",\n        OutOfStock: \"#F08A85\",\n    },\n    Fonts: theme.Fonts{\n        Serif: \"Georgia,'Times New Roman',serif\",\n        Sans:  \"Arial,Helvetica,sans-serif\",\n        Mono:  \"'Courier New',Courier,monospace\",\n    },\n    Brand: theme.Brand{Name: \"Tidewater Books\", Logo: \"logo.png\", LogoDark: \"logo-dark.png\", LogoSize: 36},\n}\n","go","",[201,289,290,317,335,399,444,489,519,564,609,667,673,689,734,764,793,824,867,909,925,930,946,963,981,998,1003,1074],{"__ignoreMap":287},[291,292,295,299,303,306,310,312,314],"span",{"class":293,"line":294},"line",1,[291,296,298],{"class":297},"sMK4o","var",[291,300,302],{"class":301},"sTEyZ"," brand ",[291,304,305],{"class":297},"=",[291,307,309],{"class":308},"sBMFI"," lttr",[291,311,253],{"class":297},[291,313,203],{"class":308},[291,315,316],{"class":297},"{\n",[291,318,320,323,326,329,331,333],{"class":293,"line":319},2,[291,321,322],{"class":301},"    Light",[291,324,325],{"class":297},":",[291,327,328],{"class":308}," theme",[291,330,253],{"class":297},[291,332,268],{"class":308},[291,334,316],{"class":297},[291,336,338,341,343,346,350,353,356,359,361,363,366,368,370,373,375,377,380,382,384,387,389,391,394,396],{"class":293,"line":337},3,[291,339,340],{"class":301},"        Ink",[291,342,325],{"class":297},[291,344,345],{"class":297}," \"",[291,347,349],{"class":348},"sfazB","#1B1F2A",[291,351,352],{"class":297},"\"",[291,354,355],{"class":297},",",[291,357,358],{"class":301}," Body",[291,360,325],{"class":297},[291,362,345],{"class":297},[291,364,365],{"class":348},"#4A5060",[291,367,352],{"class":297},[291,369,355],{"class":297},[291,371,372],{"class":301}," Secondary",[291,374,325],{"class":297},[291,376,345],{"class":297},[291,378,379],{"class":348},"#6A7080",[291,381,352],{"class":297},[291,383,355],{"class":297},[291,385,386],{"class":301}," StrongBody",[291,388,325],{"class":297},[291,390,345],{"class":297},[291,392,393],{"class":348},"#343A48",[291,395,352],{"class":297},[291,397,398],{"class":297},",\n",[291,400,402,405,407,409,412,414,416,419,421,423,426,428,430,433,435,437,440,442],{"class":293,"line":401},4,[291,403,404],{"class":301},"        Action",[291,406,325],{"class":297},[291,408,345],{"class":297},[291,410,411],{"class":348},"#1F3A68",[291,413,352],{"class":297},[291,415,355],{"class":297},[291,417,418],{"class":301}," PillText",[291,420,325],{"class":297},[291,422,345],{"class":297},[291,424,425],{"class":348},"#FFFFFF",[291,427,352],{"class":297},[291,429,355],{"class":297},[291,431,432],{"class":301}," Accent",[291,434,325],{"class":297},[291,436,345],{"class":297},[291,438,439],{"class":348},"#A8323A",[291,441,352],{"class":297},[291,443,398],{"class":297},[291,445,447,450,452,454,457,459,461,464,466,468,471,473,475,478,480,482,485,487],{"class":293,"line":446},5,[291,448,449],{"class":301},"        Hairline",[291,451,325],{"class":297},[291,453,345],{"class":297},[291,455,456],{"class":348},"#E2E4EA",[291,458,352],{"class":297},[291,460,355],{"class":297},[291,462,463],{"class":301}," RowRule",[291,465,325],{"class":297},[291,467,345],{"class":297},[291,469,470],{"class":348},"#ECEEF2",[291,472,352],{"class":297},[291,474,355],{"class":297},[291,476,477],{"class":301}," NoticeBorder",[291,479,325],{"class":297},[291,481,345],{"class":297},[291,483,484],{"class":348},"#D5D8E0",[291,486,352],{"class":297},[291,488,398],{"class":297},[291,490,492,495,497,499,502,504,506,509,511,513,515,517],{"class":293,"line":491},6,[291,493,494],{"class":301},"        Ground",[291,496,325],{"class":297},[291,498,345],{"class":297},[291,500,501],{"class":348},"#F5F6F8",[291,503,352],{"class":297},[291,505,355],{"class":297},[291,507,508],{"class":301}," Canvas",[291,510,325],{"class":297},[291,512,345],{"class":297},[291,514,425],{"class":348},[291,516,352],{"class":297},[291,518,398],{"class":297},[291,520,522,525,527,529,532,534,536,539,541,543,546,548,550,553,555,557,560,562],{"class":293,"line":521},7,[291,523,524],{"class":301},"        WarnBg",[291,526,325],{"class":297},[291,528,345],{"class":297},[291,530,531],{"class":348},"#FEF5E0",[291,533,352],{"class":297},[291,535,355],{"class":297},[291,537,538],{"class":301}," WarnBorder",[291,540,325],{"class":297},[291,542,345],{"class":297},[291,544,545],{"class":348},"#F0AE23",[291,547,352],{"class":297},[291,549,355],{"class":297},[291,551,552],{"class":301}," WarnText",[291,554,325],{"class":297},[291,556,345],{"class":297},[291,558,559],{"class":348},"#5A3D04",[291,561,352],{"class":297},[291,563,398],{"class":297},[291,565,567,570,572,574,577,579,581,584,586,588,591,593,595,598,600,602,605,607],{"class":293,"line":566},8,[291,568,569],{"class":301},"        OutOfStock",[291,571,325],{"class":297},[291,573,345],{"class":297},[291,575,576],{"class":348},"#9D1411",[291,578,352],{"class":297},[291,580,355],{"class":297},[291,582,583],{"class":301}," BannerBg",[291,585,325],{"class":297},[291,587,345],{"class":297},[291,589,590],{"class":348},"#F8ECEC",[291,592,352],{"class":297},[291,594,355],{"class":297},[291,596,597],{"class":301}," BannerText",[291,599,325],{"class":297},[291,601,345],{"class":297},[291,603,604],{"class":348},"#7A2229",[291,606,352],{"class":297},[291,608,398],{"class":297},[291,610,612,615,617,619,622,624,626,629,631,633,636,638,640,643,645,647,650,652,654,657,659,661,663,665],{"class":293,"line":611},9,[291,613,614],{"class":301},"        Warm",[291,616,325],{"class":297},[291,618,345],{"class":297},[291,620,621],{"class":348},"#F4ECE4",[291,623,352],{"class":297},[291,625,355],{"class":297},[291,627,628],{"class":301}," Sea",[291,630,325],{"class":297},[291,632,345],{"class":297},[291,634,635],{"class":348},"#E4ECF4",[291,637,352],{"class":297},[291,639,355],{"class":297},[291,641,642],{"class":301}," Map",[291,644,325],{"class":297},[291,646,345],{"class":297},[291,648,649],{"class":348},"#E6EEF4",[291,651,352],{"class":297},[291,653,355],{"class":297},[291,655,656],{"class":301}," Sun",[291,658,325],{"class":297},[291,660,345],{"class":297},[291,662,411],{"class":348},[291,664,352],{"class":297},[291,666,398],{"class":297},[291,668,670],{"class":293,"line":669},10,[291,671,672],{"class":297},"    },\n",[291,674,676,679,681,683,685,687],{"class":293,"line":675},11,[291,677,678],{"class":301},"    Dark",[291,680,325],{"class":297},[291,682,328],{"class":308},[291,684,253],{"class":297},[291,686,271],{"class":308},[291,688,316],{"class":297},[291,690,692,695,697,699,702,704,706,709,711,713,716,718,720,723,725,727,730,732],{"class":293,"line":691},12,[291,693,694],{"class":301},"        Canvas",[291,696,325],{"class":297},[291,698,345],{"class":297},[291,700,701],{"class":348},"#12151C",[291,703,352],{"class":297},[291,705,355],{"class":297},[291,707,708],{"class":301}," Footer",[291,710,325],{"class":297},[291,712,345],{"class":297},[291,714,715],{"class":348},"#1A1E27",[291,717,352],{"class":297},[291,719,355],{"class":297},[291,721,722],{"class":301}," Hairline",[291,724,325],{"class":297},[291,726,345],{"class":297},[291,728,729],{"class":348},"#2A2F3A",[291,731,352],{"class":297},[291,733,398],{"class":297},[291,735,737,740,742,744,747,749,751,753,755,757,760,762],{"class":293,"line":736},13,[291,738,739],{"class":301},"        Headline",[291,741,325],{"class":297},[291,743,345],{"class":297},[291,745,746],{"class":348},"#F1F2F5",[291,748,352],{"class":297},[291,750,355],{"class":297},[291,752,358],{"class":301},[291,754,325],{"class":297},[291,756,345],{"class":297},[291,758,759],{"class":348},"#A9AEBA",[291,761,352],{"class":297},[291,763,398],{"class":297},[291,765,767,769,771,773,776,778,780,782,784,786,789,791],{"class":293,"line":766},14,[291,768,404],{"class":301},[291,770,325],{"class":297},[291,772,345],{"class":297},[291,774,775],{"class":348},"#9DB8E6",[291,777,352],{"class":297},[291,779,355],{"class":297},[291,781,418],{"class":301},[291,783,325],{"class":297},[291,785,345],{"class":297},[291,787,788],{"class":348},"#0E1A30",[291,790,352],{"class":297},[291,792,398],{"class":297},[291,794,796,799,801,803,806,808,810,813,815,817,820,822],{"class":293,"line":795},15,[291,797,798],{"class":301},"        CurrentStep",[291,800,325],{"class":297},[291,802,345],{"class":297},[291,804,805],{"class":348},"#E8878D",[291,807,352],{"class":297},[291,809,355],{"class":297},[291,811,812],{"class":301}," AccentText",[291,814,325],{"class":297},[291,816,345],{"class":297},[291,818,819],{"class":348},"#F2B3B7",[291,821,352],{"class":297},[291,823,398],{"class":297},[291,825,827,830,832,834,837,839,841,843,845,847,849,851,853,856,858,860,863,865],{"class":293,"line":826},16,[291,828,829],{"class":301},"        BannerBg",[291,831,325],{"class":297},[291,833,345],{"class":297},[291,835,836],{"class":348},"#2A1618",[291,838,352],{"class":297},[291,840,355],{"class":297},[291,842,597],{"class":301},[291,844,325],{"class":297},[291,846,345],{"class":297},[291,848,819],{"class":348},[291,850,352],{"class":297},[291,852,355],{"class":297},[291,854,855],{"class":301}," Placeholder",[291,857,325],{"class":297},[291,859,345],{"class":297},[291,861,862],{"class":348},"#1B1F28",[291,864,352],{"class":297},[291,866,398],{"class":297},[291,868,870,872,874,876,879,881,883,885,887,889,892,894,896,898,900,902,905,907],{"class":293,"line":869},17,[291,871,524],{"class":301},[291,873,325],{"class":297},[291,875,345],{"class":297},[291,877,878],{"class":348},"#2A2210",[291,880,352],{"class":297},[291,882,355],{"class":297},[291,884,538],{"class":301},[291,886,325],{"class":297},[291,888,345],{"class":297},[291,890,891],{"class":348},"#6B5314",[291,893,352],{"class":297},[291,895,355],{"class":297},[291,897,552],{"class":301},[291,899,325],{"class":297},[291,901,345],{"class":297},[291,903,904],{"class":348},"#F0D9A8",[291,906,352],{"class":297},[291,908,398],{"class":297},[291,910,912,914,916,918,921,923],{"class":293,"line":911},18,[291,913,569],{"class":301},[291,915,325],{"class":297},[291,917,345],{"class":297},[291,919,920],{"class":348},"#F08A85",[291,922,352],{"class":297},[291,924,398],{"class":297},[291,926,928],{"class":293,"line":927},19,[291,929,672],{"class":297},[291,931,933,936,938,940,942,944],{"class":293,"line":932},20,[291,934,935],{"class":301},"    Fonts",[291,937,325],{"class":297},[291,939,328],{"class":308},[291,941,253],{"class":297},[291,943,275],{"class":308},[291,945,316],{"class":297},[291,947,949,952,954,956,959,961],{"class":293,"line":948},21,[291,950,951],{"class":301},"        Serif",[291,953,325],{"class":297},[291,955,345],{"class":297},[291,957,958],{"class":348},"Georgia,'Times New Roman',serif",[291,960,352],{"class":297},[291,962,398],{"class":297},[291,964,966,969,971,974,977,979],{"class":293,"line":965},22,[291,967,968],{"class":301},"        Sans",[291,970,325],{"class":297},[291,972,973],{"class":297},"  \"",[291,975,976],{"class":348},"Arial,Helvetica,sans-serif",[291,978,352],{"class":297},[291,980,398],{"class":297},[291,982,984,987,989,991,994,996],{"class":293,"line":983},23,[291,985,986],{"class":301},"        Mono",[291,988,325],{"class":297},[291,990,973],{"class":297},[291,992,993],{"class":348},"'Courier New',Courier,monospace",[291,995,352],{"class":297},[291,997,398],{"class":297},[291,999,1001],{"class":293,"line":1000},24,[291,1002,672],{"class":297},[291,1004,1006,1009,1011,1013,1015,1017,1020,1023,1025,1027,1030,1032,1034,1037,1039,1041,1044,1046,1048,1051,1053,1055,1058,1060,1062,1065,1067,1071],{"class":293,"line":1005},25,[291,1007,1008],{"class":301},"    Brand",[291,1010,325],{"class":297},[291,1012,328],{"class":308},[291,1014,253],{"class":297},[291,1016,279],{"class":308},[291,1018,1019],{"class":297},"{",[291,1021,1022],{"class":301},"Name",[291,1024,325],{"class":297},[291,1026,345],{"class":297},[291,1028,1029],{"class":348},"Tidewater Books",[291,1031,352],{"class":297},[291,1033,355],{"class":297},[291,1035,1036],{"class":301}," Logo",[291,1038,325],{"class":297},[291,1040,345],{"class":297},[291,1042,1043],{"class":348},"logo.png",[291,1045,352],{"class":297},[291,1047,355],{"class":297},[291,1049,1050],{"class":301}," LogoDark",[291,1052,325],{"class":297},[291,1054,345],{"class":297},[291,1056,1057],{"class":348},"logo-dark.png",[291,1059,352],{"class":297},[291,1061,355],{"class":297},[291,1063,1064],{"class":301}," LogoSize",[291,1066,325],{"class":297},[291,1068,1070],{"class":1069},"sbssI"," 36",[291,1072,1073],{"class":297},"},\n",[291,1075,1077],{"class":293,"line":1076},26,[291,1078,1079],{"class":297},"}\n",[197,1081,1082,1085,1086,1089,1090,233,1093,233,1096,246,1099,1102,1103,1105],{},[201,1083,1084],{},"Action"," colours buttons and links, and ",[201,1087,1088],{},"Accent"," colours editorial eyebrows and the current progress step. ",[201,1091,1092],{},"Warm",[201,1094,1095],{},"Sea",[201,1097,1098],{},"Map",[201,1100,1101],{},"Sun"," are the placeholder grounds shown when a tile or band has no image. ",[221,1104,79],{"href":80}," lists where every token is used.",[197,1107,1108,1109,1112],{},"Every field is required, and ",[201,1110,1111],{},"Theme.Validate"," checks each one before any of it reaches CSS or markup:",[1114,1115,1116,1123,1132,1138,1161],"ul",{},[1117,1118,1119,1120],"li",{},"every colour is exactly ",[201,1121,1122],{},"#RRGGBB",[1117,1124,1125,1126,246,1129],{},"each font stack is non-empty and uses only letters, digits, spaces, commas, ",[201,1127,1128],{},"'",[201,1130,1131],{},"-",[1117,1133,1134,1137],{},[201,1135,1136],{},"Brand.Name"," is non-empty. It appears in the header text, the logo's alt text and the default sign-off (\"The Tidewater Books team\").",[1117,1139,1140,246,1143,1146,1147,1150,1151,233,1154,1157,1158,1160],{},[201,1141,1142],{},"Logo",[201,1144,1145],{},"LogoDark"," are plain file names under ",[201,1148,1149],{},"Config.AssetBase",", with no ",[201,1152,1153],{},"\u002F",[201,1155,1156],{},".."," or whitespace. ",[201,1159,1145],{}," is the white-chip version for dark mode.",[1117,1162,1163,1166],{},[201,1164,1165],{},"LogoSize"," is the display size in CSS pixels, from 16 to 96",[197,1168,1169,1170,1173,1174,1177],{},"You don't have to call ",[201,1171,1172],{},"Validate"," yourself, because ",[201,1175,1176],{},"NewRenderer"," does. It reports every problem, one line each:",[282,1179,1184],{"className":1180,"code":1182,"language":1183,"meta":287},[1181],"language-text","theme: Light.Action: invalid colour \"#12345\" (want #RRGGBB)\n","text",[201,1185,1182],{"__ignoreMap":287},[255,1187,1189],{"id":1188},"write-the-families","Write the families",[197,1191,1192],{},"A family is one kind of email you send. It fixes the sender, the sending stream, the header and footer chrome, the footer copy and the modules its templates may not use. Tidewater sends order mail and a newsletter:",[282,1194,1196],{"className":284,"code":1195,"filename":218,"language":286,"meta":287,"style":287},"var families = lttr.NewRegistry(\n    lttr.Family{\n        Name:   \"orders\",\n        From:   mail.Address{Name: \"Tidewater Books\", Address: \"orders@tidewater.example\"},\n        Stream: lttr.Transactional,\n        Header: lttr.H1,\n        Footer: lttr.F2,\n        Copy: lttr.FooterCopy{\n            Note:      \"Questions about your order? Reply to this email.\",\n            About:     \"your order\",\n            Service:   \"This is a service email about {about}. [Notification settings]({prefs})\",\n            Address:   \"{brand} · {address}\",\n            TextLinks: []lttr.TextLink{{Label: \"Notification settings\", URL: \"{prefs}\"}},\n        },\n        Forbidden: []ir.Kind{ir.KindProducts, ir.KindOffer},\n    },\n    lttr.Family{\n        Name:     \"notes\",\n        From:     mail.Address{Name: \"Tidewater Notes\", Address: \"notes@tidewater.example\"},\n        Stream:   lttr.Marketing,\n        Header:   lttr.H3,\n        Masthead: \"Tidewater Notes · No. {issue}\",\n        Footer:   lttr.F1,\n        Copy: lttr.FooterCopy{\n            Nav:       []lttr.NavLink{{Label: \"New books\", Href: \"{site}\u002Fnew\"}, {Label: \"Events\", Href: \"{site}\u002Fevents\"}},\n            Reason:    \"You're getting Tidewater Notes because you signed up at {site}.\",\n            Links:     \"[Unsubscribe]({unsubscribe}) · [Preferences]({prefs})\",\n            Address:   \"{brand} · {address}\",\n            TextLinks: []lttr.TextLink{{Label: \"Unsubscribe\", URL: \"{unsubscribe}\"}, {Label: \"Preferences\", URL: \"{prefs}\"}},\n        },\n        Tracking: true,\n    },\n)\n",[201,1197,1198,1218,1230,1247,1290,1306,1322,1338,1354,1371,1388,1404,1420,1470,1475,1513,1517,1527,1542,1583,1599,1614,1630,1645,1659,1735,1752,1769,1784,1854,1859,1873,1878],{"__ignoreMap":287},[291,1199,1200,1202,1205,1207,1209,1211,1215],{"class":293,"line":294},[291,1201,298],{"class":297},[291,1203,1204],{"class":301}," families ",[291,1206,305],{"class":297},[291,1208,309],{"class":301},[291,1210,253],{"class":297},[291,1212,1214],{"class":1213},"s2Zo4","NewRegistry",[291,1216,1217],{"class":297},"(\n",[291,1219,1220,1223,1225,1228],{"class":293,"line":319},[291,1221,1222],{"class":308},"    lttr",[291,1224,253],{"class":297},[291,1226,1227],{"class":308},"Family",[291,1229,316],{"class":297},[291,1231,1232,1235,1237,1240,1243,1245],{"class":293,"line":337},[291,1233,1234],{"class":301},"        Name",[291,1236,325],{"class":297},[291,1238,1239],{"class":297},"   \"",[291,1241,1242],{"class":348},"orders",[291,1244,352],{"class":297},[291,1246,398],{"class":297},[291,1248,1249,1252,1254,1257,1259,1262,1264,1266,1268,1270,1272,1274,1276,1279,1281,1283,1286,1288],{"class":293,"line":401},[291,1250,1251],{"class":301},"        From",[291,1253,325],{"class":297},[291,1255,1256],{"class":308},"   mail",[291,1258,253],{"class":297},[291,1260,1261],{"class":308},"Address",[291,1263,1019],{"class":297},[291,1265,1022],{"class":301},[291,1267,325],{"class":297},[291,1269,345],{"class":297},[291,1271,1029],{"class":348},[291,1273,352],{"class":297},[291,1275,355],{"class":297},[291,1277,1278],{"class":301}," Address",[291,1280,325],{"class":297},[291,1282,345],{"class":297},[291,1284,1285],{"class":348},"orders@tidewater.example",[291,1287,352],{"class":297},[291,1289,1073],{"class":297},[291,1291,1292,1295,1297,1299,1301,1304],{"class":293,"line":446},[291,1293,1294],{"class":301},"        Stream",[291,1296,325],{"class":297},[291,1298,309],{"class":301},[291,1300,253],{"class":297},[291,1302,1303],{"class":301},"Transactional",[291,1305,398],{"class":297},[291,1307,1308,1311,1313,1315,1317,1320],{"class":293,"line":491},[291,1309,1310],{"class":301},"        Header",[291,1312,325],{"class":297},[291,1314,309],{"class":301},[291,1316,253],{"class":297},[291,1318,1319],{"class":301},"H1",[291,1321,398],{"class":297},[291,1323,1324,1327,1329,1331,1333,1336],{"class":293,"line":521},[291,1325,1326],{"class":301},"        Footer",[291,1328,325],{"class":297},[291,1330,309],{"class":301},[291,1332,253],{"class":297},[291,1334,1335],{"class":301},"F2",[291,1337,398],{"class":297},[291,1339,1340,1343,1345,1347,1349,1352],{"class":293,"line":566},[291,1341,1342],{"class":301},"        Copy",[291,1344,325],{"class":297},[291,1346,309],{"class":308},[291,1348,253],{"class":297},[291,1350,1351],{"class":308},"FooterCopy",[291,1353,316],{"class":297},[291,1355,1356,1359,1361,1364,1367,1369],{"class":293,"line":611},[291,1357,1358],{"class":301},"            Note",[291,1360,325],{"class":297},[291,1362,1363],{"class":297},"      \"",[291,1365,1366],{"class":348},"Questions about your order? Reply to this email.",[291,1368,352],{"class":297},[291,1370,398],{"class":297},[291,1372,1373,1376,1378,1381,1384,1386],{"class":293,"line":669},[291,1374,1375],{"class":301},"            About",[291,1377,325],{"class":297},[291,1379,1380],{"class":297},"     \"",[291,1382,1383],{"class":348},"your order",[291,1385,352],{"class":297},[291,1387,398],{"class":297},[291,1389,1390,1393,1395,1397,1400,1402],{"class":293,"line":675},[291,1391,1392],{"class":301},"            Service",[291,1394,325],{"class":297},[291,1396,1239],{"class":297},[291,1398,1399],{"class":348},"This is a service email about {about}. [Notification settings]({prefs})",[291,1401,352],{"class":297},[291,1403,398],{"class":297},[291,1405,1406,1409,1411,1413,1416,1418],{"class":293,"line":691},[291,1407,1408],{"class":301},"            Address",[291,1410,325],{"class":297},[291,1412,1239],{"class":297},[291,1414,1415],{"class":348},"{brand} · {address}",[291,1417,352],{"class":297},[291,1419,398],{"class":297},[291,1421,1422,1425,1427,1430,1433,1435,1438,1441,1444,1446,1448,1451,1453,1455,1458,1460,1462,1465,1467],{"class":293,"line":736},[291,1423,1424],{"class":301},"            TextLinks",[291,1426,325],{"class":297},[291,1428,1429],{"class":297}," []",[291,1431,1432],{"class":308},"lttr",[291,1434,253],{"class":297},[291,1436,1437],{"class":308},"TextLink",[291,1439,1440],{"class":297},"{{",[291,1442,1443],{"class":301},"Label",[291,1445,325],{"class":297},[291,1447,345],{"class":297},[291,1449,1450],{"class":348},"Notification settings",[291,1452,352],{"class":297},[291,1454,355],{"class":297},[291,1456,1457],{"class":301}," URL",[291,1459,325],{"class":297},[291,1461,345],{"class":297},[291,1463,1464],{"class":348},"{prefs}",[291,1466,352],{"class":297},[291,1468,1469],{"class":297},"}},\n",[291,1471,1472],{"class":293,"line":766},[291,1473,1474],{"class":297},"        },\n",[291,1476,1477,1480,1482,1484,1487,1489,1492,1494,1496,1498,1501,1503,1506,1508,1511],{"class":293,"line":795},[291,1478,1479],{"class":301},"        Forbidden",[291,1481,325],{"class":297},[291,1483,1429],{"class":297},[291,1485,1486],{"class":308},"ir",[291,1488,253],{"class":297},[291,1490,1491],{"class":308},"Kind",[291,1493,1019],{"class":297},[291,1495,1486],{"class":301},[291,1497,253],{"class":297},[291,1499,1500],{"class":301},"KindProducts",[291,1502,355],{"class":297},[291,1504,1505],{"class":301}," ir",[291,1507,253],{"class":297},[291,1509,1510],{"class":301},"KindOffer",[291,1512,1073],{"class":297},[291,1514,1515],{"class":293,"line":826},[291,1516,672],{"class":297},[291,1518,1519,1521,1523,1525],{"class":293,"line":869},[291,1520,1222],{"class":308},[291,1522,253],{"class":297},[291,1524,1227],{"class":308},[291,1526,316],{"class":297},[291,1528,1529,1531,1533,1535,1538,1540],{"class":293,"line":911},[291,1530,1234],{"class":301},[291,1532,325],{"class":297},[291,1534,1380],{"class":297},[291,1536,1537],{"class":348},"notes",[291,1539,352],{"class":297},[291,1541,398],{"class":297},[291,1543,1544,1546,1548,1551,1553,1555,1557,1559,1561,1563,1566,1568,1570,1572,1574,1576,1579,1581],{"class":293,"line":927},[291,1545,1251],{"class":301},[291,1547,325],{"class":297},[291,1549,1550],{"class":308},"     mail",[291,1552,253],{"class":297},[291,1554,1261],{"class":308},[291,1556,1019],{"class":297},[291,1558,1022],{"class":301},[291,1560,325],{"class":297},[291,1562,345],{"class":297},[291,1564,1565],{"class":348},"Tidewater Notes",[291,1567,352],{"class":297},[291,1569,355],{"class":297},[291,1571,1278],{"class":301},[291,1573,325],{"class":297},[291,1575,345],{"class":297},[291,1577,1578],{"class":348},"notes@tidewater.example",[291,1580,352],{"class":297},[291,1582,1073],{"class":297},[291,1584,1585,1587,1589,1592,1594,1597],{"class":293,"line":932},[291,1586,1294],{"class":301},[291,1588,325],{"class":297},[291,1590,1591],{"class":301},"   lttr",[291,1593,253],{"class":297},[291,1595,1596],{"class":301},"Marketing",[291,1598,398],{"class":297},[291,1600,1601,1603,1605,1607,1609,1612],{"class":293,"line":948},[291,1602,1310],{"class":301},[291,1604,325],{"class":297},[291,1606,1591],{"class":301},[291,1608,253],{"class":297},[291,1610,1611],{"class":301},"H3",[291,1613,398],{"class":297},[291,1615,1616,1619,1621,1623,1626,1628],{"class":293,"line":965},[291,1617,1618],{"class":301},"        Masthead",[291,1620,325],{"class":297},[291,1622,345],{"class":297},[291,1624,1625],{"class":348},"Tidewater Notes · No. {issue}",[291,1627,352],{"class":297},[291,1629,398],{"class":297},[291,1631,1632,1634,1636,1638,1640,1643],{"class":293,"line":983},[291,1633,1326],{"class":301},[291,1635,325],{"class":297},[291,1637,1591],{"class":301},[291,1639,253],{"class":297},[291,1641,1642],{"class":301},"F1",[291,1644,398],{"class":297},[291,1646,1647,1649,1651,1653,1655,1657],{"class":293,"line":1000},[291,1648,1342],{"class":301},[291,1650,325],{"class":297},[291,1652,309],{"class":308},[291,1654,253],{"class":297},[291,1656,1351],{"class":308},[291,1658,316],{"class":297},[291,1660,1661,1664,1666,1669,1671,1673,1676,1678,1680,1682,1684,1687,1689,1691,1694,1696,1698,1701,1703,1706,1709,1711,1713,1715,1718,1720,1722,1724,1726,1728,1731,1733],{"class":293,"line":1005},[291,1662,1663],{"class":301},"            Nav",[291,1665,325],{"class":297},[291,1667,1668],{"class":297},"       []",[291,1670,1432],{"class":308},[291,1672,253],{"class":297},[291,1674,1675],{"class":308},"NavLink",[291,1677,1440],{"class":297},[291,1679,1443],{"class":301},[291,1681,325],{"class":297},[291,1683,345],{"class":297},[291,1685,1686],{"class":348},"New books",[291,1688,352],{"class":297},[291,1690,355],{"class":297},[291,1692,1693],{"class":301}," Href",[291,1695,325],{"class":297},[291,1697,345],{"class":297},[291,1699,1700],{"class":348},"{site}\u002Fnew",[291,1702,352],{"class":297},[291,1704,1705],{"class":297},"},",[291,1707,1708],{"class":297}," {",[291,1710,1443],{"class":301},[291,1712,325],{"class":297},[291,1714,345],{"class":297},[291,1716,1717],{"class":348},"Events",[291,1719,352],{"class":297},[291,1721,355],{"class":297},[291,1723,1693],{"class":301},[291,1725,325],{"class":297},[291,1727,345],{"class":297},[291,1729,1730],{"class":348},"{site}\u002Fevents",[291,1732,352],{"class":297},[291,1734,1469],{"class":297},[291,1736,1737,1740,1742,1745,1748,1750],{"class":293,"line":1076},[291,1738,1739],{"class":301},"            Reason",[291,1741,325],{"class":297},[291,1743,1744],{"class":297},"    \"",[291,1746,1747],{"class":348},"You're getting Tidewater Notes because you signed up at {site}.",[291,1749,352],{"class":297},[291,1751,398],{"class":297},[291,1753,1755,1758,1760,1762,1765,1767],{"class":293,"line":1754},27,[291,1756,1757],{"class":301},"            Links",[291,1759,325],{"class":297},[291,1761,1380],{"class":297},[291,1763,1764],{"class":348},"[Unsubscribe]({unsubscribe}) · [Preferences]({prefs})",[291,1766,352],{"class":297},[291,1768,398],{"class":297},[291,1770,1772,1774,1776,1778,1780,1782],{"class":293,"line":1771},28,[291,1773,1408],{"class":301},[291,1775,325],{"class":297},[291,1777,1239],{"class":297},[291,1779,1415],{"class":348},[291,1781,352],{"class":297},[291,1783,398],{"class":297},[291,1785,1787,1789,1791,1793,1795,1797,1799,1801,1803,1805,1807,1810,1812,1814,1816,1818,1820,1823,1825,1827,1829,1831,1833,1835,1838,1840,1842,1844,1846,1848,1850,1852],{"class":293,"line":1786},29,[291,1788,1424],{"class":301},[291,1790,325],{"class":297},[291,1792,1429],{"class":297},[291,1794,1432],{"class":308},[291,1796,253],{"class":297},[291,1798,1437],{"class":308},[291,1800,1440],{"class":297},[291,1802,1443],{"class":301},[291,1804,325],{"class":297},[291,1806,345],{"class":297},[291,1808,1809],{"class":348},"Unsubscribe",[291,1811,352],{"class":297},[291,1813,355],{"class":297},[291,1815,1457],{"class":301},[291,1817,325],{"class":297},[291,1819,345],{"class":297},[291,1821,1822],{"class":348},"{unsubscribe}",[291,1824,352],{"class":297},[291,1826,1705],{"class":297},[291,1828,1708],{"class":297},[291,1830,1443],{"class":301},[291,1832,325],{"class":297},[291,1834,345],{"class":297},[291,1836,1837],{"class":348},"Preferences",[291,1839,352],{"class":297},[291,1841,355],{"class":297},[291,1843,1457],{"class":301},[291,1845,325],{"class":297},[291,1847,345],{"class":297},[291,1849,1464],{"class":348},[291,1851,352],{"class":297},[291,1853,1469],{"class":297},[291,1855,1857],{"class":293,"line":1856},30,[291,1858,1474],{"class":297},[291,1860,1862,1865,1867,1871],{"class":293,"line":1861},31,[291,1863,1864],{"class":301},"        Tracking",[291,1866,325],{"class":297},[291,1868,1870],{"class":1869},"sfNiH"," true",[291,1872,398],{"class":297},[291,1874,1876],{"class":293,"line":1875},32,[291,1877,672],{"class":297},[291,1879,1881],{"class":293,"line":1880},33,[291,1882,1883],{"class":297},")\n",[197,1885,1886,1888,1889,246,1892,1895,1896,1898,1899,1902,1903,1906,1907,1910,1911,1914,1915,1918],{},[201,1887,1242],{}," uses the service footer (F2), and its templates may not use the promotional ",[201,1890,1891],{},"products",[201,1893,1894],{},"offer"," modules. ",[201,1897,1537],{}," uses the H3 newsletter masthead, which requires ",[201,1900,1901],{},"Masthead"," copy and makes ",[201,1904,1905],{},"issue:"," a required frontmatter key in its templates. It also uses the marketing footer (F1). A marketing email must be rendered for a recipient with an ",[201,1908,1909],{},"UnsubscribeURL",", and ",[201,1912,1913],{},"Render"," adds the one-click ",[201,1916,1917],{},"List-Unsubscribe"," headers for it.",[197,1920,1921,1922,1924],{},"Which ",[201,1923,1351],{}," fields a footer shows depends on its variant:",[1926,1927,1928,1944],"table",{},[1929,1930,1931],"thead",{},[1932,1933,1934,1938,1941],"tr",{},[1935,1936,1937],"th",{},"Variant",[1935,1939,1940],{},"For",[1935,1942,1943],{},"Fields shown",[1945,1946,1947,1967,1991,2006,2020],"tbody",{},[1932,1948,1949,1954,1956],{},[1950,1951,1952],"td",{},[201,1953,1642],{},[1950,1955,1596],{},[1950,1957,1958,233,1961,233,1964],{},[201,1959,1960],{},"Nav",[201,1962,1963],{},"Reason",[201,1965,1966],{},"Links",[1932,1968,1969,1973,1976],{},[1950,1970,1971],{},[201,1972,1335],{},[1950,1974,1975],{},"Service",[1950,1977,1978,1910,1981,1983,1984,1987,1988,1990],{},[201,1979,1980],{},"Note",[201,1982,1975],{}," with the ",[201,1985,1986],{},"About"," value (an empty ",[201,1989,1986],{}," drops the service line)",[1932,1992,1993,1998,2001],{},[1950,1994,1995],{},[201,1996,1997],{},"F3",[1950,1999,2000],{},"Outreach",[1950,2002,2003],{},[201,2004,2005],{},"OptOut",[1932,2007,2008,2013,2016],{},[1950,2009,2010],{},[201,2011,2012],{},"F3Internal",[1950,2014,2015],{},"Internal",[1950,2017,2018],{},[201,2019,2015],{},[1932,2021,2022,2025,2027],{},[1950,2023,2024],{},"Every variant",[1950,2026],{},[1950,2028,2029,2031,2032,2035],{},[201,2030,1261],{},", then the plain-text ",[201,2033,2034],{},"TextLinks"," lines",[197,2037,2038,2039,2042,2043,233,2046,233,2049,233,2052,233,2055,233,2058,233,2061,233,2063,246,2065,2068,2069,2072,2073,2076,2077,2080,2081,2084,2085,2088,2089,250,2092,253],{},"Copy is one paragraph of Markdown, or plain text, with ",[201,2040,2041],{},"{name}"," placeholders filled per message: ",[201,2044,2045],{},"{site}",[201,2047,2048],{},"{brand}",[201,2050,2051],{},"{domain}",[201,2053,2054],{},"{region}",[201,2056,2057],{},"{address}",[201,2059,2060],{},"{about}",[201,2062,1464],{},[201,2064,1822],{},[201,2066,2067],{},"{issue}",". Merge tags (",[201,2070,2071],{},"{{…}}",") aren't allowed in family copy. A few more options aren't used here: ",[201,2074,2075],{},"FromFrontmatter"," with a ",[201,2078,2079],{},"SenderDomain"," for senders chosen per template, ",[201,2082,2083],{},"Banner"," for the H2 internal header, and ",[201,2086,2087],{},"Legal"," for a template that must switch stream and footer with ",[201,2090,2091],{},"legal: true",[221,2093,74],{"href":75},[197,2095,2096,2098,2099,2102,2103,2105],{},[201,2097,1214],{}," never fails. The registry is checked by ",[201,2100,2101],{},"Registry.Validate(domain)",", which ",[201,2104,1176],{}," calls. A sender outside your domain and a mistyped placeholder, for example, come back together:",[282,2107,2110],{"className":2108,"code":2109,"language":1183,"meta":287},[1181],"family \"orders\": sender \"orders@elsewhere.example\" is outside its domain \"tidewater.example\"\nfamily \"orders\" Copy.Note:1:12: unknown placeholder \"{sitee}\"\n",[201,2111,2109],{"__ignoreMap":287},[255,2113,2115],{"id":2114},"add-entities-and-the-config","Add entities and the config",[197,2117,2118,2119,2121,2122,2125,2126,2128],{},"The ",[201,2120,211],{}," puts it together. ",[201,2123,2124],{},"Entities"," maps a region to the legal entity the mail is sent on behalf of, and its address fills ",[201,2127,2057],{}," in the footer:",[282,2130,2132],{"className":284,"code":2131,"filename":218,"language":286,"meta":287,"style":287},"func config() lttr.Config {\n    return lttr.Config{\n        Domain:        \"tidewater.example\",\n        SiteURL:       \"https:\u002F\u002Ftidewater.example\",\n        AssetBase:     \"https:\u002F\u002Fcdn.tidewater.example\u002Femail\",\n        Theme:         brand,\n        Families:      families,\n        Entities:      map[string]lttr.Entity{\"UK\": {Address: \"4 Quay Street, Falmouth\"}},\n        DefaultRegion: \"UK\",\n    }\n}\n",[201,2133,2134,2154,2168,2185,2202,2218,2230,2242,2292,2307,2312],{"__ignoreMap":287},[291,2135,2136,2139,2142,2145,2147,2149,2151],{"class":293,"line":294},[291,2137,2138],{"class":297},"func",[291,2140,2141],{"class":1213}," config",[291,2143,2144],{"class":297},"()",[291,2146,309],{"class":308},[291,2148,253],{"class":297},[291,2150,211],{"class":308},[291,2152,2153],{"class":297}," {\n",[291,2155,2156,2160,2162,2164,2166],{"class":293,"line":319},[291,2157,2159],{"class":2158},"s7zQu","    return",[291,2161,309],{"class":308},[291,2163,253],{"class":297},[291,2165,211],{"class":308},[291,2167,316],{"class":297},[291,2169,2170,2173,2175,2178,2181,2183],{"class":293,"line":337},[291,2171,2172],{"class":301},"        Domain",[291,2174,325],{"class":297},[291,2176,2177],{"class":297},"        \"",[291,2179,2180],{"class":348},"tidewater.example",[291,2182,352],{"class":297},[291,2184,398],{"class":297},[291,2186,2187,2190,2192,2195,2198,2200],{"class":293,"line":401},[291,2188,2189],{"class":301},"        SiteURL",[291,2191,325],{"class":297},[291,2193,2194],{"class":297},"       \"",[291,2196,2197],{"class":348},"https:\u002F\u002Ftidewater.example",[291,2199,352],{"class":297},[291,2201,398],{"class":297},[291,2203,2204,2207,2209,2211,2214,2216],{"class":293,"line":446},[291,2205,2206],{"class":301},"        AssetBase",[291,2208,325],{"class":297},[291,2210,1380],{"class":297},[291,2212,2213],{"class":348},"https:\u002F\u002Fcdn.tidewater.example\u002Femail",[291,2215,352],{"class":297},[291,2217,398],{"class":297},[291,2219,2220,2223,2225,2228],{"class":293,"line":491},[291,2221,2222],{"class":301},"        Theme",[291,2224,325],{"class":297},[291,2226,2227],{"class":301},"         brand",[291,2229,398],{"class":297},[291,2231,2232,2235,2237,2240],{"class":293,"line":521},[291,2233,2234],{"class":301},"        Families",[291,2236,325],{"class":297},[291,2238,2239],{"class":301},"      families",[291,2241,398],{"class":297},[291,2243,2244,2247,2249,2252,2256,2259,2261,2263,2266,2268,2270,2273,2275,2277,2279,2281,2283,2285,2288,2290],{"class":293,"line":566},[291,2245,2246],{"class":301},"        Entities",[291,2248,325],{"class":297},[291,2250,2251],{"class":297},"      map[",[291,2253,2255],{"class":2254},"spNyl","string",[291,2257,2258],{"class":297},"]",[291,2260,1432],{"class":308},[291,2262,253],{"class":297},[291,2264,2265],{"class":308},"Entity",[291,2267,1019],{"class":297},[291,2269,352],{"class":297},[291,2271,2272],{"class":348},"UK",[291,2274,352],{"class":297},[291,2276,325],{"class":297},[291,2278,1708],{"class":297},[291,2280,1261],{"class":301},[291,2282,325],{"class":297},[291,2284,345],{"class":297},[291,2286,2287],{"class":348},"4 Quay Street, Falmouth",[291,2289,352],{"class":297},[291,2291,1469],{"class":297},[291,2293,2294,2297,2299,2301,2303,2305],{"class":293,"line":611},[291,2295,2296],{"class":301},"        DefaultRegion",[291,2298,325],{"class":297},[291,2300,345],{"class":297},[291,2302,2272],{"class":348},[291,2304,352],{"class":297},[291,2306,398],{"class":297},[291,2308,2309],{"class":293,"line":669},[291,2310,2311],{"class":297},"    }\n",[291,2313,2314],{"class":293,"line":675},[291,2315,1079],{"class":297},[1114,2317,2318,2330,2349,2359],{},[1117,2319,2320,2323,2324,2327,2328,253],{},[201,2321,2322],{},"Domain"," is the sending domain. A family's ",[201,2325,2326],{},"From"," must be on it, or on its ",[201,2329,2079],{},[1117,2331,2332,2335,2336,2338,2339,2341,2342,2345,2346,253],{},[201,2333,2334],{},"SiteURL"," must be an absolute https URL. It is ",[201,2337,2045],{},", and the default for ",[201,2340,1464],{}," is ",[201,2343,2344],{},"{site}\u002Fpreferences"," when a recipient has no ",[201,2347,2348],{},"PreferencesURL",[1117,2350,2351,2354,2355,246,2357,253],{},[201,2352,2353],{},"AssetBase"," is where you host ",[201,2356,1043],{},[201,2358,1057],{},[1117,2360,2361,2362,2365,2366,2369,2370,2372,2373,2376],{},"A recipient's ",[201,2363,2364],{},"Region"," selects the entity. With no region, ",[201,2367,2368],{},"DefaultRegion"," is used, and it must be a key of ",[201,2371,2124],{},". A recipient with an ",[201,2374,2375],{},"EntityAddress"," of its own uses that address instead.",[197,2378,2379,2382,2383,2386,2387,253],{},[201,2380,2381],{},"NewRenderer(config())"," validates all of it at once and returns a ",[201,2384,2385],{},"*Renderer"," that is immutable and safe to share. See ",[221,2388,84],{"href":85},[255,2390,2392],{"id":2391},"write-the-first-template","Write the first template",[197,2394,2395],{},"A template needs a Go data type. Every merge tag and binding is checked against that type when the template compiles, so a misspelt field fails at startup, not at send time:",[282,2397,2399],{"className":284,"code":2398,"filename":218,"language":286,"meta":287,"style":287},"type OrderDispatched struct {\n    OrderID   string     `json:\"order_id\"`\n    BookCount int        `json:\"book_count\"`\n    Arrives   string     `json:\"arrives\"`\n    Subtotal  data.Money `json:\"subtotal\"`\n    Delivery  data.Money `json:\"delivery\"`\n    TrackURL  string     `json:\"track_url\"`\n}\n",[201,2400,2401,2414,2430,2446,2460,2481,2499,2513],{"__ignoreMap":287},[291,2402,2403,2406,2409,2412],{"class":293,"line":294},[291,2404,2405],{"class":297},"type",[291,2407,2408],{"class":308}," OrderDispatched",[291,2410,2411],{"class":297}," struct",[291,2413,2153],{"class":297},[291,2415,2416,2419,2421,2424,2427],{"class":293,"line":319},[291,2417,2418],{"class":301},"    OrderID   ",[291,2420,2255],{"class":2254},[291,2422,2423],{"class":297},"     `",[291,2425,2426],{"class":348},"json:\"order_id\"",[291,2428,2429],{"class":297},"`\n",[291,2431,2432,2435,2438,2441,2444],{"class":293,"line":337},[291,2433,2434],{"class":301},"    BookCount ",[291,2436,2437],{"class":2254},"int",[291,2439,2440],{"class":297},"        `",[291,2442,2443],{"class":348},"json:\"book_count\"",[291,2445,2429],{"class":297},[291,2447,2448,2451,2453,2455,2458],{"class":293,"line":401},[291,2449,2450],{"class":301},"    Arrives   ",[291,2452,2255],{"class":2254},[291,2454,2423],{"class":297},[291,2456,2457],{"class":348},"json:\"arrives\"",[291,2459,2429],{"class":297},[291,2461,2462,2465,2468,2470,2473,2476,2479],{"class":293,"line":446},[291,2463,2464],{"class":301},"    Subtotal  ",[291,2466,2467],{"class":308},"data",[291,2469,253],{"class":297},[291,2471,2472],{"class":308},"Money",[291,2474,2475],{"class":297}," `",[291,2477,2478],{"class":348},"json:\"subtotal\"",[291,2480,2429],{"class":297},[291,2482,2483,2486,2488,2490,2492,2494,2497],{"class":293,"line":491},[291,2484,2485],{"class":301},"    Delivery  ",[291,2487,2467],{"class":308},[291,2489,253],{"class":297},[291,2491,2472],{"class":308},[291,2493,2475],{"class":297},[291,2495,2496],{"class":348},"json:\"delivery\"",[291,2498,2429],{"class":297},[291,2500,2501,2504,2506,2508,2511],{"class":293,"line":521},[291,2502,2503],{"class":301},"    TrackURL  ",[291,2505,2255],{"class":2254},[291,2507,2423],{"class":297},[291,2509,2510],{"class":348},"json:\"track_url\"",[291,2512,2429],{"class":297},[291,2514,2515],{"class":293,"line":566},[291,2516,1079],{"class":297},[197,2518,2519,2520,2523,2524,2527],{},"Then the template. Its ",[201,2521,2522],{},"template:"," key must equal the name you compile it under, and ",[201,2525,2526],{},"family:"," must name a family in the registry:",[282,2529,2534],{"className":2530,"code":2531,"filename":2532,"language":2533,"meta":287,"style":287},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","---\ntemplate: order.dispatched\nfamily: orders\nsubject: \"Order {{order_id}} is on its way\"\npreheader: \"{{book_count}} books, arriving {{arrives}}.\"\n---\n\n::statement{eyebrow=\"Order {{order_id}}\"}\n# Your books are on their way.\n\nHi {{first_name | there}}, we've packed your order and handed it to the courier. It should arrive {{arrives}}.\n\n:button[Track parcel]{href=\"{{track_url}}\"}\n::\n\n::breakdown\n| Books · {{book_count}} | {{subtotal}} |\n| --- | ---: |\n| Delivery | {{delivery}} |\n::\n\n::signoff\n::\n","templates\u002Forder-dispatched.md","markdown",[201,2535,2536,2541,2552,2562,2577,2591,2595,2601,2606,2614,2618,2623,2627,2632,2637,2641,2646,2662,2678,2692,2696,2700,2705],{"__ignoreMap":287},[291,2537,2538],{"class":293,"line":294},[291,2539,2540],{"class":297},"---\n",[291,2542,2543,2547,2549],{"class":293,"line":319},[291,2544,2546],{"class":2545},"swJcz","template",[291,2548,325],{"class":297},[291,2550,2551],{"class":348}," order.dispatched\n",[291,2553,2554,2557,2559],{"class":293,"line":337},[291,2555,2556],{"class":2545},"family",[291,2558,325],{"class":297},[291,2560,2561],{"class":348}," orders\n",[291,2563,2564,2567,2569,2571,2574],{"class":293,"line":401},[291,2565,2566],{"class":2545},"subject",[291,2568,325],{"class":297},[291,2570,345],{"class":297},[291,2572,2573],{"class":348},"Order {{order_id}} is on its way",[291,2575,2576],{"class":297},"\"\n",[291,2578,2579,2582,2584,2586,2589],{"class":293,"line":446},[291,2580,2581],{"class":2545},"preheader",[291,2583,325],{"class":297},[291,2585,345],{"class":297},[291,2587,2588],{"class":348},"{{book_count}} books, arriving {{arrives}}.",[291,2590,2576],{"class":297},[291,2592,2593],{"class":293,"line":491},[291,2594,2540],{"class":297},[291,2596,2597],{"class":293,"line":521},[291,2598,2600],{"emptyLinePlaceholder":2599},true,"\n",[291,2602,2603],{"class":293,"line":566},[291,2604,2605],{"class":301},"::statement{eyebrow=\"Order {{order_id}}\"}\n",[291,2607,2608,2611],{"class":293,"line":611},[291,2609,2610],{"class":297},"# ",[291,2612,2613],{"class":308},"Your books are on their way.\n",[291,2615,2616],{"class":293,"line":669},[291,2617,2600],{"emptyLinePlaceholder":2599},[291,2619,2620],{"class":293,"line":675},[291,2621,2622],{"class":301},"Hi {{first_name | there}}, we've packed your order and handed it to the courier. It should arrive {{arrives}}.\n",[291,2624,2625],{"class":293,"line":691},[291,2626,2600],{"emptyLinePlaceholder":2599},[291,2628,2629],{"class":293,"line":736},[291,2630,2631],{"class":301},":button[Track parcel]{href=\"{{track_url}}\"}\n",[291,2633,2634],{"class":293,"line":766},[291,2635,2636],{"class":301},"::\n",[291,2638,2639],{"class":293,"line":795},[291,2640,2600],{"emptyLinePlaceholder":2599},[291,2642,2643],{"class":293,"line":826},[291,2644,2645],{"class":301},"::breakdown\n",[291,2647,2648,2651,2654,2656,2659],{"class":293,"line":869},[291,2649,2650],{"class":297},"|",[291,2652,2653],{"class":301}," Books · {{book_count}} ",[291,2655,2650],{"class":297},[291,2657,2658],{"class":301}," {{subtotal}} ",[291,2660,2661],{"class":297},"|\n",[291,2663,2664,2666,2669,2672,2675],{"class":293,"line":911},[291,2665,2650],{"class":297},[291,2667,2668],{"class":297}," ---",[291,2670,2671],{"class":297}," |",[291,2673,2674],{"class":297}," ---:",[291,2676,2677],{"class":297}," |\n",[291,2679,2680,2682,2685,2687,2690],{"class":293,"line":927},[291,2681,2650],{"class":297},[291,2683,2684],{"class":301}," Delivery ",[291,2686,2650],{"class":297},[291,2688,2689],{"class":301}," {{delivery}} ",[291,2691,2661],{"class":297},[291,2693,2694],{"class":293,"line":932},[291,2695,2636],{"class":301},[291,2697,2698],{"class":293,"line":948},[291,2699,2600],{"emptyLinePlaceholder":2599},[291,2701,2702],{"class":293,"line":965},[291,2703,2704],{"class":301},"::signoff\n",[291,2706,2707],{"class":293,"line":983},[291,2708,2636],{"class":301},[197,2710,2711,2714,2715,2718,2719,2722,2723,2726],{},[201,2712,2713],{},"{{first_name}}"," isn't a field of ",[201,2716,2717],{},"OrderDispatched",". A path that isn't in your data type is looked up on the ",[201,2720,2721],{},"Recipient",", so it is the recipient's first name, with \"there\" as the fallback when they have none. The ",[201,2724,2725],{},"signoff"," with no attributes closes with \"Thanks,\" and \"The Tidewater Books team\".",[197,2728,2729,2730,2733,2734,2737],{},"Compile it once, into a package-level variable. ",[201,2731,2732],{},"MustCompile"," panics with every error and its ",[201,2735,2736],{},"name:line:col",", so a broken template stops the program at startup:",[282,2739,2741],{"className":284,"code":2740,"filename":218,"language":286,"meta":287,"style":287},"var orderDispatched = lttr.MustCompile[OrderDispatched](families, \"order.dispatched\", []byte(orderDispatchedSrc))\n",[201,2742,2743],{"__ignoreMap":287},[291,2744,2745,2747,2750,2752,2754,2756,2758,2761,2763,2766,2769,2771,2773,2776,2778,2780,2782,2785,2788,2791],{"class":293,"line":294},[291,2746,298],{"class":297},[291,2748,2749],{"class":301}," orderDispatched ",[291,2751,305],{"class":297},[291,2753,309],{"class":301},[291,2755,253],{"class":297},[291,2757,2732],{"class":1213},[291,2759,2760],{"class":297},"[",[291,2762,2717],{"class":308},[291,2764,2765],{"class":297},"](",[291,2767,2768],{"class":301},"families",[291,2770,355],{"class":297},[291,2772,345],{"class":297},[291,2774,2775],{"class":348},"order.dispatched",[291,2777,352],{"class":297},[291,2779,355],{"class":297},[291,2781,1429],{"class":297},[291,2783,2784],{"class":2254},"byte",[291,2786,2787],{"class":297},"(",[291,2789,2790],{"class":301},"orderDispatchedSrc",[291,2792,2793],{"class":297},"))\n",[197,2795,2796,2797,2799,2800,2803,2804,2807,2808,2811],{},"The complete program keeps the template in a string constant, ",[201,2798,2790],{},", so it fits in one file. In a service, keep the ",[201,2801,2802],{},".md"," files in a directory and read them with ",[201,2805,2806],{},"\u002F\u002Fgo:embed templates\u002F*.md",", as ",[201,2809,2810],{},"examples\u002Fquiet\u002Ftemplates.go"," does.",[255,2813,2815],{"id":2814},"test-it","Test it",[197,2817,2818,2819,2822,2823,2826,2827,2829],{},"Compiling at init already fails ",[201,2820,2821],{},"go test"," on a broken template. The checks that depend on data run only when you render: merge tags with no value and no fallback, URLs (the footer's text-only links included), the entity address and the unsubscribe rule. Add a test that renders every template with sample data. Put ",[201,2824,2825],{},"main_test.go"," next to ",[201,2828,218],{},", in the same package:",[282,2831,2833],{"className":284,"code":2832,"filename":2825,"language":286,"meta":287,"style":287},"import (\n    \"errors\"\n    \"strings\"\n    \"testing\"\n    \"time\"\n\n    \"github.com\u002Fsulv-io\u002Flttr\"\n    \"github.com\u002Fsulv-io\u002Flttr\u002Fdata\"\n    \"github.com\u002Fsulv-io\u002Flttr\u002Fir\"\n)\n\nfunc sampleOrder() OrderDispatched {\n    return OrderDispatched{\n        OrderID:   \"TW-3107\",\n        BookCount: 3,\n        Arrives:   \"on Thursday\",\n        Subtotal:  data.Money{Minor: 4297, Currency: data.GBPCode},\n        Delivery:  data.Money{Minor: 295, Currency: data.GBPCode},\n        TrackURL:  \"https:\u002F\u002Ftidewater.example\u002Forders\u002FTW-3107\",\n    }\n}\n\nfunc TestOrderDispatchedRenders(t *testing.T) {\n    r, err := lttr.NewRenderer(config())\n    if err != nil {\n        t.Fatal(err)\n    }\n    \u002F\u002F No first name: the {{first_name | there}} fallback must carry it.\n    m, err := orderDispatched.Render(r, lttr.Recipient{Address: \"ana@example.com\"}, sampleOrder())\n    if err != nil {\n        t.Fatal(err)\n    }\n    if len(m.Warnings) > 0 {\n        t.Errorf(\"warnings: %q\", m.Warnings)\n    }\n    if !strings.Contains(m.Text, \"Hi there,\") {\n        t.Errorf(\"fallback not used:\\n%s\", m.Text)\n    }\n    if _, err := m.MIME(time.Now()); err != nil {\n        t.Fatal(err)\n    }\n}\n\nfunc TestOrdersRefuseOffers(t *testing.T) {\n    src := \"---\\ntemplate: order.promo\\nfamily: orders\\nsubject: Ten percent off\\n---\\n\\n\" +\n        \"::offer\\n## 10% off with `TIDE10`\\n\\nUntil Sunday.\\n::\\n\"\n    _, err := lttr.Compile[struct{}](families, \"order.promo\", []byte(src))\n    var e *ir.Error\n    if !errors.As(err, &e) {\n        t.Fatalf(\"want an *ir.Error, got %v\", err)\n    }\n    t.Log(err)\n}\n",[201,2834,2835,2843,2852,2861,2870,2879,2883,2892,2901,2910,2914,2918,2931,2939,2955,2967,2983,3024,3060,3076,3080,3084,3088,3116,3143,3158,3175,3179,3185,3235,3247,3261,3265,3292,3325,3330,3367,3401,3406,3447,3462,3467,3472,3477,3501,3541,3574,3620,3639,3669,3698,3703,3720],{"__ignoreMap":287},[291,2836,2837,2840],{"class":293,"line":294},[291,2838,2839],{"class":2158},"import",[291,2841,2842],{"class":297}," (\n",[291,2844,2845,2847,2850],{"class":293,"line":319},[291,2846,1744],{"class":297},[291,2848,2849],{"class":308},"errors",[291,2851,2576],{"class":297},[291,2853,2854,2856,2859],{"class":293,"line":337},[291,2855,1744],{"class":297},[291,2857,2858],{"class":308},"strings",[291,2860,2576],{"class":297},[291,2862,2863,2865,2868],{"class":293,"line":401},[291,2864,1744],{"class":297},[291,2866,2867],{"class":308},"testing",[291,2869,2576],{"class":297},[291,2871,2872,2874,2877],{"class":293,"line":446},[291,2873,1744],{"class":297},[291,2875,2876],{"class":308},"time",[291,2878,2576],{"class":297},[291,2880,2881],{"class":293,"line":491},[291,2882,2600],{"emptyLinePlaceholder":2599},[291,2884,2885,2887,2890],{"class":293,"line":521},[291,2886,1744],{"class":297},[291,2888,2889],{"class":308},"github.com\u002Fsulv-io\u002Flttr",[291,2891,2576],{"class":297},[291,2893,2894,2896,2899],{"class":293,"line":566},[291,2895,1744],{"class":297},[291,2897,2898],{"class":308},"github.com\u002Fsulv-io\u002Flttr\u002Fdata",[291,2900,2576],{"class":297},[291,2902,2903,2905,2908],{"class":293,"line":611},[291,2904,1744],{"class":297},[291,2906,2907],{"class":308},"github.com\u002Fsulv-io\u002Flttr\u002Fir",[291,2909,2576],{"class":297},[291,2911,2912],{"class":293,"line":669},[291,2913,1883],{"class":297},[291,2915,2916],{"class":293,"line":675},[291,2917,2600],{"emptyLinePlaceholder":2599},[291,2919,2920,2922,2925,2927,2929],{"class":293,"line":691},[291,2921,2138],{"class":297},[291,2923,2924],{"class":1213}," sampleOrder",[291,2926,2144],{"class":297},[291,2928,2408],{"class":308},[291,2930,2153],{"class":297},[291,2932,2933,2935,2937],{"class":293,"line":736},[291,2934,2159],{"class":2158},[291,2936,2408],{"class":308},[291,2938,316],{"class":297},[291,2940,2941,2944,2946,2948,2951,2953],{"class":293,"line":766},[291,2942,2943],{"class":301},"        OrderID",[291,2945,325],{"class":297},[291,2947,1239],{"class":297},[291,2949,2950],{"class":348},"TW-3107",[291,2952,352],{"class":297},[291,2954,398],{"class":297},[291,2956,2957,2960,2962,2965],{"class":293,"line":795},[291,2958,2959],{"class":301},"        BookCount",[291,2961,325],{"class":297},[291,2963,2964],{"class":1069}," 3",[291,2966,398],{"class":297},[291,2968,2969,2972,2974,2976,2979,2981],{"class":293,"line":826},[291,2970,2971],{"class":301},"        Arrives",[291,2973,325],{"class":297},[291,2975,1239],{"class":297},[291,2977,2978],{"class":348},"on Thursday",[291,2980,352],{"class":297},[291,2982,398],{"class":297},[291,2984,2985,2988,2990,2993,2995,2997,2999,3002,3004,3007,3009,3012,3014,3017,3019,3022],{"class":293,"line":869},[291,2986,2987],{"class":301},"        Subtotal",[291,2989,325],{"class":297},[291,2991,2992],{"class":308},"  data",[291,2994,253],{"class":297},[291,2996,2472],{"class":308},[291,2998,1019],{"class":297},[291,3000,3001],{"class":301},"Minor",[291,3003,325],{"class":297},[291,3005,3006],{"class":1069}," 4297",[291,3008,355],{"class":297},[291,3010,3011],{"class":301}," Currency",[291,3013,325],{"class":297},[291,3015,3016],{"class":301}," data",[291,3018,253],{"class":297},[291,3020,3021],{"class":301},"GBPCode",[291,3023,1073],{"class":297},[291,3025,3026,3029,3031,3033,3035,3037,3039,3041,3043,3046,3048,3050,3052,3054,3056,3058],{"class":293,"line":911},[291,3027,3028],{"class":301},"        Delivery",[291,3030,325],{"class":297},[291,3032,2992],{"class":308},[291,3034,253],{"class":297},[291,3036,2472],{"class":308},[291,3038,1019],{"class":297},[291,3040,3001],{"class":301},[291,3042,325],{"class":297},[291,3044,3045],{"class":1069}," 295",[291,3047,355],{"class":297},[291,3049,3011],{"class":301},[291,3051,325],{"class":297},[291,3053,3016],{"class":301},[291,3055,253],{"class":297},[291,3057,3021],{"class":301},[291,3059,1073],{"class":297},[291,3061,3062,3065,3067,3069,3072,3074],{"class":293,"line":927},[291,3063,3064],{"class":301},"        TrackURL",[291,3066,325],{"class":297},[291,3068,973],{"class":297},[291,3070,3071],{"class":348},"https:\u002F\u002Ftidewater.example\u002Forders\u002FTW-3107",[291,3073,352],{"class":297},[291,3075,398],{"class":297},[291,3077,3078],{"class":293,"line":932},[291,3079,2311],{"class":297},[291,3081,3082],{"class":293,"line":948},[291,3083,1079],{"class":297},[291,3085,3086],{"class":293,"line":965},[291,3087,2600],{"emptyLinePlaceholder":2599},[291,3089,3090,3092,3095,3097,3101,3104,3106,3108,3111,3114],{"class":293,"line":983},[291,3091,2138],{"class":297},[291,3093,3094],{"class":1213}," TestOrderDispatchedRenders",[291,3096,2787],{"class":297},[291,3098,3100],{"class":3099},"sHdIc","t",[291,3102,3103],{"class":297}," *",[291,3105,2867],{"class":308},[291,3107,253],{"class":297},[291,3109,3110],{"class":308},"T",[291,3112,3113],{"class":297},")",[291,3115,2153],{"class":297},[291,3117,3118,3121,3123,3126,3129,3131,3133,3135,3137,3140],{"class":293,"line":1000},[291,3119,3120],{"class":301},"    r",[291,3122,355],{"class":297},[291,3124,3125],{"class":301}," err ",[291,3127,3128],{"class":297},":=",[291,3130,309],{"class":301},[291,3132,253],{"class":297},[291,3134,1176],{"class":1213},[291,3136,2787],{"class":297},[291,3138,3139],{"class":1213},"config",[291,3141,3142],{"class":297},"())\n",[291,3144,3145,3148,3150,3153,3156],{"class":293,"line":1005},[291,3146,3147],{"class":2158},"    if",[291,3149,3125],{"class":301},[291,3151,3152],{"class":297},"!=",[291,3154,3155],{"class":297}," nil",[291,3157,2153],{"class":297},[291,3159,3160,3163,3165,3168,3170,3173],{"class":293,"line":1076},[291,3161,3162],{"class":301},"        t",[291,3164,253],{"class":297},[291,3166,3167],{"class":1213},"Fatal",[291,3169,2787],{"class":297},[291,3171,3172],{"class":301},"err",[291,3174,1883],{"class":297},[291,3176,3177],{"class":293,"line":1754},[291,3178,2311],{"class":297},[291,3180,3181],{"class":293,"line":1771},[291,3182,3184],{"class":3183},"sHwdD","    \u002F\u002F No first name: the {{first_name | there}} fallback must carry it.\n",[291,3186,3187,3190,3192,3194,3196,3199,3201,3203,3205,3208,3210,3212,3214,3216,3218,3220,3222,3224,3227,3229,3231,3233],{"class":293,"line":1786},[291,3188,3189],{"class":301},"    m",[291,3191,355],{"class":297},[291,3193,3125],{"class":301},[291,3195,3128],{"class":297},[291,3197,3198],{"class":301}," orderDispatched",[291,3200,253],{"class":297},[291,3202,1913],{"class":1213},[291,3204,2787],{"class":297},[291,3206,3207],{"class":301},"r",[291,3209,355],{"class":297},[291,3211,309],{"class":308},[291,3213,253],{"class":297},[291,3215,2721],{"class":308},[291,3217,1019],{"class":297},[291,3219,1261],{"class":301},[291,3221,325],{"class":297},[291,3223,345],{"class":297},[291,3225,3226],{"class":348},"ana@example.com",[291,3228,352],{"class":297},[291,3230,1705],{"class":297},[291,3232,2924],{"class":1213},[291,3234,3142],{"class":297},[291,3236,3237,3239,3241,3243,3245],{"class":293,"line":1856},[291,3238,3147],{"class":2158},[291,3240,3125],{"class":301},[291,3242,3152],{"class":297},[291,3244,3155],{"class":297},[291,3246,2153],{"class":297},[291,3248,3249,3251,3253,3255,3257,3259],{"class":293,"line":1861},[291,3250,3162],{"class":301},[291,3252,253],{"class":297},[291,3254,3167],{"class":1213},[291,3256,2787],{"class":297},[291,3258,3172],{"class":301},[291,3260,1883],{"class":297},[291,3262,3263],{"class":293,"line":1875},[291,3264,2311],{"class":297},[291,3266,3267,3269,3272,3274,3277,3279,3282,3284,3287,3290],{"class":293,"line":1880},[291,3268,3147],{"class":2158},[291,3270,3271],{"class":1213}," len",[291,3273,2787],{"class":297},[291,3275,3276],{"class":301},"m",[291,3278,253],{"class":297},[291,3280,3281],{"class":301},"Warnings",[291,3283,3113],{"class":297},[291,3285,3286],{"class":297}," >",[291,3288,3289],{"class":1069}," 0",[291,3291,2153],{"class":297},[291,3293,3295,3297,3299,3302,3304,3306,3309,3312,3314,3316,3319,3321,3323],{"class":293,"line":3294},34,[291,3296,3162],{"class":301},[291,3298,253],{"class":297},[291,3300,3301],{"class":1213},"Errorf",[291,3303,2787],{"class":297},[291,3305,352],{"class":297},[291,3307,3308],{"class":348},"warnings: ",[291,3310,3311],{"class":2545},"%q",[291,3313,352],{"class":297},[291,3315,355],{"class":297},[291,3317,3318],{"class":301}," m",[291,3320,253],{"class":297},[291,3322,3281],{"class":301},[291,3324,1883],{"class":297},[291,3326,3328],{"class":293,"line":3327},35,[291,3329,2311],{"class":297},[291,3331,3333,3335,3338,3340,3342,3345,3347,3349,3351,3354,3356,3358,3361,3363,3365],{"class":293,"line":3332},36,[291,3334,3147],{"class":2158},[291,3336,3337],{"class":297}," !",[291,3339,2858],{"class":301},[291,3341,253],{"class":297},[291,3343,3344],{"class":1213},"Contains",[291,3346,2787],{"class":297},[291,3348,3276],{"class":301},[291,3350,253],{"class":297},[291,3352,3353],{"class":301},"Text",[291,3355,355],{"class":297},[291,3357,345],{"class":297},[291,3359,3360],{"class":348},"Hi there,",[291,3362,352],{"class":297},[291,3364,3113],{"class":297},[291,3366,2153],{"class":297},[291,3368,3370,3372,3374,3376,3378,3380,3383,3386,3389,3391,3393,3395,3397,3399],{"class":293,"line":3369},37,[291,3371,3162],{"class":301},[291,3373,253],{"class":297},[291,3375,3301],{"class":1213},[291,3377,2787],{"class":297},[291,3379,352],{"class":297},[291,3381,3382],{"class":348},"fallback not used:",[291,3384,3385],{"class":301},"\\n",[291,3387,3388],{"class":2545},"%s",[291,3390,352],{"class":297},[291,3392,355],{"class":297},[291,3394,3318],{"class":301},[291,3396,253],{"class":297},[291,3398,3353],{"class":301},[291,3400,1883],{"class":297},[291,3402,3404],{"class":293,"line":3403},38,[291,3405,2311],{"class":297},[291,3407,3409,3411,3414,3416,3418,3420,3422,3424,3427,3429,3431,3433,3436,3439,3441,3443,3445],{"class":293,"line":3408},39,[291,3410,3147],{"class":2158},[291,3412,3413],{"class":301}," _",[291,3415,355],{"class":297},[291,3417,3125],{"class":301},[291,3419,3128],{"class":297},[291,3421,3318],{"class":301},[291,3423,253],{"class":297},[291,3425,3426],{"class":1213},"MIME",[291,3428,2787],{"class":297},[291,3430,2876],{"class":301},[291,3432,253],{"class":297},[291,3434,3435],{"class":1213},"Now",[291,3437,3438],{"class":297},"());",[291,3440,3125],{"class":301},[291,3442,3152],{"class":297},[291,3444,3155],{"class":297},[291,3446,2153],{"class":297},[291,3448,3450,3452,3454,3456,3458,3460],{"class":293,"line":3449},40,[291,3451,3162],{"class":301},[291,3453,253],{"class":297},[291,3455,3167],{"class":1213},[291,3457,2787],{"class":297},[291,3459,3172],{"class":301},[291,3461,1883],{"class":297},[291,3463,3465],{"class":293,"line":3464},41,[291,3466,2311],{"class":297},[291,3468,3470],{"class":293,"line":3469},42,[291,3471,1079],{"class":297},[291,3473,3475],{"class":293,"line":3474},43,[291,3476,2600],{"emptyLinePlaceholder":2599},[291,3478,3480,3482,3485,3487,3489,3491,3493,3495,3497,3499],{"class":293,"line":3479},44,[291,3481,2138],{"class":297},[291,3483,3484],{"class":1213}," TestOrdersRefuseOffers",[291,3486,2787],{"class":297},[291,3488,3100],{"class":3099},[291,3490,3103],{"class":297},[291,3492,2867],{"class":308},[291,3494,253],{"class":297},[291,3496,3110],{"class":308},[291,3498,3113],{"class":297},[291,3500,2153],{"class":297},[291,3502,3504,3507,3509,3511,3514,3516,3519,3521,3524,3526,3529,3531,3533,3536,3538],{"class":293,"line":3503},45,[291,3505,3506],{"class":301},"    src ",[291,3508,3128],{"class":297},[291,3510,345],{"class":297},[291,3512,3513],{"class":348},"---",[291,3515,3385],{"class":301},[291,3517,3518],{"class":348},"template: order.promo",[291,3520,3385],{"class":301},[291,3522,3523],{"class":348},"family: orders",[291,3525,3385],{"class":301},[291,3527,3528],{"class":348},"subject: Ten percent off",[291,3530,3385],{"class":301},[291,3532,3513],{"class":348},[291,3534,3535],{"class":301},"\\n\\n",[291,3537,352],{"class":297},[291,3539,3540],{"class":297}," +\n",[291,3542,3544,3546,3549,3551,3554,3557,3560,3562,3565,3567,3570,3572],{"class":293,"line":3543},46,[291,3545,2177],{"class":297},[291,3547,3548],{"class":348},"::offer",[291,3550,3385],{"class":301},[291,3552,3553],{"class":348},"## 10",[291,3555,3556],{"class":2545},"% o",[291,3558,3559],{"class":348},"ff with `TIDE10`",[291,3561,3535],{"class":301},[291,3563,3564],{"class":348},"Until Sunday.",[291,3566,3385],{"class":301},[291,3568,3569],{"class":348},"::",[291,3571,3385],{"class":301},[291,3573,2576],{"class":297},[291,3575,3577,3580,3582,3584,3586,3588,3590,3593,3596,3598,3600,3602,3605,3607,3609,3611,3613,3615,3618],{"class":293,"line":3576},47,[291,3578,3579],{"class":301},"    _",[291,3581,355],{"class":297},[291,3583,3125],{"class":301},[291,3585,3128],{"class":297},[291,3587,309],{"class":301},[291,3589,253],{"class":297},[291,3591,3592],{"class":1213},"Compile",[291,3594,3595],{"class":297},"[struct{}](",[291,3597,2768],{"class":301},[291,3599,355],{"class":297},[291,3601,345],{"class":297},[291,3603,3604],{"class":348},"order.promo",[291,3606,352],{"class":297},[291,3608,355],{"class":297},[291,3610,1429],{"class":297},[291,3612,2784],{"class":2254},[291,3614,2787],{"class":297},[291,3616,3617],{"class":301},"src",[291,3619,2793],{"class":297},[291,3621,3623,3626,3629,3632,3634,3636],{"class":293,"line":3622},48,[291,3624,3625],{"class":297},"    var",[291,3627,3628],{"class":301}," e ",[291,3630,3631],{"class":297},"*",[291,3633,1486],{"class":308},[291,3635,253],{"class":297},[291,3637,3638],{"class":308},"Error\n",[291,3640,3642,3644,3646,3648,3650,3653,3655,3657,3659,3662,3665,3667],{"class":293,"line":3641},49,[291,3643,3147],{"class":2158},[291,3645,3337],{"class":297},[291,3647,2849],{"class":301},[291,3649,253],{"class":297},[291,3651,3652],{"class":1213},"As",[291,3654,2787],{"class":297},[291,3656,3172],{"class":301},[291,3658,355],{"class":297},[291,3660,3661],{"class":297}," &",[291,3663,3664],{"class":301},"e",[291,3666,3113],{"class":297},[291,3668,2153],{"class":297},[291,3670,3672,3674,3676,3679,3681,3683,3686,3689,3691,3693,3696],{"class":293,"line":3671},50,[291,3673,3162],{"class":301},[291,3675,253],{"class":297},[291,3677,3678],{"class":1213},"Fatalf",[291,3680,2787],{"class":297},[291,3682,352],{"class":297},[291,3684,3685],{"class":348},"want an *ir.Error, got ",[291,3687,3688],{"class":2545},"%v",[291,3690,352],{"class":297},[291,3692,355],{"class":297},[291,3694,3695],{"class":301}," err",[291,3697,1883],{"class":297},[291,3699,3701],{"class":293,"line":3700},51,[291,3702,2311],{"class":297},[291,3704,3706,3709,3711,3714,3716,3718],{"class":293,"line":3705},52,[291,3707,3708],{"class":301},"    t",[291,3710,253],{"class":297},[291,3712,3713],{"class":1213},"Log",[291,3715,2787],{"class":297},[291,3717,3172],{"class":301},[291,3719,1883],{"class":297},[291,3721,3723],{"class":293,"line":3722},53,[291,3724,1079],{"class":297},[197,3726,3727,3728,3730,3731,3733],{},"The second test proves the family rule works: an ",[201,3729,1894],{}," in an ",[201,3732,1242],{}," template is a compile error at the module's position.",[282,3735,3740],{"className":3736,"code":3737,"filename":3738,"language":3739,"meta":287,"style":287},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","go test -v .\n","Terminal","bash",[201,3741,3742],{"__ignoreMap":287},[291,3743,3744,3746,3749,3752],{"class":293,"line":294},[291,3745,286],{"class":308},[291,3747,3748],{"class":348}," test",[291,3750,3751],{"class":348}," -v",[291,3753,3754],{"class":348}," .\n",[282,3756,3760],{"className":3757,"code":3758,"filename":3759,"language":1183,"meta":287},[1181],"=== RUN   TestOrderDispatchedRenders\n--- PASS: TestOrderDispatchedRenders (0.00s)\n=== RUN   TestOrdersRefuseOffers\n    main_test.go:54: order.promo:7:1: module \"offer\" is not allowed in family \"orders\"\n--- PASS: TestOrdersRefuseOffers (0.00s)\nPASS\n","Output",[201,3761,3758],{"__ignoreMap":287},[3763,3764,2118,3765,3767,3768,233,3771,233,3774,233,3777,3780,3781,3783,3784,3786,3787,3790],"note",{},[201,3766,1432],{}," CLI (",[201,3769,3770],{},"lint",[201,3772,3773],{},"tags",[201,3775,3776],{},"preview",[201,3778,3779],{},"serve",") is wired to ",[201,3782,228],{},". It finds a template's data type by looking its ",[201,3785,2522],{}," name up among the nine examples, so it can't check your templates. For your own templates, a render test like the one above does that job. To see your emails while you work, write each message's ",[201,3788,3789],{},"HTML"," to a file and open it in a browser.",[255,3792,3794],{"id":3793},"run-the-complete-program","Run the complete program",[197,3796,3797],{},"The pieces above in one file. It renders the order email for Ana and prints the subject and the plain-text part:",[282,3799,3801],{"className":284,"code":3800,"filename":218,"language":286,"meta":287,"style":287},"package main\n\nimport (\n    \"fmt\"\n    \"log\"\n    \"net\u002Fmail\"\n\n    \"github.com\u002Fsulv-io\u002Flttr\"\n    \"github.com\u002Fsulv-io\u002Flttr\u002Fdata\"\n    \"github.com\u002Fsulv-io\u002Flttr\u002Fir\"\n    \"github.com\u002Fsulv-io\u002Flttr\u002Ftheme\"\n)\n\n\u002F\u002F brand is the Theme: two palettes, three font stacks and the logo.\nvar brand = lttr.Theme{\n    Light: theme.Light{\n        Ink: \"#1B1F2A\", Body: \"#4A5060\", Secondary: \"#6A7080\", StrongBody: \"#343A48\",\n        Action: \"#1F3A68\", PillText: \"#FFFFFF\", Accent: \"#A8323A\",\n        Hairline: \"#E2E4EA\", RowRule: \"#ECEEF2\", NoticeBorder: \"#D5D8E0\",\n        Ground: \"#F5F6F8\", Canvas: \"#FFFFFF\",\n        WarnBg: \"#FEF5E0\", WarnBorder: \"#F0AE23\", WarnText: \"#5A3D04\",\n        OutOfStock: \"#9D1411\", BannerBg: \"#F8ECEC\", BannerText: \"#7A2229\",\n        Warm: \"#F4ECE4\", Sea: \"#E4ECF4\", Map: \"#E6EEF4\", Sun: \"#1F3A68\",\n    },\n    Dark: theme.Dark{\n        Canvas: \"#12151C\", Footer: \"#1A1E27\", Hairline: \"#2A2F3A\",\n        Headline: \"#F1F2F5\", Body: \"#A9AEBA\",\n        Action: \"#9DB8E6\", PillText: \"#0E1A30\",\n        CurrentStep: \"#E8878D\", AccentText: \"#F2B3B7\",\n        BannerBg: \"#2A1618\", BannerText: \"#F2B3B7\", Placeholder: \"#1B1F28\",\n        WarnBg: \"#2A2210\", WarnBorder: \"#6B5314\", WarnText: \"#F0D9A8\",\n        OutOfStock: \"#F08A85\",\n    },\n    Fonts: theme.Fonts{\n        Serif: \"Georgia,'Times New Roman',serif\",\n        Sans:  \"Arial,Helvetica,sans-serif\",\n        Mono:  \"'Courier New',Courier,monospace\",\n    },\n    Brand: theme.Brand{Name: \"Tidewater Books\", Logo: \"logo.png\", LogoDark: \"logo-dark.png\", LogoSize: 36},\n}\n\n\u002F\u002F families is the registry: one family per kind of email you send.\nvar families = lttr.NewRegistry(\n    lttr.Family{\n        Name:   \"orders\",\n        From:   mail.Address{Name: \"Tidewater Books\", Address: \"orders@tidewater.example\"},\n        Stream: lttr.Transactional,\n        Header: lttr.H1,\n        Footer: lttr.F2,\n        Copy: lttr.FooterCopy{\n            Note:      \"Questions about your order? Reply to this email.\",\n            About:     \"your order\",\n            Service:   \"This is a service email about {about}. [Notification settings]({prefs})\",\n            Address:   \"{brand} · {address}\",\n            TextLinks: []lttr.TextLink{{Label: \"Notification settings\", URL: \"{prefs}\"}},\n        },\n        Forbidden: []ir.Kind{ir.KindProducts, ir.KindOffer},\n    },\n    lttr.Family{\n        Name:     \"notes\",\n        From:     mail.Address{Name: \"Tidewater Notes\", Address: \"notes@tidewater.example\"},\n        Stream:   lttr.Marketing,\n        Header:   lttr.H3,\n        Masthead: \"Tidewater Notes · No. {issue}\",\n        Footer:   lttr.F1,\n        Copy: lttr.FooterCopy{\n            Nav:       []lttr.NavLink{{Label: \"New books\", Href: \"{site}\u002Fnew\"}, {Label: \"Events\", Href: \"{site}\u002Fevents\"}},\n            Reason:    \"You're getting Tidewater Notes because you signed up at {site}.\",\n            Links:     \"[Unsubscribe]({unsubscribe}) · [Preferences]({prefs})\",\n            Address:   \"{brand} · {address}\",\n            TextLinks: []lttr.TextLink{{Label: \"Unsubscribe\", URL: \"{unsubscribe}\"}, {Label: \"Preferences\", URL: \"{prefs}\"}},\n        },\n        Tracking: true,\n    },\n)\n\n\u002F\u002F config is everything the Renderer needs: domain, site, assets, theme,\n\u002F\u002F families and the entity address each region's mail is sent from.\nfunc config() lttr.Config {\n    return lttr.Config{\n        Domain:        \"tidewater.example\",\n        SiteURL:       \"https:\u002F\u002Ftidewater.example\",\n        AssetBase:     \"https:\u002F\u002Fcdn.tidewater.example\u002Femail\",\n        Theme:         brand,\n        Families:      families,\n        Entities:      map[string]lttr.Entity{\"UK\": {Address: \"4 Quay Street, Falmouth\"}},\n        DefaultRegion: \"UK\",\n    }\n}\n\n\u002F\u002F OrderDispatched is the data of the order.dispatched template.\ntype OrderDispatched struct {\n    OrderID   string     `json:\"order_id\"`\n    BookCount int        `json:\"book_count\"`\n    Arrives   string     `json:\"arrives\"`\n    Subtotal  data.Money `json:\"subtotal\"`\n    Delivery  data.Money `json:\"delivery\"`\n    TrackURL  string     `json:\"track_url\"`\n}\n\nconst orderDispatchedSrc = `---\ntemplate: order.dispatched\nfamily: orders\nsubject: \"Order {{order_id}} is on its way\"\npreheader: \"{{book_count}} books, arriving {{arrives}}.\"\n---\n\n::statement{eyebrow=\"Order {{order_id}}\"}\n# Your books are on their way.\n\nHi {{first_name | there}}, we've packed your order and handed it to the courier. It should arrive {{arrives}}.\n\n:button[Track parcel]{href=\"{{track_url}}\"}\n::\n\n::breakdown\n| Books · {{book_count}} | {{subtotal}} |\n| --- | ---: |\n| Delivery | {{delivery}} |\n::\n\n::signoff\n::\n`\n\nvar orderDispatched = lttr.MustCompile[OrderDispatched](families, \"order.dispatched\", []byte(orderDispatchedSrc))\n\nfunc main() {\n    r, err := lttr.NewRenderer(config())\n    if err != nil {\n        log.Fatal(err)\n    }\n    m, err := orderDispatched.Render(r,\n        lttr.Recipient{Address: \"ana@example.com\", FirstName: \"Ana\"},\n        OrderDispatched{\n            OrderID:   \"TW-3107\",\n            BookCount: 3,\n            Arrives:   \"on Thursday\",\n            Subtotal:  data.Money{Minor: 4297, Currency: data.GBPCode},\n            Delivery:  data.Money{Minor: 295, Currency: data.GBPCode},\n            TrackURL:  \"https:\u002F\u002Ftidewater.example\u002Forders\u002FTW-3107\",\n        })\n    if err != nil {\n        log.Fatal(err)\n    }\n    fmt.Println(m.Subject)\n    fmt.Print(m.Text)\n}\n",[201,3802,3803,3811,3815,3821,3830,3839,3848,3852,3860,3868,3876,3885,3889,3893,3898,3914,3928,3978,4016,4054,4080,4118,4156,4206,4210,4224,4262,4288,4314,4340,4378,4416,4430,4434,4448,4462,4476,4490,4494,4552,4556,4560,4565,4581,4591,4605,4643,4657,4671,4685,4699,4713,4727,4741,4756,4797,4802,4835,4840,4851,4866,4905,4920,4935,4950,4965,4980,5047,5062,5077,5092,5159,5164,5175,5180,5185,5190,5196,5202,5219,5232,5247,5262,5277,5288,5299,5342,5357,5362,5367,5372,5378,5389,5402,5415,5428,5445,5462,5475,5480,5485,5500,5506,5512,5518,5524,5529,5534,5539,5545,5550,5555,5560,5565,5570,5575,5580,5586,5592,5598,5603,5608,5613,5618,5623,5628,5671,5676,5688,5711,5724,5740,5745,5768,5806,5814,5830,5842,5858,5894,5930,5946,5952,5965,5980,5985,6007,6027],{"__ignoreMap":287},[291,3804,3805,3808],{"class":293,"line":294},[291,3806,3807],{"class":297},"package",[291,3809,3810],{"class":308}," main\n",[291,3812,3813],{"class":293,"line":319},[291,3814,2600],{"emptyLinePlaceholder":2599},[291,3816,3817,3819],{"class":293,"line":337},[291,3818,2839],{"class":2158},[291,3820,2842],{"class":297},[291,3822,3823,3825,3828],{"class":293,"line":401},[291,3824,1744],{"class":297},[291,3826,3827],{"class":308},"fmt",[291,3829,2576],{"class":297},[291,3831,3832,3834,3837],{"class":293,"line":446},[291,3833,1744],{"class":297},[291,3835,3836],{"class":308},"log",[291,3838,2576],{"class":297},[291,3840,3841,3843,3846],{"class":293,"line":491},[291,3842,1744],{"class":297},[291,3844,3845],{"class":308},"net\u002Fmail",[291,3847,2576],{"class":297},[291,3849,3850],{"class":293,"line":521},[291,3851,2600],{"emptyLinePlaceholder":2599},[291,3853,3854,3856,3858],{"class":293,"line":566},[291,3855,1744],{"class":297},[291,3857,2889],{"class":308},[291,3859,2576],{"class":297},[291,3861,3862,3864,3866],{"class":293,"line":611},[291,3863,1744],{"class":297},[291,3865,2898],{"class":308},[291,3867,2576],{"class":297},[291,3869,3870,3872,3874],{"class":293,"line":669},[291,3871,1744],{"class":297},[291,3873,2907],{"class":308},[291,3875,2576],{"class":297},[291,3877,3878,3880,3883],{"class":293,"line":675},[291,3879,1744],{"class":297},[291,3881,3882],{"class":308},"github.com\u002Fsulv-io\u002Flttr\u002Ftheme",[291,3884,2576],{"class":297},[291,3886,3887],{"class":293,"line":691},[291,3888,1883],{"class":297},[291,3890,3891],{"class":293,"line":736},[291,3892,2600],{"emptyLinePlaceholder":2599},[291,3894,3895],{"class":293,"line":766},[291,3896,3897],{"class":3183},"\u002F\u002F brand is the Theme: two palettes, three font stacks and the logo.\n",[291,3899,3900,3902,3904,3906,3908,3910,3912],{"class":293,"line":795},[291,3901,298],{"class":297},[291,3903,302],{"class":301},[291,3905,305],{"class":297},[291,3907,309],{"class":308},[291,3909,253],{"class":297},[291,3911,203],{"class":308},[291,3913,316],{"class":297},[291,3915,3916,3918,3920,3922,3924,3926],{"class":293,"line":826},[291,3917,322],{"class":301},[291,3919,325],{"class":297},[291,3921,328],{"class":308},[291,3923,253],{"class":297},[291,3925,268],{"class":308},[291,3927,316],{"class":297},[291,3929,3930,3932,3934,3936,3938,3940,3942,3944,3946,3948,3950,3952,3954,3956,3958,3960,3962,3964,3966,3968,3970,3972,3974,3976],{"class":293,"line":869},[291,3931,340],{"class":301},[291,3933,325],{"class":297},[291,3935,345],{"class":297},[291,3937,349],{"class":348},[291,3939,352],{"class":297},[291,3941,355],{"class":297},[291,3943,358],{"class":301},[291,3945,325],{"class":297},[291,3947,345],{"class":297},[291,3949,365],{"class":348},[291,3951,352],{"class":297},[291,3953,355],{"class":297},[291,3955,372],{"class":301},[291,3957,325],{"class":297},[291,3959,345],{"class":297},[291,3961,379],{"class":348},[291,3963,352],{"class":297},[291,3965,355],{"class":297},[291,3967,386],{"class":301},[291,3969,325],{"class":297},[291,3971,345],{"class":297},[291,3973,393],{"class":348},[291,3975,352],{"class":297},[291,3977,398],{"class":297},[291,3979,3980,3982,3984,3986,3988,3990,3992,3994,3996,3998,4000,4002,4004,4006,4008,4010,4012,4014],{"class":293,"line":911},[291,3981,404],{"class":301},[291,3983,325],{"class":297},[291,3985,345],{"class":297},[291,3987,411],{"class":348},[291,3989,352],{"class":297},[291,3991,355],{"class":297},[291,3993,418],{"class":301},[291,3995,325],{"class":297},[291,3997,345],{"class":297},[291,3999,425],{"class":348},[291,4001,352],{"class":297},[291,4003,355],{"class":297},[291,4005,432],{"class":301},[291,4007,325],{"class":297},[291,4009,345],{"class":297},[291,4011,439],{"class":348},[291,4013,352],{"class":297},[291,4015,398],{"class":297},[291,4017,4018,4020,4022,4024,4026,4028,4030,4032,4034,4036,4038,4040,4042,4044,4046,4048,4050,4052],{"class":293,"line":927},[291,4019,449],{"class":301},[291,4021,325],{"class":297},[291,4023,345],{"class":297},[291,4025,456],{"class":348},[291,4027,352],{"class":297},[291,4029,355],{"class":297},[291,4031,463],{"class":301},[291,4033,325],{"class":297},[291,4035,345],{"class":297},[291,4037,470],{"class":348},[291,4039,352],{"class":297},[291,4041,355],{"class":297},[291,4043,477],{"class":301},[291,4045,325],{"class":297},[291,4047,345],{"class":297},[291,4049,484],{"class":348},[291,4051,352],{"class":297},[291,4053,398],{"class":297},[291,4055,4056,4058,4060,4062,4064,4066,4068,4070,4072,4074,4076,4078],{"class":293,"line":932},[291,4057,494],{"class":301},[291,4059,325],{"class":297},[291,4061,345],{"class":297},[291,4063,501],{"class":348},[291,4065,352],{"class":297},[291,4067,355],{"class":297},[291,4069,508],{"class":301},[291,4071,325],{"class":297},[291,4073,345],{"class":297},[291,4075,425],{"class":348},[291,4077,352],{"class":297},[291,4079,398],{"class":297},[291,4081,4082,4084,4086,4088,4090,4092,4094,4096,4098,4100,4102,4104,4106,4108,4110,4112,4114,4116],{"class":293,"line":948},[291,4083,524],{"class":301},[291,4085,325],{"class":297},[291,4087,345],{"class":297},[291,4089,531],{"class":348},[291,4091,352],{"class":297},[291,4093,355],{"class":297},[291,4095,538],{"class":301},[291,4097,325],{"class":297},[291,4099,345],{"class":297},[291,4101,545],{"class":348},[291,4103,352],{"class":297},[291,4105,355],{"class":297},[291,4107,552],{"class":301},[291,4109,325],{"class":297},[291,4111,345],{"class":297},[291,4113,559],{"class":348},[291,4115,352],{"class":297},[291,4117,398],{"class":297},[291,4119,4120,4122,4124,4126,4128,4130,4132,4134,4136,4138,4140,4142,4144,4146,4148,4150,4152,4154],{"class":293,"line":965},[291,4121,569],{"class":301},[291,4123,325],{"class":297},[291,4125,345],{"class":297},[291,4127,576],{"class":348},[291,4129,352],{"class":297},[291,4131,355],{"class":297},[291,4133,583],{"class":301},[291,4135,325],{"class":297},[291,4137,345],{"class":297},[291,4139,590],{"class":348},[291,4141,352],{"class":297},[291,4143,355],{"class":297},[291,4145,597],{"class":301},[291,4147,325],{"class":297},[291,4149,345],{"class":297},[291,4151,604],{"class":348},[291,4153,352],{"class":297},[291,4155,398],{"class":297},[291,4157,4158,4160,4162,4164,4166,4168,4170,4172,4174,4176,4178,4180,4182,4184,4186,4188,4190,4192,4194,4196,4198,4200,4202,4204],{"class":293,"line":983},[291,4159,614],{"class":301},[291,4161,325],{"class":297},[291,4163,345],{"class":297},[291,4165,621],{"class":348},[291,4167,352],{"class":297},[291,4169,355],{"class":297},[291,4171,628],{"class":301},[291,4173,325],{"class":297},[291,4175,345],{"class":297},[291,4177,635],{"class":348},[291,4179,352],{"class":297},[291,4181,355],{"class":297},[291,4183,642],{"class":301},[291,4185,325],{"class":297},[291,4187,345],{"class":297},[291,4189,649],{"class":348},[291,4191,352],{"class":297},[291,4193,355],{"class":297},[291,4195,656],{"class":301},[291,4197,325],{"class":297},[291,4199,345],{"class":297},[291,4201,411],{"class":348},[291,4203,352],{"class":297},[291,4205,398],{"class":297},[291,4207,4208],{"class":293,"line":1000},[291,4209,672],{"class":297},[291,4211,4212,4214,4216,4218,4220,4222],{"class":293,"line":1005},[291,4213,678],{"class":301},[291,4215,325],{"class":297},[291,4217,328],{"class":308},[291,4219,253],{"class":297},[291,4221,271],{"class":308},[291,4223,316],{"class":297},[291,4225,4226,4228,4230,4232,4234,4236,4238,4240,4242,4244,4246,4248,4250,4252,4254,4256,4258,4260],{"class":293,"line":1076},[291,4227,694],{"class":301},[291,4229,325],{"class":297},[291,4231,345],{"class":297},[291,4233,701],{"class":348},[291,4235,352],{"class":297},[291,4237,355],{"class":297},[291,4239,708],{"class":301},[291,4241,325],{"class":297},[291,4243,345],{"class":297},[291,4245,715],{"class":348},[291,4247,352],{"class":297},[291,4249,355],{"class":297},[291,4251,722],{"class":301},[291,4253,325],{"class":297},[291,4255,345],{"class":297},[291,4257,729],{"class":348},[291,4259,352],{"class":297},[291,4261,398],{"class":297},[291,4263,4264,4266,4268,4270,4272,4274,4276,4278,4280,4282,4284,4286],{"class":293,"line":1754},[291,4265,739],{"class":301},[291,4267,325],{"class":297},[291,4269,345],{"class":297},[291,4271,746],{"class":348},[291,4273,352],{"class":297},[291,4275,355],{"class":297},[291,4277,358],{"class":301},[291,4279,325],{"class":297},[291,4281,345],{"class":297},[291,4283,759],{"class":348},[291,4285,352],{"class":297},[291,4287,398],{"class":297},[291,4289,4290,4292,4294,4296,4298,4300,4302,4304,4306,4308,4310,4312],{"class":293,"line":1771},[291,4291,404],{"class":301},[291,4293,325],{"class":297},[291,4295,345],{"class":297},[291,4297,775],{"class":348},[291,4299,352],{"class":297},[291,4301,355],{"class":297},[291,4303,418],{"class":301},[291,4305,325],{"class":297},[291,4307,345],{"class":297},[291,4309,788],{"class":348},[291,4311,352],{"class":297},[291,4313,398],{"class":297},[291,4315,4316,4318,4320,4322,4324,4326,4328,4330,4332,4334,4336,4338],{"class":293,"line":1786},[291,4317,798],{"class":301},[291,4319,325],{"class":297},[291,4321,345],{"class":297},[291,4323,805],{"class":348},[291,4325,352],{"class":297},[291,4327,355],{"class":297},[291,4329,812],{"class":301},[291,4331,325],{"class":297},[291,4333,345],{"class":297},[291,4335,819],{"class":348},[291,4337,352],{"class":297},[291,4339,398],{"class":297},[291,4341,4342,4344,4346,4348,4350,4352,4354,4356,4358,4360,4362,4364,4366,4368,4370,4372,4374,4376],{"class":293,"line":1856},[291,4343,829],{"class":301},[291,4345,325],{"class":297},[291,4347,345],{"class":297},[291,4349,836],{"class":348},[291,4351,352],{"class":297},[291,4353,355],{"class":297},[291,4355,597],{"class":301},[291,4357,325],{"class":297},[291,4359,345],{"class":297},[291,4361,819],{"class":348},[291,4363,352],{"class":297},[291,4365,355],{"class":297},[291,4367,855],{"class":301},[291,4369,325],{"class":297},[291,4371,345],{"class":297},[291,4373,862],{"class":348},[291,4375,352],{"class":297},[291,4377,398],{"class":297},[291,4379,4380,4382,4384,4386,4388,4390,4392,4394,4396,4398,4400,4402,4404,4406,4408,4410,4412,4414],{"class":293,"line":1861},[291,4381,524],{"class":301},[291,4383,325],{"class":297},[291,4385,345],{"class":297},[291,4387,878],{"class":348},[291,4389,352],{"class":297},[291,4391,355],{"class":297},[291,4393,538],{"class":301},[291,4395,325],{"class":297},[291,4397,345],{"class":297},[291,4399,891],{"class":348},[291,4401,352],{"class":297},[291,4403,355],{"class":297},[291,4405,552],{"class":301},[291,4407,325],{"class":297},[291,4409,345],{"class":297},[291,4411,904],{"class":348},[291,4413,352],{"class":297},[291,4415,398],{"class":297},[291,4417,4418,4420,4422,4424,4426,4428],{"class":293,"line":1875},[291,4419,569],{"class":301},[291,4421,325],{"class":297},[291,4423,345],{"class":297},[291,4425,920],{"class":348},[291,4427,352],{"class":297},[291,4429,398],{"class":297},[291,4431,4432],{"class":293,"line":1880},[291,4433,672],{"class":297},[291,4435,4436,4438,4440,4442,4444,4446],{"class":293,"line":3294},[291,4437,935],{"class":301},[291,4439,325],{"class":297},[291,4441,328],{"class":308},[291,4443,253],{"class":297},[291,4445,275],{"class":308},[291,4447,316],{"class":297},[291,4449,4450,4452,4454,4456,4458,4460],{"class":293,"line":3327},[291,4451,951],{"class":301},[291,4453,325],{"class":297},[291,4455,345],{"class":297},[291,4457,958],{"class":348},[291,4459,352],{"class":297},[291,4461,398],{"class":297},[291,4463,4464,4466,4468,4470,4472,4474],{"class":293,"line":3332},[291,4465,968],{"class":301},[291,4467,325],{"class":297},[291,4469,973],{"class":297},[291,4471,976],{"class":348},[291,4473,352],{"class":297},[291,4475,398],{"class":297},[291,4477,4478,4480,4482,4484,4486,4488],{"class":293,"line":3369},[291,4479,986],{"class":301},[291,4481,325],{"class":297},[291,4483,973],{"class":297},[291,4485,993],{"class":348},[291,4487,352],{"class":297},[291,4489,398],{"class":297},[291,4491,4492],{"class":293,"line":3403},[291,4493,672],{"class":297},[291,4495,4496,4498,4500,4502,4504,4506,4508,4510,4512,4514,4516,4518,4520,4522,4524,4526,4528,4530,4532,4534,4536,4538,4540,4542,4544,4546,4548,4550],{"class":293,"line":3408},[291,4497,1008],{"class":301},[291,4499,325],{"class":297},[291,4501,328],{"class":308},[291,4503,253],{"class":297},[291,4505,279],{"class":308},[291,4507,1019],{"class":297},[291,4509,1022],{"class":301},[291,4511,325],{"class":297},[291,4513,345],{"class":297},[291,4515,1029],{"class":348},[291,4517,352],{"class":297},[291,4519,355],{"class":297},[291,4521,1036],{"class":301},[291,4523,325],{"class":297},[291,4525,345],{"class":297},[291,4527,1043],{"class":348},[291,4529,352],{"class":297},[291,4531,355],{"class":297},[291,4533,1050],{"class":301},[291,4535,325],{"class":297},[291,4537,345],{"class":297},[291,4539,1057],{"class":348},[291,4541,352],{"class":297},[291,4543,355],{"class":297},[291,4545,1064],{"class":301},[291,4547,325],{"class":297},[291,4549,1070],{"class":1069},[291,4551,1073],{"class":297},[291,4553,4554],{"class":293,"line":3449},[291,4555,1079],{"class":297},[291,4557,4558],{"class":293,"line":3464},[291,4559,2600],{"emptyLinePlaceholder":2599},[291,4561,4562],{"class":293,"line":3469},[291,4563,4564],{"class":3183},"\u002F\u002F families is the registry: one family per kind of email you send.\n",[291,4566,4567,4569,4571,4573,4575,4577,4579],{"class":293,"line":3474},[291,4568,298],{"class":297},[291,4570,1204],{"class":301},[291,4572,305],{"class":297},[291,4574,309],{"class":301},[291,4576,253],{"class":297},[291,4578,1214],{"class":1213},[291,4580,1217],{"class":297},[291,4582,4583,4585,4587,4589],{"class":293,"line":3479},[291,4584,1222],{"class":308},[291,4586,253],{"class":297},[291,4588,1227],{"class":308},[291,4590,316],{"class":297},[291,4592,4593,4595,4597,4599,4601,4603],{"class":293,"line":3503},[291,4594,1234],{"class":301},[291,4596,325],{"class":297},[291,4598,1239],{"class":297},[291,4600,1242],{"class":348},[291,4602,352],{"class":297},[291,4604,398],{"class":297},[291,4606,4607,4609,4611,4613,4615,4617,4619,4621,4623,4625,4627,4629,4631,4633,4635,4637,4639,4641],{"class":293,"line":3543},[291,4608,1251],{"class":301},[291,4610,325],{"class":297},[291,4612,1256],{"class":308},[291,4614,253],{"class":297},[291,4616,1261],{"class":308},[291,4618,1019],{"class":297},[291,4620,1022],{"class":301},[291,4622,325],{"class":297},[291,4624,345],{"class":297},[291,4626,1029],{"class":348},[291,4628,352],{"class":297},[291,4630,355],{"class":297},[291,4632,1278],{"class":301},[291,4634,325],{"class":297},[291,4636,345],{"class":297},[291,4638,1285],{"class":348},[291,4640,352],{"class":297},[291,4642,1073],{"class":297},[291,4644,4645,4647,4649,4651,4653,4655],{"class":293,"line":3576},[291,4646,1294],{"class":301},[291,4648,325],{"class":297},[291,4650,309],{"class":301},[291,4652,253],{"class":297},[291,4654,1303],{"class":301},[291,4656,398],{"class":297},[291,4658,4659,4661,4663,4665,4667,4669],{"class":293,"line":3622},[291,4660,1310],{"class":301},[291,4662,325],{"class":297},[291,4664,309],{"class":301},[291,4666,253],{"class":297},[291,4668,1319],{"class":301},[291,4670,398],{"class":297},[291,4672,4673,4675,4677,4679,4681,4683],{"class":293,"line":3641},[291,4674,1326],{"class":301},[291,4676,325],{"class":297},[291,4678,309],{"class":301},[291,4680,253],{"class":297},[291,4682,1335],{"class":301},[291,4684,398],{"class":297},[291,4686,4687,4689,4691,4693,4695,4697],{"class":293,"line":3671},[291,4688,1342],{"class":301},[291,4690,325],{"class":297},[291,4692,309],{"class":308},[291,4694,253],{"class":297},[291,4696,1351],{"class":308},[291,4698,316],{"class":297},[291,4700,4701,4703,4705,4707,4709,4711],{"class":293,"line":3700},[291,4702,1358],{"class":301},[291,4704,325],{"class":297},[291,4706,1363],{"class":297},[291,4708,1366],{"class":348},[291,4710,352],{"class":297},[291,4712,398],{"class":297},[291,4714,4715,4717,4719,4721,4723,4725],{"class":293,"line":3705},[291,4716,1375],{"class":301},[291,4718,325],{"class":297},[291,4720,1380],{"class":297},[291,4722,1383],{"class":348},[291,4724,352],{"class":297},[291,4726,398],{"class":297},[291,4728,4729,4731,4733,4735,4737,4739],{"class":293,"line":3722},[291,4730,1392],{"class":301},[291,4732,325],{"class":297},[291,4734,1239],{"class":297},[291,4736,1399],{"class":348},[291,4738,352],{"class":297},[291,4740,398],{"class":297},[291,4742,4744,4746,4748,4750,4752,4754],{"class":293,"line":4743},54,[291,4745,1408],{"class":301},[291,4747,325],{"class":297},[291,4749,1239],{"class":297},[291,4751,1415],{"class":348},[291,4753,352],{"class":297},[291,4755,398],{"class":297},[291,4757,4759,4761,4763,4765,4767,4769,4771,4773,4775,4777,4779,4781,4783,4785,4787,4789,4791,4793,4795],{"class":293,"line":4758},55,[291,4760,1424],{"class":301},[291,4762,325],{"class":297},[291,4764,1429],{"class":297},[291,4766,1432],{"class":308},[291,4768,253],{"class":297},[291,4770,1437],{"class":308},[291,4772,1440],{"class":297},[291,4774,1443],{"class":301},[291,4776,325],{"class":297},[291,4778,345],{"class":297},[291,4780,1450],{"class":348},[291,4782,352],{"class":297},[291,4784,355],{"class":297},[291,4786,1457],{"class":301},[291,4788,325],{"class":297},[291,4790,345],{"class":297},[291,4792,1464],{"class":348},[291,4794,352],{"class":297},[291,4796,1469],{"class":297},[291,4798,4800],{"class":293,"line":4799},56,[291,4801,1474],{"class":297},[291,4803,4805,4807,4809,4811,4813,4815,4817,4819,4821,4823,4825,4827,4829,4831,4833],{"class":293,"line":4804},57,[291,4806,1479],{"class":301},[291,4808,325],{"class":297},[291,4810,1429],{"class":297},[291,4812,1486],{"class":308},[291,4814,253],{"class":297},[291,4816,1491],{"class":308},[291,4818,1019],{"class":297},[291,4820,1486],{"class":301},[291,4822,253],{"class":297},[291,4824,1500],{"class":301},[291,4826,355],{"class":297},[291,4828,1505],{"class":301},[291,4830,253],{"class":297},[291,4832,1510],{"class":301},[291,4834,1073],{"class":297},[291,4836,4838],{"class":293,"line":4837},58,[291,4839,672],{"class":297},[291,4841,4843,4845,4847,4849],{"class":293,"line":4842},59,[291,4844,1222],{"class":308},[291,4846,253],{"class":297},[291,4848,1227],{"class":308},[291,4850,316],{"class":297},[291,4852,4854,4856,4858,4860,4862,4864],{"class":293,"line":4853},60,[291,4855,1234],{"class":301},[291,4857,325],{"class":297},[291,4859,1380],{"class":297},[291,4861,1537],{"class":348},[291,4863,352],{"class":297},[291,4865,398],{"class":297},[291,4867,4869,4871,4873,4875,4877,4879,4881,4883,4885,4887,4889,4891,4893,4895,4897,4899,4901,4903],{"class":293,"line":4868},61,[291,4870,1251],{"class":301},[291,4872,325],{"class":297},[291,4874,1550],{"class":308},[291,4876,253],{"class":297},[291,4878,1261],{"class":308},[291,4880,1019],{"class":297},[291,4882,1022],{"class":301},[291,4884,325],{"class":297},[291,4886,345],{"class":297},[291,4888,1565],{"class":348},[291,4890,352],{"class":297},[291,4892,355],{"class":297},[291,4894,1278],{"class":301},[291,4896,325],{"class":297},[291,4898,345],{"class":297},[291,4900,1578],{"class":348},[291,4902,352],{"class":297},[291,4904,1073],{"class":297},[291,4906,4908,4910,4912,4914,4916,4918],{"class":293,"line":4907},62,[291,4909,1294],{"class":301},[291,4911,325],{"class":297},[291,4913,1591],{"class":301},[291,4915,253],{"class":297},[291,4917,1596],{"class":301},[291,4919,398],{"class":297},[291,4921,4923,4925,4927,4929,4931,4933],{"class":293,"line":4922},63,[291,4924,1310],{"class":301},[291,4926,325],{"class":297},[291,4928,1591],{"class":301},[291,4930,253],{"class":297},[291,4932,1611],{"class":301},[291,4934,398],{"class":297},[291,4936,4938,4940,4942,4944,4946,4948],{"class":293,"line":4937},64,[291,4939,1618],{"class":301},[291,4941,325],{"class":297},[291,4943,345],{"class":297},[291,4945,1625],{"class":348},[291,4947,352],{"class":297},[291,4949,398],{"class":297},[291,4951,4953,4955,4957,4959,4961,4963],{"class":293,"line":4952},65,[291,4954,1326],{"class":301},[291,4956,325],{"class":297},[291,4958,1591],{"class":301},[291,4960,253],{"class":297},[291,4962,1642],{"class":301},[291,4964,398],{"class":297},[291,4966,4968,4970,4972,4974,4976,4978],{"class":293,"line":4967},66,[291,4969,1342],{"class":301},[291,4971,325],{"class":297},[291,4973,309],{"class":308},[291,4975,253],{"class":297},[291,4977,1351],{"class":308},[291,4979,316],{"class":297},[291,4981,4983,4985,4987,4989,4991,4993,4995,4997,4999,5001,5003,5005,5007,5009,5011,5013,5015,5017,5019,5021,5023,5025,5027,5029,5031,5033,5035,5037,5039,5041,5043,5045],{"class":293,"line":4982},67,[291,4984,1663],{"class":301},[291,4986,325],{"class":297},[291,4988,1668],{"class":297},[291,4990,1432],{"class":308},[291,4992,253],{"class":297},[291,4994,1675],{"class":308},[291,4996,1440],{"class":297},[291,4998,1443],{"class":301},[291,5000,325],{"class":297},[291,5002,345],{"class":297},[291,5004,1686],{"class":348},[291,5006,352],{"class":297},[291,5008,355],{"class":297},[291,5010,1693],{"class":301},[291,5012,325],{"class":297},[291,5014,345],{"class":297},[291,5016,1700],{"class":348},[291,5018,352],{"class":297},[291,5020,1705],{"class":297},[291,5022,1708],{"class":297},[291,5024,1443],{"class":301},[291,5026,325],{"class":297},[291,5028,345],{"class":297},[291,5030,1717],{"class":348},[291,5032,352],{"class":297},[291,5034,355],{"class":297},[291,5036,1693],{"class":301},[291,5038,325],{"class":297},[291,5040,345],{"class":297},[291,5042,1730],{"class":348},[291,5044,352],{"class":297},[291,5046,1469],{"class":297},[291,5048,5050,5052,5054,5056,5058,5060],{"class":293,"line":5049},68,[291,5051,1739],{"class":301},[291,5053,325],{"class":297},[291,5055,1744],{"class":297},[291,5057,1747],{"class":348},[291,5059,352],{"class":297},[291,5061,398],{"class":297},[291,5063,5065,5067,5069,5071,5073,5075],{"class":293,"line":5064},69,[291,5066,1757],{"class":301},[291,5068,325],{"class":297},[291,5070,1380],{"class":297},[291,5072,1764],{"class":348},[291,5074,352],{"class":297},[291,5076,398],{"class":297},[291,5078,5080,5082,5084,5086,5088,5090],{"class":293,"line":5079},70,[291,5081,1408],{"class":301},[291,5083,325],{"class":297},[291,5085,1239],{"class":297},[291,5087,1415],{"class":348},[291,5089,352],{"class":297},[291,5091,398],{"class":297},[291,5093,5095,5097,5099,5101,5103,5105,5107,5109,5111,5113,5115,5117,5119,5121,5123,5125,5127,5129,5131,5133,5135,5137,5139,5141,5143,5145,5147,5149,5151,5153,5155,5157],{"class":293,"line":5094},71,[291,5096,1424],{"class":301},[291,5098,325],{"class":297},[291,5100,1429],{"class":297},[291,5102,1432],{"class":308},[291,5104,253],{"class":297},[291,5106,1437],{"class":308},[291,5108,1440],{"class":297},[291,5110,1443],{"class":301},[291,5112,325],{"class":297},[291,5114,345],{"class":297},[291,5116,1809],{"class":348},[291,5118,352],{"class":297},[291,5120,355],{"class":297},[291,5122,1457],{"class":301},[291,5124,325],{"class":297},[291,5126,345],{"class":297},[291,5128,1822],{"class":348},[291,5130,352],{"class":297},[291,5132,1705],{"class":297},[291,5134,1708],{"class":297},[291,5136,1443],{"class":301},[291,5138,325],{"class":297},[291,5140,345],{"class":297},[291,5142,1837],{"class":348},[291,5144,352],{"class":297},[291,5146,355],{"class":297},[291,5148,1457],{"class":301},[291,5150,325],{"class":297},[291,5152,345],{"class":297},[291,5154,1464],{"class":348},[291,5156,352],{"class":297},[291,5158,1469],{"class":297},[291,5160,5162],{"class":293,"line":5161},72,[291,5163,1474],{"class":297},[291,5165,5167,5169,5171,5173],{"class":293,"line":5166},73,[291,5168,1864],{"class":301},[291,5170,325],{"class":297},[291,5172,1870],{"class":1869},[291,5174,398],{"class":297},[291,5176,5178],{"class":293,"line":5177},74,[291,5179,672],{"class":297},[291,5181,5183],{"class":293,"line":5182},75,[291,5184,1883],{"class":297},[291,5186,5188],{"class":293,"line":5187},76,[291,5189,2600],{"emptyLinePlaceholder":2599},[291,5191,5193],{"class":293,"line":5192},77,[291,5194,5195],{"class":3183},"\u002F\u002F config is everything the Renderer needs: domain, site, assets, theme,\n",[291,5197,5199],{"class":293,"line":5198},78,[291,5200,5201],{"class":3183},"\u002F\u002F families and the entity address each region's mail is sent from.\n",[291,5203,5205,5207,5209,5211,5213,5215,5217],{"class":293,"line":5204},79,[291,5206,2138],{"class":297},[291,5208,2141],{"class":1213},[291,5210,2144],{"class":297},[291,5212,309],{"class":308},[291,5214,253],{"class":297},[291,5216,211],{"class":308},[291,5218,2153],{"class":297},[291,5220,5222,5224,5226,5228,5230],{"class":293,"line":5221},80,[291,5223,2159],{"class":2158},[291,5225,309],{"class":308},[291,5227,253],{"class":297},[291,5229,211],{"class":308},[291,5231,316],{"class":297},[291,5233,5235,5237,5239,5241,5243,5245],{"class":293,"line":5234},81,[291,5236,2172],{"class":301},[291,5238,325],{"class":297},[291,5240,2177],{"class":297},[291,5242,2180],{"class":348},[291,5244,352],{"class":297},[291,5246,398],{"class":297},[291,5248,5250,5252,5254,5256,5258,5260],{"class":293,"line":5249},82,[291,5251,2189],{"class":301},[291,5253,325],{"class":297},[291,5255,2194],{"class":297},[291,5257,2197],{"class":348},[291,5259,352],{"class":297},[291,5261,398],{"class":297},[291,5263,5265,5267,5269,5271,5273,5275],{"class":293,"line":5264},83,[291,5266,2206],{"class":301},[291,5268,325],{"class":297},[291,5270,1380],{"class":297},[291,5272,2213],{"class":348},[291,5274,352],{"class":297},[291,5276,398],{"class":297},[291,5278,5280,5282,5284,5286],{"class":293,"line":5279},84,[291,5281,2222],{"class":301},[291,5283,325],{"class":297},[291,5285,2227],{"class":301},[291,5287,398],{"class":297},[291,5289,5291,5293,5295,5297],{"class":293,"line":5290},85,[291,5292,2234],{"class":301},[291,5294,325],{"class":297},[291,5296,2239],{"class":301},[291,5298,398],{"class":297},[291,5300,5302,5304,5306,5308,5310,5312,5314,5316,5318,5320,5322,5324,5326,5328,5330,5332,5334,5336,5338,5340],{"class":293,"line":5301},86,[291,5303,2246],{"class":301},[291,5305,325],{"class":297},[291,5307,2251],{"class":297},[291,5309,2255],{"class":2254},[291,5311,2258],{"class":297},[291,5313,1432],{"class":308},[291,5315,253],{"class":297},[291,5317,2265],{"class":308},[291,5319,1019],{"class":297},[291,5321,352],{"class":297},[291,5323,2272],{"class":348},[291,5325,352],{"class":297},[291,5327,325],{"class":297},[291,5329,1708],{"class":297},[291,5331,1261],{"class":301},[291,5333,325],{"class":297},[291,5335,345],{"class":297},[291,5337,2287],{"class":348},[291,5339,352],{"class":297},[291,5341,1469],{"class":297},[291,5343,5345,5347,5349,5351,5353,5355],{"class":293,"line":5344},87,[291,5346,2296],{"class":301},[291,5348,325],{"class":297},[291,5350,345],{"class":297},[291,5352,2272],{"class":348},[291,5354,352],{"class":297},[291,5356,398],{"class":297},[291,5358,5360],{"class":293,"line":5359},88,[291,5361,2311],{"class":297},[291,5363,5365],{"class":293,"line":5364},89,[291,5366,1079],{"class":297},[291,5368,5370],{"class":293,"line":5369},90,[291,5371,2600],{"emptyLinePlaceholder":2599},[291,5373,5375],{"class":293,"line":5374},91,[291,5376,5377],{"class":3183},"\u002F\u002F OrderDispatched is the data of the order.dispatched template.\n",[291,5379,5381,5383,5385,5387],{"class":293,"line":5380},92,[291,5382,2405],{"class":297},[291,5384,2408],{"class":308},[291,5386,2411],{"class":297},[291,5388,2153],{"class":297},[291,5390,5392,5394,5396,5398,5400],{"class":293,"line":5391},93,[291,5393,2418],{"class":301},[291,5395,2255],{"class":2254},[291,5397,2423],{"class":297},[291,5399,2426],{"class":348},[291,5401,2429],{"class":297},[291,5403,5405,5407,5409,5411,5413],{"class":293,"line":5404},94,[291,5406,2434],{"class":301},[291,5408,2437],{"class":2254},[291,5410,2440],{"class":297},[291,5412,2443],{"class":348},[291,5414,2429],{"class":297},[291,5416,5418,5420,5422,5424,5426],{"class":293,"line":5417},95,[291,5419,2450],{"class":301},[291,5421,2255],{"class":2254},[291,5423,2423],{"class":297},[291,5425,2457],{"class":348},[291,5427,2429],{"class":297},[291,5429,5431,5433,5435,5437,5439,5441,5443],{"class":293,"line":5430},96,[291,5432,2464],{"class":301},[291,5434,2467],{"class":308},[291,5436,253],{"class":297},[291,5438,2472],{"class":308},[291,5440,2475],{"class":297},[291,5442,2478],{"class":348},[291,5444,2429],{"class":297},[291,5446,5448,5450,5452,5454,5456,5458,5460],{"class":293,"line":5447},97,[291,5449,2485],{"class":301},[291,5451,2467],{"class":308},[291,5453,253],{"class":297},[291,5455,2472],{"class":308},[291,5457,2475],{"class":297},[291,5459,2496],{"class":348},[291,5461,2429],{"class":297},[291,5463,5465,5467,5469,5471,5473],{"class":293,"line":5464},98,[291,5466,2503],{"class":301},[291,5468,2255],{"class":2254},[291,5470,2423],{"class":297},[291,5472,2510],{"class":348},[291,5474,2429],{"class":297},[291,5476,5478],{"class":293,"line":5477},99,[291,5479,1079],{"class":297},[291,5481,5483],{"class":293,"line":5482},100,[291,5484,2600],{"emptyLinePlaceholder":2599},[291,5486,5488,5491,5494,5496,5498],{"class":293,"line":5487},101,[291,5489,5490],{"class":297},"const",[291,5492,5493],{"class":301}," orderDispatchedSrc ",[291,5495,305],{"class":297},[291,5497,2475],{"class":297},[291,5499,2540],{"class":348},[291,5501,5503],{"class":293,"line":5502},102,[291,5504,5505],{"class":348},"template: order.dispatched\n",[291,5507,5509],{"class":293,"line":5508},103,[291,5510,5511],{"class":348},"family: orders\n",[291,5513,5515],{"class":293,"line":5514},104,[291,5516,5517],{"class":348},"subject: \"Order {{order_id}} is on its way\"\n",[291,5519,5521],{"class":293,"line":5520},105,[291,5522,5523],{"class":348},"preheader: \"{{book_count}} books, arriving {{arrives}}.\"\n",[291,5525,5527],{"class":293,"line":5526},106,[291,5528,2540],{"class":348},[291,5530,5532],{"class":293,"line":5531},107,[291,5533,2600],{"emptyLinePlaceholder":2599},[291,5535,5537],{"class":293,"line":5536},108,[291,5538,2605],{"class":348},[291,5540,5542],{"class":293,"line":5541},109,[291,5543,5544],{"class":348},"# Your books are on their way.\n",[291,5546,5548],{"class":293,"line":5547},110,[291,5549,2600],{"emptyLinePlaceholder":2599},[291,5551,5553],{"class":293,"line":5552},111,[291,5554,2622],{"class":348},[291,5556,5558],{"class":293,"line":5557},112,[291,5559,2600],{"emptyLinePlaceholder":2599},[291,5561,5563],{"class":293,"line":5562},113,[291,5564,2631],{"class":348},[291,5566,5568],{"class":293,"line":5567},114,[291,5569,2636],{"class":348},[291,5571,5573],{"class":293,"line":5572},115,[291,5574,2600],{"emptyLinePlaceholder":2599},[291,5576,5578],{"class":293,"line":5577},116,[291,5579,2645],{"class":348},[291,5581,5583],{"class":293,"line":5582},117,[291,5584,5585],{"class":348},"| Books · {{book_count}} | {{subtotal}} |\n",[291,5587,5589],{"class":293,"line":5588},118,[291,5590,5591],{"class":348},"| --- | ---: |\n",[291,5593,5595],{"class":293,"line":5594},119,[291,5596,5597],{"class":348},"| Delivery | {{delivery}} |\n",[291,5599,5601],{"class":293,"line":5600},120,[291,5602,2636],{"class":348},[291,5604,5606],{"class":293,"line":5605},121,[291,5607,2600],{"emptyLinePlaceholder":2599},[291,5609,5611],{"class":293,"line":5610},122,[291,5612,2704],{"class":348},[291,5614,5616],{"class":293,"line":5615},123,[291,5617,2636],{"class":348},[291,5619,5621],{"class":293,"line":5620},124,[291,5622,2429],{"class":297},[291,5624,5626],{"class":293,"line":5625},125,[291,5627,2600],{"emptyLinePlaceholder":2599},[291,5629,5631,5633,5635,5637,5639,5641,5643,5645,5647,5649,5651,5653,5655,5657,5659,5661,5663,5665,5667,5669],{"class":293,"line":5630},126,[291,5632,298],{"class":297},[291,5634,2749],{"class":301},[291,5636,305],{"class":297},[291,5638,309],{"class":301},[291,5640,253],{"class":297},[291,5642,2732],{"class":1213},[291,5644,2760],{"class":297},[291,5646,2717],{"class":308},[291,5648,2765],{"class":297},[291,5650,2768],{"class":301},[291,5652,355],{"class":297},[291,5654,345],{"class":297},[291,5656,2775],{"class":348},[291,5658,352],{"class":297},[291,5660,355],{"class":297},[291,5662,1429],{"class":297},[291,5664,2784],{"class":2254},[291,5666,2787],{"class":297},[291,5668,2790],{"class":301},[291,5670,2793],{"class":297},[291,5672,5674],{"class":293,"line":5673},127,[291,5675,2600],{"emptyLinePlaceholder":2599},[291,5677,5679,5681,5684,5686],{"class":293,"line":5678},128,[291,5680,2138],{"class":297},[291,5682,5683],{"class":1213}," main",[291,5685,2144],{"class":297},[291,5687,2153],{"class":297},[291,5689,5691,5693,5695,5697,5699,5701,5703,5705,5707,5709],{"class":293,"line":5690},129,[291,5692,3120],{"class":301},[291,5694,355],{"class":297},[291,5696,3125],{"class":301},[291,5698,3128],{"class":297},[291,5700,309],{"class":301},[291,5702,253],{"class":297},[291,5704,1176],{"class":1213},[291,5706,2787],{"class":297},[291,5708,3139],{"class":1213},[291,5710,3142],{"class":297},[291,5712,5714,5716,5718,5720,5722],{"class":293,"line":5713},130,[291,5715,3147],{"class":2158},[291,5717,3125],{"class":301},[291,5719,3152],{"class":297},[291,5721,3155],{"class":297},[291,5723,2153],{"class":297},[291,5725,5727,5730,5732,5734,5736,5738],{"class":293,"line":5726},131,[291,5728,5729],{"class":301},"        log",[291,5731,253],{"class":297},[291,5733,3167],{"class":1213},[291,5735,2787],{"class":297},[291,5737,3172],{"class":301},[291,5739,1883],{"class":297},[291,5741,5743],{"class":293,"line":5742},132,[291,5744,2311],{"class":297},[291,5746,5748,5750,5752,5754,5756,5758,5760,5762,5764,5766],{"class":293,"line":5747},133,[291,5749,3189],{"class":301},[291,5751,355],{"class":297},[291,5753,3125],{"class":301},[291,5755,3128],{"class":297},[291,5757,3198],{"class":301},[291,5759,253],{"class":297},[291,5761,1913],{"class":1213},[291,5763,2787],{"class":297},[291,5765,3207],{"class":301},[291,5767,398],{"class":297},[291,5769,5771,5774,5776,5778,5780,5782,5784,5786,5788,5790,5792,5795,5797,5799,5802,5804],{"class":293,"line":5770},134,[291,5772,5773],{"class":308},"        lttr",[291,5775,253],{"class":297},[291,5777,2721],{"class":308},[291,5779,1019],{"class":297},[291,5781,1261],{"class":301},[291,5783,325],{"class":297},[291,5785,345],{"class":297},[291,5787,3226],{"class":348},[291,5789,352],{"class":297},[291,5791,355],{"class":297},[291,5793,5794],{"class":301}," FirstName",[291,5796,325],{"class":297},[291,5798,345],{"class":297},[291,5800,5801],{"class":348},"Ana",[291,5803,352],{"class":297},[291,5805,1073],{"class":297},[291,5807,5809,5812],{"class":293,"line":5808},135,[291,5810,5811],{"class":308},"        OrderDispatched",[291,5813,316],{"class":297},[291,5815,5817,5820,5822,5824,5826,5828],{"class":293,"line":5816},136,[291,5818,5819],{"class":301},"            OrderID",[291,5821,325],{"class":297},[291,5823,1239],{"class":297},[291,5825,2950],{"class":348},[291,5827,352],{"class":297},[291,5829,398],{"class":297},[291,5831,5833,5836,5838,5840],{"class":293,"line":5832},137,[291,5834,5835],{"class":301},"            BookCount",[291,5837,325],{"class":297},[291,5839,2964],{"class":1069},[291,5841,398],{"class":297},[291,5843,5845,5848,5850,5852,5854,5856],{"class":293,"line":5844},138,[291,5846,5847],{"class":301},"            Arrives",[291,5849,325],{"class":297},[291,5851,1239],{"class":297},[291,5853,2978],{"class":348},[291,5855,352],{"class":297},[291,5857,398],{"class":297},[291,5859,5861,5864,5866,5868,5870,5872,5874,5876,5878,5880,5882,5884,5886,5888,5890,5892],{"class":293,"line":5860},139,[291,5862,5863],{"class":301},"            Subtotal",[291,5865,325],{"class":297},[291,5867,2992],{"class":308},[291,5869,253],{"class":297},[291,5871,2472],{"class":308},[291,5873,1019],{"class":297},[291,5875,3001],{"class":301},[291,5877,325],{"class":297},[291,5879,3006],{"class":1069},[291,5881,355],{"class":297},[291,5883,3011],{"class":301},[291,5885,325],{"class":297},[291,5887,3016],{"class":301},[291,5889,253],{"class":297},[291,5891,3021],{"class":301},[291,5893,1073],{"class":297},[291,5895,5897,5900,5902,5904,5906,5908,5910,5912,5914,5916,5918,5920,5922,5924,5926,5928],{"class":293,"line":5896},140,[291,5898,5899],{"class":301},"            Delivery",[291,5901,325],{"class":297},[291,5903,2992],{"class":308},[291,5905,253],{"class":297},[291,5907,2472],{"class":308},[291,5909,1019],{"class":297},[291,5911,3001],{"class":301},[291,5913,325],{"class":297},[291,5915,3045],{"class":1069},[291,5917,355],{"class":297},[291,5919,3011],{"class":301},[291,5921,325],{"class":297},[291,5923,3016],{"class":301},[291,5925,253],{"class":297},[291,5927,3021],{"class":301},[291,5929,1073],{"class":297},[291,5931,5933,5936,5938,5940,5942,5944],{"class":293,"line":5932},141,[291,5934,5935],{"class":301},"            TrackURL",[291,5937,325],{"class":297},[291,5939,973],{"class":297},[291,5941,3071],{"class":348},[291,5943,352],{"class":297},[291,5945,398],{"class":297},[291,5947,5949],{"class":293,"line":5948},142,[291,5950,5951],{"class":297},"        })\n",[291,5953,5955,5957,5959,5961,5963],{"class":293,"line":5954},143,[291,5956,3147],{"class":2158},[291,5958,3125],{"class":301},[291,5960,3152],{"class":297},[291,5962,3155],{"class":297},[291,5964,2153],{"class":297},[291,5966,5968,5970,5972,5974,5976,5978],{"class":293,"line":5967},144,[291,5969,5729],{"class":301},[291,5971,253],{"class":297},[291,5973,3167],{"class":1213},[291,5975,2787],{"class":297},[291,5977,3172],{"class":301},[291,5979,1883],{"class":297},[291,5981,5983],{"class":293,"line":5982},145,[291,5984,2311],{"class":297},[291,5986,5988,5991,5993,5996,5998,6000,6002,6005],{"class":293,"line":5987},146,[291,5989,5990],{"class":301},"    fmt",[291,5992,253],{"class":297},[291,5994,5995],{"class":1213},"Println",[291,5997,2787],{"class":297},[291,5999,3276],{"class":301},[291,6001,253],{"class":297},[291,6003,6004],{"class":301},"Subject",[291,6006,1883],{"class":297},[291,6008,6010,6012,6014,6017,6019,6021,6023,6025],{"class":293,"line":6009},147,[291,6011,5990],{"class":301},[291,6013,253],{"class":297},[291,6015,6016],{"class":1213},"Print",[291,6018,2787],{"class":297},[291,6020,3276],{"class":301},[291,6022,253],{"class":297},[291,6024,3353],{"class":301},[291,6026,1883],{"class":297},[291,6028,6030],{"class":293,"line":6029},148,[291,6031,1079],{"class":297},[282,6033,6036],{"className":6034,"code":6035,"filename":3759,"language":1183,"meta":287},[1181],"Order TW-3107 is on its way\nTIDEWATER BOOKS\n\nORDER TW-3107\n\nYour books are on their way.\n\nHi Ana, we've packed your order and handed it to the courier. It\nshould arrive on Thursday.\n\nTrack parcel:\nhttps:\u002F\u002Ftidewater.example\u002Forders\u002FTW-3107\n\nBooks · 3 ....................... £42.97\nDelivery ........................ £2.95\n\nThanks,\nThe Tidewater Books team\n\nQuestions about your order? Reply to this email.\n\n--\nTidewater Books · 4 Quay Street, Falmouth\nNotification settings: https:\u002F\u002Ftidewater.example\u002Fpreferences\n",[201,6037,6035],{"__ignoreMap":287},[197,6039,6040,6041,6043,6044,6046,6047,6049,6050,6052,6053,6055,6056,6059,6060,6063,6064,6067,6068,246,6070,253],{},"The footer came from the ",[201,6042,1242],{}," family: the note, then ",[201,6045,1415],{}," with the UK entity's address, then the ",[201,6048,2034],{}," line with ",[201,6051,1464],{}," defaulted to ",[201,6054,2344],{},". The HTML part is in ",[201,6057,6058],{},"m.HTML",". To send it, give a ",[201,6061,6062],{},"Router"," one ",[201,6065,6066],{},"Sender"," per stream. See ",[221,6069,115],{"href":116},[221,6071,120],{"href":121},[6073,6074,6075],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .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}",{"title":287,"searchDepth":319,"depth":319,"links":6077},[6078,6079,6080,6081,6082,6083],{"id":257,"depth":319,"text":258},{"id":1188,"depth":319,"text":1189},{"id":2114,"depth":319,"text":2115},{"id":2391,"depth":319,"text":2392},{"id":2814,"depth":319,"text":2815},{"id":3793,"depth":319,"text":3794},"Set lttr up for your own brand, step by step, from a theme and a family registry to a first template and a test that renders it.","md",null,{},{"icon":82},{"title":167,"description":6084},"fPCYg3cyELLYB-AGZk4DVYUtYdlEQFSCxvBR8-UyDew",[6092,6094],{"title":162,"path":163,"stem":164,"description":6093,"icon":165,"children":-1},"A tour of examples\u002Fquiet, the worked example that doubles as lttr's conformance suite, and how its nine emails map to the design handoff.",{"title":171,"path":172,"stem":173,"description":6095,"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.",1790309828463]