{"id":49510,"date":"2026-05-21T07:01:31","date_gmt":"2026-05-21T06:01:31","guid":{"rendered":"https:\/\/singervielle.com\/?page_id=49510"},"modified":"2026-05-21T07:04:37","modified_gmt":"2026-05-21T06:04:37","slug":"svmarketing","status":"publish","type":"page","link":"https:\/\/singervielle.com\/zh\/svmarketing\/","title":{"rendered":"\u8425\u9500"},"content":{"rendered":"<div class=\"hdr\">\r\n  <div class=\"hdr-l\">\r\n    <div class=\"sv-logo\" aria-label=\"Singer Vielle\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 831.999939 446.3556824\"> <g id=\"Group_703\" transform=\"translate(-102.104 522.651)\"> <g id=\"Group_701\" transform=\"translate(102.104 -522.651)\"> <g id=\"Group_693\"> <path id=\"Path_1173\" fill=\"#FFFFFF\" d=\"M38.9740067,204.2359924c-11.4199982-5.6486816-20.2890015-12.6703186-26.6070023-21.0650024 C6.048996,174.7763367,1.9266663,166.1826477,0,157.3900146l23.7139969-9.2900085 c1.9732437,7.6882629,5.5188446,14.8839722,10.4129944,21.1329956 c5.0503845,6.4048462,11.5083923,11.5601807,18.8730164,15.0660095 c8.1999207,3.8630066,17.1792297,5.7860107,26.2420044,5.6199951c15.8100128,0,28.053009-3.2233276,36.7290039-9.6700134 c8.6760101-6.4466553,13.0139999-15.8649902,13.0139999-28.2550049c0-11.1906738-4.4579849-19.585022-13.3739853-25.1830139 c-8.9159851-5.5979919-21.5676575-9.5940247-37.9550018-11.9880066 c-20.0493469-3.0966492-36.5573425-8.9433289-49.5240021-17.5400085S8.6833649,75.1452942,8.6860275,56.6599731 c-0.1409302-10.0272522,2.3248978-19.9191589,7.1559982-28.7070007 c4.7686691-8.5419922,12.1436691-15.3366385,22.1249924-20.3840027s22.4396515-7.5703735,37.375-7.5689697 c13.6900024,0,25.4743195,2.3236694,35.3529968,6.9710083c9.8786469,4.6473699,17.711998,10.5929871,23.4999924,17.8370056 c5.5109863,6.7255859,9.5940247,14.503418,12,22.8590088l-23.7139969,9.4460144 c-2.735199-9.720459-8.54422-18.2940369-16.5579987-24.4379883c-8.0513306-6.1999817-18.3416595-9.3000183-30.8710022-9.2999878 c-14.2666626-0.0000305-24.6296692,3.1730042-31.0890045,9.5190125 c-6.4593506,6.3460083-9.6889954,14.3156738-9.6889954,23.9089966c0,7.0980225,1.8083344,12.9690247,5.4250031,17.6130066 c3.6166687,4.6440125,9.1356659,8.368988,16.5570068,11.1749878c7.4233246,2.8000183,17.2079926,5.047699,29.3540039,6.7430115 c20.3333282,3.4000244,36.961319,9.4963379,49.8839951,18.2890015s19.3803406,22.5830078,19.3729858,41.3710022 c0,12.5913391-3.0596619,23.4343567-9.1789856,32.5289917c-6.1193237,9.0946655-14.7713318,16.0643311-25.9560013,20.9089966 c-11.1806641,4.8473206-24.2420044,7.2716675-39.1840057,7.2730103 C64.2546616,212.7050171,50.3966599,209.8819885,38.9740067,204.2359924z\"\/> <\/g> <g id=\"Group_694\" transform=\"translate(231.034 56.824)\"> <path id=\"Path_1174\" fill=\"#FFFFFF\" d=\"M23.8590088,4.2009897v28.4840088 c2.8529968-6.446991,7.0439453-12.2137756,12.2950134-16.9179993 c5.5368652-5.0006409,11.9589539-8.9232483,18.9360046-11.5660095c7.3840332-2.8253784,15.230011-4.2497253,23.1359863-4.2000122 c19.5673523,0,34.4126892,6.0736694,44.5360107,18.2210083c10.1233521,12.1473389,15.1843262,29.9806519,15.1830139,53.5 v79.9570007H113.072998V72.1609802c0-16.5780029-3.5666504-28.8680115-10.7000122-36.8699951 c-7.1333313-8.0019836-17.302002-12.0019836-30.506012-12c-16.9057922-0.0675049-32.4723816,9.1885681-40.4869995,24.0740051 c-4.3413391,7.758667-6.5110168,16.6989746-6.5090027,26.8210144v77.5H0.0039974V4.2009897H23.8590088z\"\/> <\/g> <g id=\"Group_695\" transform=\"translate(733.443 61.026)\"> <path id=\"Path_1175\" fill=\"#FFFFFF\" d=\"M24.0000305,0.0000006v32.9660034 c3.666687-10.3160095,9.4033203-18.3893433,17.210022-24.2200012c7.8067017-5.830689,17.0126343-8.7460022,27.617981-8.7460022 h29.7289429v21.8330078H70.1260071c-8.2546997-0.1218567-16.3584595,2.2187195-23.2769775,6.7229919 c-6.8446655,4.4833374-12.1940308,10.965332-16.0479736,19.4460144 c-3.8540039,8.4806519-5.7822876,18.5066833-5.7849731,30.0780029v69.3999939H0.003998V0.0000006H24.0000305z\"\/> <\/g> <g id=\"Group_696\" transform=\"translate(176.216 61.024)\"> <rect id=\"Rectangle_224\" x=\"0.0039982\" y=\"0.0000008\" fill=\"#FFFFFF\" width=\"24.8689995\" height=\"147.4859924\"\/> <\/g> <g id=\"Group_697\" transform=\"translate(176.214 4.193)\"> <rect id=\"Rectangle_225\" x=\"0.0039973\" y=\"0.0000004\" fill=\"#FFFFFF\" width=\"24.8689995\" height=\"27.3570004\"\/> <\/g> <g id=\"Group_699\" transform=\"translate(563.54 56.823)\"> <g id=\"Group_698\"> <path id=\"Path_1176\" fill=\"#FFFFFF\" d=\"M149.3659973,81.1279907c-0.1767578,1.2928162-0.274292,2.5952454-0.2919922,3.8999939 H25.0140076c0.9658203,8.9088745,3.9849243,17.4722595,8.8200073,25.0169983 c4.4710693,6.9924316,10.6411133,12.737915,17.934021,16.7000122c7.1893921,3.8949585,15.24646,5.9100037,23.4229736,5.8580017 c9.6268311,0.1512451,19.116272-2.2963562,27.4689941-7.0849915 c8.0986938-4.7253113,14.1707153-11.7633362,18.2160034-21.1140137l21.6920166,8.1000061 c-3.328125,7.8789978-8.1389771,15.0452271-14.1710205,21.1090088 c-6.6207886,6.7348328-14.4755859,12.1329651-23.1359863,15.8999939 c-9.3358765,4.1101074-19.440979,6.1818542-29.6409912,6.0769958 c-13.513855,0.1519775-26.8042603-3.4530334-38.3889771-10.4129944 c-11.4124756-6.8286743-20.8152466-16.5550537-27.2540283-28.1919861 c-13.3010864-24.4053955-13.3010864-53.8946228,0-78.3000183c6.4221802-11.6683044,15.8272705-21.4222717,27.2540283-28.2650146 C48.8156433,3.4579473,62.1072693-0.1472163,75.6220398,0.006989 c13.3942871-0.1859741,26.571106,3.3969727,38.0269775,10.3399963 c11.1517334,6.7530823,20.2709961,16.3947144,26.3930054,27.9049988 c6.3552856,11.8924255,9.6109009,25.1947327,9.4660034,38.678009L149.3659973,81.1279907z M124.0660095,65.3670044 c-0.5631714-7.451355-3.1651001-14.604248-7.5209961-20.6759949 c-4.5678711-6.5872498-10.6390991-11.9916992-17.7109985-15.7659912c-7.2061157-3.9309998-15.291687-5.9698792-23.5-5.9259949 c-7.7045898-0.0245056-15.3077393,1.7564087-22.2000122,5.2000122 c-7.0029297,3.4859314-13.0930176,8.5622559-17.78302,14.822998c-4.9458618,6.5883789-8.288269,14.238678-9.7620239,22.3439941 L124.0660095,65.3670044z\"\/> <\/g> <\/g> <g id=\"Group_700\" transform=\"translate(389.82 56.972)\"> <path id=\"Path_1177\" fill=\"#FFFFFF\" d=\"M16.3799744,186.2049866c19.7520142,16.7139893,44.9840088,20.8559875,60.7000122,20.8559875 c16.5780029,0,30.6279907-3.3496704,42.1500244-10.0490112c11.1088257-6.2690125,20.0952759-15.7091064,25.8099976-27.1130066 c5.6879883-11.3760071,8.5319824-24.1003418,8.5319824-38.1730042V4.0539861h-23.8599854V35.71698 c-3.0932617-6.7931519-7.4619751-12.9292297-12.8690186-18.0750122 c-5.7752686-5.5150137-12.5460815-9.8821411-19.9520264-12.868988 c-7.991333-3.2326963-16.5430298-4.8534546-25.1630249-4.7690125 C58.8263855-0.1366875,46.1552429,3.4265754,35.217926,10.2709665 C24.3535461,17.0354614,15.453949,26.5319214,9.4079285,37.8119812 C3.1687319,49.2257385-0.0659176,62.0384521,0.0079349,75.04599c-0.117981,12.9510803,3.1440735,25.7090149,9.4639893,37.0140076 c6.135376,11.0961914,15.1204529,20.3543091,26.0280457,26.8190002 c11.166748,6.6421204,23.9511719,10.0708313,36.9429932,9.9079895c12.0574341,0.1775818,23.9336548-2.9476013,34.34198-9.0369873 c10.0906372-5.9379272,18.0959473-14.8535767,22.9169922-25.5230103v18.2210083 c0.119812,9.155426-1.7307129,18.2295837-5.4260254,26.6069946c-3.649231,8.0431824-9.6430054,14.7964783-17.1959229,19.375 c-7.8560181,4.9200134-17.8560181,7.3783569-30,7.375c-24.0250244,0-41.5999756-10.1849976-49.0670166-16.3540039 L16.3799744,186.2049866z M121.8249817,100.9289856c-4.5864868,7.8156128-11.1117554,14.3157349-18.9450073,18.8720093 c-7.9035645,4.6596985-16.925354,7.0828247-26.0999756,7.0100098 c-9.1941528,0.0889587-18.2480469-2.2571411-26.2420044-6.7999878 c-7.8441162-4.4187317-14.3605347-10.8591919-18.8709717-18.651001c-9.2480469-16.3495178-9.2480469-36.3504944,0-52.7000122 c4.5460815-7.7728577,11.088501-14.1882324,18.9489746-18.5810242c8.0237427-4.533844,17.0993042-6.8762817,26.3150024-6.7919922 c9.1842651-0.071991,18.2120972,2.3779907,26.0999756,7.0830078c7.8118286,4.5878296,14.3099365,11.1107788,18.867981,18.9400024 c9.2824097,15.961853,9.2545166,35.6844788-0.072998,51.6199951L121.8249817,100.9289856z\"\/> <\/g> <\/g> <linearGradient id=\"Path_1178_1_\" gradientUnits=\"userSpaceOnUse\" x1=\"-163.4461517\" y1=\"84.8417358\" x2=\"-162.5521545\" y2=\"85.1393051\" gradientTransform=\"matrix(659.8927002 0 0 -208.370697 108165.0625 17524.3300781)\"> <stop offset=\"0\" style=\"stop-color:#FFFFFF\"\/> <stop offset=\"0.1835985\" style=\"stop-color:#FCFEFF\"\/> <stop offset=\"0.3270622\" style=\"stop-color:#F2FAFF\"\/> <stop offset=\"0.4569846\" style=\"stop-color:#E1F3FF\"\/> <stop offset=\"0.5788654\" style=\"stop-color:#CAE9FF\"\/> <stop offset=\"0.695226\" style=\"stop-color:#ACDCFF\"\/> <stop offset=\"0.8073607\" style=\"stop-color:#87CDFF\"\/> <stop offset=\"0.9141317\" style=\"stop-color:#5CBBFF\"\/> <stop offset=\"1\" style=\"stop-color:#33AAFF\"\/> <\/linearGradient> <path id=\"Path_1178\" fill=\"url(#Path_1178_1_)\" d=\"M262.9219971-284.6659851h27.1820068l55.3999939,166.065979l0.4330139-0.4329987 l55.1100159-165.632019h27.1809998L357.5039978-80.3509979h-23.7099915L262.9219971-284.6659851z M446.2109985-80.3509979 h24.8720093v-147.4840088h-24.8720093V-80.3509979z M446.2109985-284.6660156v27.3559875h24.8720093v-27.3559875H446.2109985z M631.9699707-193.6390076c6.3549805,11.8925018,9.6102295,25.1948242,9.4650269,38.678009l-0.1409912,4.1999969 c-0.1750488,1.2929382-0.270874,2.5953674-0.2869873,3.8999939h-124.06604 c0.9666748,8.9072571,3.9854126,17.469101,8.8189697,25.0130005c4.4711304,6.9924011,10.6411133,12.7378616,17.934021,16.6999969 c7.1886597,3.8968735,15.2462158,5.9120407,23.4229736,5.8580017c9.6280518,0.1529694,19.1190796-2.2939758,27.4730225-7.0830002 c8.0986328-4.7253265,14.1723633-11.7630005,18.2210083-21.112999l21.6829834,8.0950012 c-3.3268433,7.8796768-8.1378784,15.0461197-14.1710205,21.1090012 c-6.6184692,6.736702-14.4707031,12.1377716-23.1289673,15.9090042c-9.3369751,4.1063156-19.4415283,6.17659-29.6409912,6.072998 c-13.5133667,0.1529236-26.8034058-3.452179-38.3870239-10.413002 c-11.4163208-6.8268433-20.8221741-16.5539322-27.2619629-28.1929932c-13.3010559-24.4053879-13.3010559-53.8946152,0-78.2999954 c6.4219666-11.6697845,15.8287354-21.4241028,27.2579956-28.2649994 c11.5836182-6.9608765,24.8736572-10.565979,38.3870239-10.4129944 c13.395813-0.1853943,26.5740967,3.3974762,38.0319824,10.3399963 c11.1481323,6.7550659,20.2642822,16.3963776,26.3850098,27.9049988L631.9699707-193.6390076z M615.9939575-166.526001 c-0.5609741-7.4518433-3.1630859-14.6053162-7.5209961-20.6759949 c-4.5662231-6.5883331-10.6374512-11.9930878-17.710022-15.7660065c-7.2061157-3.9309845-15.2915649-5.9698944-23.5-5.9259949 c-7.7053833-0.0241547-15.30896,1.7592621-22.2000122,5.2070007c-7.0037231,3.4824982-13.0941772,8.5574341-17.78302,14.8179932 c-4.9439087,6.5895081-8.2860718,14.2393494-9.7620239,22.3439941L615.9939575-166.526001z M922.8139648-154.9609985 l-0.1409912,4.1999969c-0.1767578,1.2928314-0.274292,2.5952606-0.2919922,3.8999939H798.315979 c0.9662476,8.9073639,3.9849854,17.4693146,8.8189697,25.0130005c4.4710693,6.9924545,10.6411133,12.7379303,17.934021,16.6999969 c7.18927,3.8970566,15.2476196,5.9119034,23.4249878,5.8570023c9.6279297,0.1519852,19.1187134-2.294899,27.4730225-7.0830002 c8.0986938-4.7253342,14.1707153-11.7629929,18.2160034-21.112999L915.875-119.3870087 c-3.3285522,7.8787689-8.1393433,15.0449066-14.1710205,21.1090088 c-6.621582,6.7356873-14.4760742,12.1359634-23.1359863,15.9069977 c-9.3370972,4.1056366-19.4417114,6.1752319-29.6410522,6.0709991 c-13.5145874,0.1530304-26.8059692-3.4520569-38.3909912-10.413002 c-11.413147-6.8256302-20.8162231-16.5506287-27.2539673-28.1869965c-13.3010864-24.4053879-13.3010864-53.8946304,0-78.3000107 c6.4207764-11.669342,15.8261719-21.4236298,27.2540283-28.2649994 c11.585022-6.9609985,24.8764038-10.5660858,38.3909912-10.4129944 c13.3942871-0.1859589,26.571106,3.3969879,38.0269775,10.3399963 c11.1508789,6.7541809,20.2698364,16.3955383,26.3930054,27.9049988c6.354187,11.8919983,9.6087646,25.193634,9.4630127,38.6759949 L922.8139648-154.9609985z M651.6399536-80.3509979h25.473999l41.2119751-204.3150177H692.848938L651.6399536-80.3509979z M707.539978-80.3509979h25.4790039l41.2089844-204.3150177h-25.4790039L707.539978-80.3509979z M897.3709717-166.526001 c-0.5630493-7.4513855-3.164978-14.6043243-7.5209961-20.6759949 c-4.5678711-6.5872345-10.6390991-11.9917145-17.7109985-15.7660065c-7.2064209-3.9300842-15.291687-5.9689331-23.5-5.9259949 c-7.7055664-0.0257568-15.3095093,1.7577515-22.2000122,5.2070007c-7.0037231,3.4825287-13.0941162,8.5574646-17.78302,14.8179932 c-4.9478149,6.5872345-8.2904053,14.238678-9.7620239,22.3439941L897.3709717-166.526001z\"\/> <\/g> <\/svg><\/div>\r\n    <div class=\"hdr-div\"><\/div>\r\n    <div class=\"hdr-ttl\">Marketing \u2014 Calendar & Themes<\/div>\r\n  <\/div>\r\n  <div class=\"hdr-r\">\r\n    <a class=\"alltools-btn\" href=\"\/tools\/\">All tools<\/a>\r\n    <button class=\"refresh-btn\" onclick=\"loadAll()\">\u21bb Refresh<\/button>\r\n    <div class=\"hdr-stats\">\r\n      <div class=\"stat\"><div class=\"stat-n\" id=\"cnt-planned\">\u2014<\/div><div class=\"stat-l\">Planned<\/div><\/div>\r\n      <div class=\"stat\"><div class=\"stat-n sky\" id=\"cnt-drafted\">\u2014<\/div><div class=\"stat-l\">Drafted<\/div><\/div>\r\n      <div class=\"stat\"><div class=\"stat-n grn\" id=\"cnt-sent\">\u2014<\/div><div class=\"stat-l\">Sent (30d)<\/div><\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- TABS -->\r\n<div class=\"tabs\">\r\n  <div class=\"tab on\" onclick=\"goTab('calendar',this)\">Calendar<\/div>\r\n  <div class=\"tab\" onclick=\"goTab('themes',this)\">Themes <span class=\"tbadge\" id=\"b-themes\">\u2014<\/span><\/div>\r\n  <div class=\"tab\" onclick=\"goTab('emails',this)\">Emails <span class=\"tbadge\" id=\"b-emails\">\u2014<\/span><\/div>\r\n  <div class=\"tab\" onclick=\"goTab('articles',this)\">Articles <span class=\"tbadge\" id=\"b-articles\">\u2014<\/span><\/div>\r\n  <div class=\"tab\" onclick=\"goTab('social',this)\">Social <span class=\"tbadge\" id=\"b-social\">\u2014<\/span><\/div>\r\n  <div class=\"tab disabled\" title=\"Available in Phase 2\">Stats <span class=\"tbadge-soon\">soon<\/span><\/div>\r\n<\/div>\r\n\r\n<!-- MAIN -->\r\n<div class=\"main\">\r\n\r\n  <!-- TAB: CALENDAR -->\r\n  <div class=\"panel on\" id=\"panel-calendar\">\r\n\r\n    <!-- Calendar toolbar -->\r\n    <div class=\"cal-toolbar\">\r\n      <div class=\"cal-nav\">\r\n        <button class=\"cal-nav-btn\" onclick=\"navCal(-1)\" aria-label=\"Previous\">\u25c0<\/button>\r\n        <button class=\"cal-today-btn\" onclick=\"navToday()\">Today<\/button>\r\n        <button class=\"cal-nav-btn\" onclick=\"navCal(1)\" aria-label=\"Next\">\u25b6<\/button>\r\n        <div class=\"cal-range\" id=\"cal-range\">\u2014<\/div>\r\n      <\/div>\r\n      <div class=\"cal-view\">\r\n        <button class=\"cal-view-btn on\" id=\"view-week\" onclick=\"setView('week')\">Work week<\/button>\r\n        <button class=\"cal-view-btn\" id=\"view-month\" onclick=\"setView('month')\">Month<\/button>\r\n        <button class=\"btn-add\" onclick=\"openNewItem()\">+ New<\/button>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Filter sidebar + grid layout -->\r\n    <div class=\"cal-layout\">\r\n      <aside class=\"cal-filters\">\r\n        <div class=\"filter-section\">\r\n          <div class=\"filter-title\">Show<\/div>\r\n          <div class=\"filter-chips\" id=\"filter-show-chips\">\r\n            <button class=\"filter-chip active\" data-show=\"all\">Everything<\/button>\r\n            <button class=\"filter-chip\" data-show=\"emails\">Emails<\/button>\r\n            <button class=\"filter-chip\" data-show=\"social\">Social<\/button>\r\n            <button class=\"filter-chip\" data-show=\"articles\">Articles<\/button>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"filter-section\">\r\n          <div class=\"filter-title\">Line of business<\/div>\r\n          <label class=\"filter-item\"><input type=\"checkbox\" data-lob=\"Properties\" checked> <span class=\"filter-swatch\" style=\"background:#002540\"><\/span> Properties<\/label>\r\n          <label class=\"filter-item\"><input type=\"checkbox\" data-lob=\"MO\" checked> <span class=\"filter-swatch\" style=\"background:#104E99\"><\/span> Market Opps<\/label>\r\n          <label class=\"filter-item\"><input type=\"checkbox\" data-lob=\"Brand\" checked> <span class=\"filter-swatch\" style=\"background:#7B4FE0\"><\/span> Brand<\/label>\r\n          <label class=\"filter-item\"><input type=\"checkbox\" data-lob=\"off\" checked> <span class=\"filter-swatch\" style=\"background:#94A3B8\"><\/span> Off-theme<\/label>\r\n        <\/div>\r\n        <div class=\"filter-section\">\r\n          <div class=\"filter-title\">Status<\/div>\r\n          <label class=\"filter-item\"><input type=\"checkbox\" data-status=\"planned\" checked> Planned<\/label>\r\n          <label class=\"filter-item\"><input type=\"checkbox\" data-status=\"drafted\" checked> Drafted<\/label>\r\n          <label class=\"filter-item\"><input type=\"checkbox\" data-status=\"sent\" checked> Sent<\/label>\r\n\t\t\t\t\t<label class=\"filter-item\"><input type=\"checkbox\" data-status=\"scheduled\" checked> Scheduled<\/label>\r\n        <\/div>\r\n        <details class=\"filter-section filter-themes-wrap\">\r\n          <summary class=\"filter-title filter-themes-summary\">Theme<\/summary>\r\n          <div id=\"filter-themes\" class=\"filter-themes\"><!-- populated by JS --><\/div>\r\n        <\/details>\r\n      <\/aside>\r\n\r\n      <div class=\"cal-grid-wrap\">\r\n        <div id=\"cal-grid\" class=\"cal-grid\">\r\n          <div class=\"loading-state\"><div class=\"loading-spinner\"><\/div><div class=\"loading-txt\">Loading calendar...<\/div><\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- TAB: THEMES -->\r\n  <div class=\"panel\" id=\"panel-themes\">\r\n    <div class=\"sec-hdr\">\r\n      <div class=\"sec-titles\">\r\n        <div class=\"sec-title\">Theme library<\/div>\r\n        <div class=\"sec-sub\">12 themes, locked palette. Click any theme to edit its details and content pack. Reserved themes (Navy DI, MO Blue) cannot be deleted.<\/div>\r\n      <\/div>\r\n    <\/div>\r\n    <div id=\"themes-grid\" class=\"themes-grid\">\r\n      <div class=\"loading-state\"><div class=\"loading-spinner\"><\/div><div class=\"loading-txt\">Loading themes...<\/div><\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- TAB: EMAILS -->\r\n  <div class=\"panel\" id=\"panel-emails\">\r\n    <div class=\"sec-hdr\">\r\n      <div class=\"sec-titles\">\r\n        <div class=\"sec-title\">Email library<\/div>\r\n        <div class=\"sec-sub\">Draft, generate, push to Campaign Monitor, track stats. Property emails generate paired light + dark templates from an SV listing URL.<\/div>\r\n      <\/div>\r\n      <div class=\"sec-actions\" style=\"display:flex;gap:8px;align-items:center\">\r\n        <button class=\"btn btn-view\" id=\"emails-refresh-btn\" onclick=\"refreshAllCmStats({force: true})\">\u21bb Refresh stats<\/button>\r\n        <button class=\"btn-add\" onclick=\"openEmailChooser()\">+ New email<\/button>\r\n      <\/div>\r\n    <\/div>\r\n    <div id=\"emails-list\" class=\"emails-list\">\r\n      <div class=\"loading-state\"><div class=\"loading-spinner\"><\/div><div class=\"loading-txt\">Loading email library...<\/div><\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- TAB: ARTICLES -->\r\n  <div class=\"panel\" id=\"panel-articles\">\r\n    <div class=\"sec-hdr\">\r\n      <div class=\"sec-titles\">\r\n        <div class=\"sec-title\">Articles<\/div>\r\n        <div class=\"sec-sub\">Thought-leadership pieces for the Market Insights page. Draft with Claude, paste into WordPress, then optionally send as an email teaser.<\/div>\r\n      <\/div>\r\n      <div class=\"sec-actions\" style=\"display:flex;gap:8px;align-items:center\">\r\n        <button class=\"btn-add\" onclick=\"openArticleEditor()\">+ New article<\/button>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- IDEAS BACKLOG -->\r\n    <div class=\"articles-ideas-wrap\">\r\n      <div class=\"ideas-hdr\">\r\n        <div class=\"ideas-title\">Idea backlog <span class=\"ideas-count\" id=\"ideas-count\">\u2014<\/span><\/div>\r\n        <div class=\"ideas-sub\">Capture topics here whenever inspiration strikes. Click an idea to start drafting it.<\/div>\r\n        <button class=\"btn btn-view btn-small\" onclick=\"openAddIdeaPrompt()\">+ Add idea<\/button>\r\n      <\/div>\r\n      <div id=\"ideas-list\" class=\"ideas-list\">\r\n        <div class=\"loading-state\"><div class=\"loading-spinner\"><\/div><div class=\"loading-txt\">Loading ideas\u2026<\/div><\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- ARTICLES LIBRARY -->\r\n    <div class=\"articles-library-hdr\">\r\n      <div class=\"articles-library-title\">Drafts & published <span id=\"articles-count-badge\" class=\"ideas-count\">\u2014<\/span><\/div>\r\n    <\/div>\r\n    <div id=\"articles-list\" class=\"articles-list\">\r\n      <div class=\"loading-state\"><div class=\"loading-spinner\"><\/div><div class=\"loading-txt\">Loading articles\u2026<\/div><\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- TAB: SOCIAL (mount point \u2014 content is rendered by JS) -->\r\n  <div class=\"panel\" id=\"panel-social\">\r\n    <div class=\"loading-state\"><div class=\"loading-spinner\"><\/div><div class=\"loading-txt\">Loading social posts\u2026<\/div><\/div>\r\n  <\/div>\r\n\r\n<\/div>\r\n\r\n<!-- ============================================================\r\n     MODAL: Email chooser \u2014 top-level: Property \/ MO \/ General \/ Text\r\n     ============================================================ -->\r\n<div class=\"modal\" id=\"modal-email-chooser\">\r\n  <div class=\"modal-box modal-xl\">\r\n    <div class=\"draft-hdr\">\r\n      <div>\r\n        <div class=\"modal-title\">New email<\/div>\r\n        <div class=\"modal-sub\">What kind of email is this?<\/div>\r\n      <\/div>\r\n      <button class=\"modal-close-x\" onclick=\"closeModal('email-chooser')\" aria-label=\"Close\">\u00d7<\/button>\r\n    <\/div>\r\n\r\n    <div class=\"chooser-grid chooser-grid-2x2\">\r\n\r\n      <!-- PROPERTY -->\r\n      <button class=\"chooser-tile\" onclick=\"openDraftEmail('property','designed_paired')\">\r\n        <div class=\"ct-badge\" style=\"background:#002540;color:#fff\">\r\n          <span class=\"ct-badge-glyph\">\u2709<\/span>\r\n          <span class=\"ct-badge-tag\">Properties<\/span>\r\n        <\/div>\r\n        <div class=\"ct-body\">\r\n          <div class=\"ct-ttl\">Property<\/div>\r\n          <div class=\"ct-sub\">A property we're instructed to sell. Generates paired light + dark templates from the SV listing URL.<\/div>\r\n          <div class=\"ct-meta\">Default list \u00b7 Property Alerts<\/div>\r\n        <\/div>\r\n      <\/button>\r\n\r\n      <!-- MARKET OPPORTUNITIES -->\r\n      <button class=\"chooser-tile\" onclick=\"openMoChooser()\">\r\n        <div class=\"ct-badge\" style=\"background:#104E99;color:#fff\">\r\n          <span class=\"ct-badge-glyph\">\u2302<\/span>\r\n          <span class=\"ct-badge-tag\">MO<\/span>\r\n        <\/div>\r\n        <div class=\"ct-body\">\r\n          <div class=\"ct-ttl\">Market Opportunities<\/div>\r\n          <div class=\"ct-sub\">Buy-side \u2014 we're not instructed. Property list, featured property, or membership push.<\/div>\r\n          <div class=\"ct-meta\">Default list \u00b7 Private Investors \/ Marketing Alerts<\/div>\r\n        <\/div>\r\n      <\/button>\r\n\r\n      <!-- GENERAL -->\r\n      <button class=\"chooser-tile\" onclick=\"openDraftEmail('general','designed')\">\r\n        <div class=\"ct-badge\" style=\"background:#7B4FE0;color:#fff\">\r\n          <span class=\"ct-badge-glyph\">\u2726<\/span>\r\n          <span class=\"ct-badge-tag\">Brand<\/span>\r\n        <\/div>\r\n        <div class=\"ct-body\">\r\n          <div class=\"ct-ttl\">General<\/div>\r\n          <div class=\"ct-sub\">Anything else \u2014 Finance, AI Assistant, WhatsApp, world reach, ad-hoc pushes, receivers content, articles.<\/div>\r\n          <div class=\"ct-meta\">Default list \u00b7 Marketing Alerts<\/div>\r\n        <\/div>\r\n      <\/button>\r\n\r\n      <!-- TEXT -->\r\n      <button class=\"chooser-tile\" onclick=\"openTextChooser()\">\r\n        <div class=\"ct-badge\" style=\"background:#3C4856;color:#fff\">\r\n          <span class=\"ct-badge-glyph\">A<\/span>\r\n          <span class=\"ct-badge-tag\">Text<\/span>\r\n        <\/div>\r\n        <div class=\"ct-body\">\r\n          <div class=\"ct-ttl\">Text email<\/div>\r\n          <div class=\"ct-sub\">Plain-text email from Neil, Dale or Singer Vielle. Choose the category in the next step.<\/div>\r\n          <div class=\"ct-meta\">Any category<\/div>\r\n        <\/div>\r\n      <\/button>\r\n\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- ============================================================\r\n     MODAL: MO sub-chooser \u2014 Property list \/ Featured \/ Membership\r\n     ============================================================ -->\r\n<div class=\"modal\" id=\"modal-mo-chooser\">\r\n  <div class=\"modal-box modal-xl\">\r\n    <div class=\"draft-hdr\">\r\n      <div>\r\n        <div class=\"modal-title\">Market Opportunities<\/div>\r\n        <div class=\"modal-sub\">Which type of MO email?<\/div>\r\n      <\/div>\r\n      <button class=\"modal-close-x\" onclick=\"closeModal('mo-chooser')\" aria-label=\"Close\">\u00d7<\/button>\r\n    <\/div>\r\n\r\n    <div class=\"chooser-grid chooser-grid-3col\">\r\n\r\n      <button class=\"chooser-tile chooser-tile-stacked\" onclick=\"openDraftEmail('mo_list','designed')\">\r\n        <div class=\"ct-badge\" style=\"background:#104E99;color:#fff\">\r\n          <span class=\"ct-badge-glyph\">\u2263<\/span>\r\n        <\/div>\r\n        <div class=\"ct-body\">\r\n          <div class=\"ct-ttl\">Property list<\/div>\r\n          <div class=\"ct-sub\">Multiple new MO opportunities \u2014 vague category bullets, no addresses. Single \"Learn More\" CTA.<\/div>\r\n          <div class=\"ct-meta\">Default list \u00b7 Private Investors<\/div>\r\n        <\/div>\r\n      <\/button>\r\n\r\n      <button class=\"chooser-tile chooser-tile-stacked\" onclick=\"openDraftEmail('mo_property','designed')\">\r\n        <div class=\"ct-badge\" style=\"background:#104E99;color:#fff\">\r\n          <span class=\"ct-badge-glyph\">\u2605<\/span>\r\n        <\/div>\r\n        <div class=\"ct-body\">\r\n          <div class=\"ct-ttl\">Featured property<\/div>\r\n          <div class=\"ct-sub\">A single MO property highlighted \u2014 hero image, headline facts, prominent \"LEARN MORE\" CTA.<\/div>\r\n          <div class=\"ct-meta\">Default list \u00b7 Private Investors<\/div>\r\n        <\/div>\r\n      <\/button>\r\n\r\n      <button class=\"chooser-tile chooser-tile-stacked\" onclick=\"openDraftEmail('mo_membership','designed')\">\r\n        <div class=\"ct-badge\" style=\"background:#104E99;color:#fff\">\r\n          <span class=\"ct-badge-glyph\">+<\/span>\r\n        <\/div>\r\n        <div class=\"ct-body\">\r\n          <div class=\"ct-ttl\">Membership push<\/div>\r\n          <div class=\"ct-sub\">Recruit new MO members \u2014 pitch with prominent Apply Now CTA. Sends to non-members.<\/div>\r\n          <div class=\"ct-meta\">Default list \u00b7 Marketing Alerts<\/div>\r\n        <\/div>\r\n      <\/button>\r\n\r\n    <\/div>\r\n\r\n    <div class=\"modal-actions\">\r\n      <button class=\"btn btn-cancel\" onclick=\"backToEmailChooser()\">\u2190 Back<\/button>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- ============================================================\r\n     MODAL: Text sub-chooser \u2014 what's this text email about?\r\n     ============================================================ -->\r\n<div class=\"modal\" id=\"modal-text-chooser\">\r\n  <div class=\"modal-box modal-xl\">\r\n    <div class=\"draft-hdr\">\r\n      <div>\r\n        <div class=\"modal-title\">Text email<\/div>\r\n        <div class=\"modal-sub\">What category does this fall under? Determines default audience and tone.<\/div>\r\n      <\/div>\r\n      <button class=\"modal-close-x\" onclick=\"closeModal('text-chooser')\" aria-label=\"Close\">\u00d7<\/button>\r\n    <\/div>\r\n\r\n    <div class=\"chooser-grid chooser-grid-3col\">\r\n\r\n      <button class=\"chooser-tile chooser-tile-stacked\" onclick=\"openDraftEmail('property','text')\">\r\n        <div class=\"ct-badge\" style=\"background:#002540;color:#fff\">\r\n          <span class=\"ct-badge-glyph\">\u2709<\/span>\r\n          <span class=\"ct-badge-tag\">Properties<\/span>\r\n        <\/div>\r\n        <div class=\"ct-body\">\r\n          <div class=\"ct-ttl\">Property follow-up<\/div>\r\n          <div class=\"ct-sub\">A text follow-up on a property we're instructed to sell \u2014 usually a short note 7\u201314 days after the designed pair.<\/div>\r\n          <div class=\"ct-meta\">Default list \u00b7 Property Alerts<\/div>\r\n        <\/div>\r\n      <\/button>\r\n\r\n      <button class=\"chooser-tile chooser-tile-stacked\" onclick=\"openDraftEmail('mo','text')\">\r\n        <div class=\"ct-badge\" style=\"background:#104E99;color:#fff\">\r\n          <span class=\"ct-badge-glyph\">\u2302<\/span>\r\n          <span class=\"ct-badge-tag\">MO<\/span>\r\n        <\/div>\r\n        <div class=\"ct-body\">\r\n          <div class=\"ct-ttl\">Market Opportunities<\/div>\r\n          <div class=\"ct-sub\">Plain-text MO email \u2014 property list, featured property, or membership push. You'll pick the type inside.<\/div>\r\n          <div class=\"ct-meta\">Default list \u00b7 Private Investors \/ Marketing Alerts<\/div>\r\n        <\/div>\r\n      <\/button>\r\n\r\n      <button class=\"chooser-tile chooser-tile-stacked\" onclick=\"openDraftEmail('general','text')\">\r\n        <div class=\"ct-badge\" style=\"background:#7B4FE0;color:#fff\">\r\n          <span class=\"ct-badge-glyph\">\u2726<\/span>\r\n          <span class=\"ct-badge-tag\">Brand<\/span>\r\n        <\/div>\r\n        <div class=\"ct-body\">\r\n          <div class=\"ct-ttl\">General<\/div>\r\n          <div class=\"ct-sub\">Anything else \u2014 finance pushes, receivers content, ad-hoc notes, AI\/WhatsApp announcements, world reach. You'll pick the theme inside.<\/div>\r\n          <div class=\"ct-meta\">Default list \u00b7 Marketing Alerts<\/div>\r\n        <\/div>\r\n      <\/button>\r\n\r\n    <\/div>\r\n\r\n    <div class=\"modal-actions\">\r\n      <button class=\"btn btn-cancel\" onclick=\"backToEmailChooser()\">\u2190 Back<\/button>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- ============================================================\r\n     MODAL: Draft text email (general \/ property follow-up \/ MO)\r\n     ============================================================ -->\r\n<div class=\"modal\" id=\"modal-draft-text\">\r\n  <div class=\"modal-box modal-xl\">\r\n\r\n    <div class=\"draft-hdr\">\r\n      <div>\r\n        <div class=\"modal-title\" id=\"text-modal-title\">New text email<\/div>\r\n        <div class=\"modal-sub\" id=\"text-modal-sub\">Plain-text email from Neil, Dale or Singer Vielle. Free-text brief \u2014 Claude writes the copy.<\/div>\r\n      <\/div>\r\n      <button class=\"modal-close-x\" onclick=\"closeModal('draft-text')\" aria-label=\"Close\">\u00d7<\/button>\r\n    <\/div>\r\n\r\n    <!-- Step 1: Brief -->\r\n    <div class=\"draft-step\" id=\"text-step-1\">\r\n\r\n      <!-- Required category fields (conditional) -->\r\n      <div class=\"form-row\" id=\"tx-mo-type-row\" style=\"display:none\">\r\n        <div class=\"form-label\">MO type <span class=\"form-label-req\">(required)<\/span><\/div>\r\n        <select class=\"form-input\" id=\"tx-mo-type\" onchange=\"onTxMoTypeChange()\">\r\n          <option value=\"\">\u2014 Pick one \u2014<\/option>\r\n          <option value=\"mo_list\">Property list (vague new opportunities to existing members)<\/option>\r\n          <option value=\"mo_property\">Featured property (single highlighted opp to existing members)<\/option>\r\n          <option value=\"mo_membership\">Membership push (recruit new members)<\/option>\r\n        <\/select>\r\n      <\/div>\r\n\r\n      <div class=\"form-row\" id=\"tx-theme-row\" style=\"display:none\">\r\n        <div class=\"form-label\">Theme <span class=\"form-label-req\">(required)<\/span><\/div>\r\n        <select class=\"form-input\" id=\"tx-theme\" onchange=\"onTxThemeChange()\">\r\n          <option value=\"\">\u2014 Pick one \u2014<\/option>\r\n        <\/select>\r\n      <\/div>\r\n\r\n      <div class=\"form-row\">\r\n        <div class=\"form-label\">Brief \u2014 what's this email about?<\/div>\r\n        <textarea class=\"form-input form-textarea\" id=\"tx-brief\" rows=\"6\" placeholder=\"e.g. Neil wants to send a quick email to receivers and lenders letting them know we have appetite for new instructions on distressed real estate. Mention our recent \u00a315m debt arrangement. Tone: confident, direct.\"><\/textarea>\r\n      <\/div>\r\n\r\n      <div class=\"form-row form-row-2col\">\r\n        <div>\r\n          <div class=\"form-label\">Sender<\/div>\r\n          <select class=\"form-input\" id=\"tx-sender\">\r\n            <option value=\"Neil Singer\">Neil Singer<\/option>\r\n            <option value=\"Dale Henry\">Dale Henry<\/option>\r\n            <option value=\"Xan Zuckerman\">Xan Zuckerman<\/option>\r\n            <option value=\"Singer Vielle\">Singer Vielle (brand)<\/option>\r\n          <\/select>\r\n        <\/div>\r\n        <div>\r\n          <div class=\"form-label\">Subject hint <span class=\"form-label-sub\">(optional \u2014 Claude refines)<\/span><\/div>\r\n          <input class=\"form-input\" id=\"tx-subject-hint\" type=\"text\" placeholder=\"\">\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"form-row\">\r\n        <div class=\"form-label\">Image <span class=\"form-label-sub\">(optional \u2014 say \"move the image...\" in the regenerate box to reposition)<\/span><\/div>\r\n        <div id=\"tx-image-widget\" class=\"image-widget\">\r\n          <div class=\"image-widget-empty\" id=\"tx-image-empty\">\r\n            <input type=\"file\" id=\"tx-image-file\" accept=\"image\/png,image\/jpeg,image\/webp,image\/gif\" style=\"display:none\" onchange=\"onTxImageSelected(event)\">\r\n            <button type=\"button\" class=\"btn btn-view btn-sm\" onclick=\"document.getElementById('tx-image-file').click()\">+ Add image<\/button>\r\n            <span class=\"image-widget-hint\">PNG, JPG, GIF or WebP up to 10 MB. Optional caption.<\/span>\r\n          <\/div>\r\n          <div class=\"image-widget-filled\" id=\"tx-image-filled\" style=\"display:none\">\r\n            <img decoding=\"async\" id=\"tx-image-thumb\" class=\"image-widget-thumb\" src=\"\" alt=\"\">\r\n            <div class=\"image-widget-meta\">\r\n              <input class=\"form-input\" id=\"tx-image-caption\" type=\"text\" placeholder=\"Caption (optional)\" style=\"font-size:13px\">\r\n              <div class=\"image-widget-actions\">\r\n                <button type=\"button\" class=\"btn btn-view btn-sm\" onclick=\"document.getElementById('tx-image-file').click()\">Replace<\/button>\r\n                <button type=\"button\" class=\"btn btn-cancel btn-sm\" onclick=\"clearTxImage()\">Remove<\/button>\r\n              <\/div>\r\n              <div class=\"image-widget-status\" id=\"tx-image-status\"><\/div>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"form-row\">\r\n        <div class=\"form-label\">CM lists to send to<\/div>\r\n        <div id=\"tx-lists\" class=\"lists-picker\"><\/div>\r\n        <div class=\"reach-line\" id=\"tx-reach\"><span class=\"reach-num\">\u2014<\/span> projected unique recipients<\/div>\r\n      <\/div>\r\n\r\n      <div class=\"form-row\">\r\n        <div class=\"form-label\">Link to scheduled item <span class=\"form-label-sub\">(optional)<\/span><\/div>\r\n        <select class=\"form-input\" id=\"tx-schedule-link\"><\/select>\r\n      <\/div>\r\n\r\n      <div class=\"draft-actions\">\r\n        <button class=\"btn btn-cancel\" onclick=\"closeModal('draft-text')\">Cancel<\/button>\r\n        <button class=\"btn btn-sky\" onclick=\"generateTextEmail()\" id=\"tx-generate-btn\">Generate \u2192<\/button>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Step 2: Preview + regenerate -->\r\n    <div class=\"draft-step\" id=\"text-step-2\" style=\"display:none\">\r\n\r\n      <div class=\"preview-tabs\">\r\n        <div class=\"preview-tabs-left\">\r\n          <div class=\"modal-sub\" id=\"tx-preview-subject\" style=\"font-weight:600;color:#002540\"><\/div>\r\n        <\/div>\r\n        <button class=\"btn btn-view btn-sm\" onclick=\"setTextPreviewWidth('mobile')\" id=\"tx-view-mobile\">Mobile<\/button>\r\n        <button class=\"btn btn-view btn-sm btn-view-active\" onclick=\"setTextPreviewWidth('desktop')\" id=\"tx-view-desktop\">Desktop<\/button>\r\n      <\/div>\r\n\r\n      <div class=\"preview-frame-wrap\"><iframe id=\"tx-preview\" class=\"preview-frame\"><\/iframe><\/div>\r\n\r\n      <div class=\"regen-block\">\r\n        <div class=\"regen-hdr\">\r\n          <div class=\"regen-title\">Refine before sign-off<\/div>\r\n          <div class=\"regen-sub\">Describe any changes \u2014 wording, length, tone, new sentences, restructuring.<\/div>\r\n        <\/div>\r\n        <textarea class=\"form-input form-textarea regen-textarea\" id=\"tx-tweak\" rows=\"3\" placeholder=\"e.g. make it shorter, mention our recent \u00a315m debt arrangement, change the opener to lead with the audit trail\"><\/textarea>\r\n      <\/div>\r\n\r\n      <div class=\"draft-actions\">\r\n        <button class=\"btn btn-cancel\" onclick=\"backToTextStep1()\">\u2190 Edit brief<\/button>\r\n        <button class=\"btn btn-view\" onclick=\"regenerateTextEmail()\" id=\"tx-regen-btn\">\u21bb Regenerate<\/button>\r\n        <button class=\"btn btn-sky\" onclick=\"saveTextEmailDraft()\" id=\"tx-save-btn\">Save draft<\/button>\r\n        <button class=\"btn btn-sky\" onclick=\"pushTextToCM()\" id=\"tx-push-btn\" style=\"display:none\">Push to Campaign Monitor<\/button>\r\n      <\/div>\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- ============================================================\r\n     MODAL: Draft MO designed email (vague list \/ featured \/ membership)\r\n     ============================================================ -->\r\n<div class=\"modal\" id=\"modal-draft-mo-designed\">\r\n  <div class=\"modal-box modal-xl\">\r\n\r\n    <div class=\"draft-hdr\">\r\n      <div>\r\n        <div class=\"modal-title\" id=\"mo-designed-modal-title\">New MO designed email<\/div>\r\n        <div class=\"modal-sub\" id=\"mo-designed-modal-sub\">MO-blue template. Brief tells Claude what to write.<\/div>\r\n      <\/div>\r\n      <button class=\"modal-close-x\" onclick=\"closeModal('draft-mo-designed')\" aria-label=\"Close\">\u00d7<\/button>\r\n    <\/div>\r\n\r\n    <!-- Step 1: Brief -->\r\n    <div class=\"draft-step\" id=\"mo-step-1\">\r\n\r\n      <div class=\"form-row\" id=\"mo-subtype-row\">\r\n        <div class=\"form-label\">MO type <span class=\"form-label-req\">(required)<\/span><\/div>\r\n        <select class=\"form-input\" id=\"mo-subtype\" onchange=\"onMoSubtypeChange()\">\r\n          <option value=\"\">\u2014 Pick one \u2014<\/option>\r\n          <option value=\"mo_list\">Property list (vague \u2014 multiple opportunities)<\/option>\r\n          <option value=\"mo_property\">Featured property (single highlighted opportunity)<\/option>\r\n          <option value=\"mo_membership\">Membership push (recruit new members)<\/option>\r\n        <\/select>\r\n      <\/div>\r\n\r\n      <div class=\"form-row\">\r\n        <div class=\"form-label\">Brief \u2014 what's this email about?<\/div>\r\n        <textarea class=\"form-input form-textarea\" id=\"mo-brief\" rows=\"6\" placeholder=\"e.g. Latest market opportunities \u2014 pull the first 5 from the MO page, drop the region from item 2\"><\/textarea>\r\n        <div class=\"form-status\" id=\"mo-listings-status\"><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"form-row form-row-2col\">\r\n        <div>\r\n          <div class=\"form-label\">Subject hint <span class=\"form-label-sub\">(optional)<\/span><\/div>\r\n          <input class=\"form-input\" id=\"mo-subject-hint\" type=\"text\" placeholder=\"\">\r\n        <\/div>\r\n        <div>\r\n          <div class=\"form-label\">LEARN MORE \/ APPLY NOW URL<\/div>\r\n          <input class=\"form-input\" id=\"mo-cta-url\" type=\"url\" value=\"https:\/\/singervielle.com\/market-opportunities\/\" placeholder=\"https:\/\/singervielle.com\/market-opportunities\/\">\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"form-row\">\r\n        <div class=\"form-label\">Image <span class=\"form-label-sub\">(required for Featured property, optional for Membership push, not used for List)<\/span><\/div>\r\n        <div id=\"mo-image-widget\" class=\"image-widget\">\r\n          <div class=\"image-widget-empty\" id=\"mo-image-empty\">\r\n            <input type=\"file\" id=\"mo-image-file\" accept=\"image\/png,image\/jpeg,image\/webp,image\/gif\" style=\"display:none\" onchange=\"onMoImageSelected(event)\">\r\n            <button type=\"button\" class=\"btn btn-view btn-sm\" onclick=\"document.getElementById('mo-image-file').click()\">+ Add image<\/button>\r\n            <span class=\"image-widget-hint\">PNG, JPG, GIF or WebP up to 10 MB.<\/span>\r\n          <\/div>\r\n          <div class=\"image-widget-filled\" id=\"mo-image-filled\" style=\"display:none\">\r\n            <img decoding=\"async\" id=\"mo-image-thumb\" class=\"image-widget-thumb\" src=\"\" alt=\"\">\r\n            <div class=\"image-widget-meta\">\r\n              <input class=\"form-input\" id=\"mo-image-caption\" type=\"text\" placeholder=\"Caption (optional, for accessibility)\" style=\"font-size:13px\">\r\n              <div class=\"image-widget-actions\">\r\n                <button type=\"button\" class=\"btn btn-view btn-sm\" onclick=\"document.getElementById('mo-image-file').click()\">Replace<\/button>\r\n                <button type=\"button\" class=\"btn btn-cancel btn-sm\" onclick=\"clearMoImage()\">Remove<\/button>\r\n              <\/div>\r\n              <div class=\"image-widget-status\" id=\"mo-image-status\"><\/div>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"form-row\">\r\n        <label style=\"display:flex;align-items:center;gap:8px;cursor:pointer;font-size:13px;color:var(--text)\">\r\n          <input type=\"checkbox\" id=\"mo-show-header\" style=\"cursor:pointer\">\r\n          <span>Show MARKET OPPORTUNITIES masthead header <span class=\"form-label-sub\">(off for Vague List by default, on for Featured + Membership)<\/span><\/span>\r\n        <\/label>\r\n      <\/div>\r\n\r\n      <div class=\"form-row form-row-2col\">\r\n        <div>\r\n          <div class=\"form-label\">Sender <span class=\"form-label-sub\">(CM \"From\" name)<\/span><\/div>\r\n          <select class=\"form-input\" id=\"mo-sender\">\r\n            <option value=\"Dale Henry\">Dale Henry<\/option>\r\n            <option value=\"Neil Singer\">Neil Singer<\/option>\r\n            <option value=\"Xan Zuckerman\">Xan Zuckerman<\/option>\r\n            <option value=\"Singer Vielle\">Singer Vielle (brand)<\/option>\r\n          <\/select>\r\n        <\/div>\r\n        <div>\r\n          <div class=\"form-label\">Link to scheduled item <span class=\"form-label-sub\">(optional)<\/span><\/div>\r\n          <select class=\"form-input\" id=\"mo-schedule-link\"><\/select>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"form-row\">\r\n        <div class=\"form-label\">CM lists to send to<\/div>\r\n        <div id=\"mo-lists\" class=\"lists-picker\"><\/div>\r\n        <div class=\"reach-line\" id=\"mo-reach\"><span class=\"reach-num\">\u2014<\/span> projected unique recipients<\/div>\r\n      <\/div>\r\n\r\n      <div class=\"draft-actions\">\r\n        <button class=\"btn btn-cancel\" onclick=\"closeModal('draft-mo-designed')\">Cancel<\/button>\r\n        <button class=\"btn btn-sky\" onclick=\"generateMoDesigned()\" id=\"mo-generate-btn\">Generate \u2192<\/button>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Step 2: Preview + regenerate -->\r\n    <div class=\"draft-step\" id=\"mo-step-2\" style=\"display:none\">\r\n\r\n      <div class=\"preview-tabs\">\r\n        <div class=\"preview-tabs-left\">\r\n          <div class=\"modal-sub\" id=\"mo-preview-subject\" style=\"font-weight:600;color:#002540\"><\/div>\r\n        <\/div>\r\n        <button class=\"btn btn-view btn-sm\" onclick=\"setMoPreviewWidth('mobile')\" id=\"mo-view-mobile\">Mobile<\/button>\r\n        <button class=\"btn btn-view btn-sm btn-view-active\" onclick=\"setMoPreviewWidth('desktop')\" id=\"mo-view-desktop\">Desktop<\/button>\r\n      <\/div>\r\n\r\n      <div class=\"preview-frame-wrap\"><iframe id=\"mo-preview\" class=\"preview-frame\"><\/iframe><\/div>\r\n\r\n      <div class=\"regen-block\">\r\n        <div class=\"regen-hdr\">\r\n          <div class=\"regen-title\">Refine before sign-off<\/div>\r\n          <div class=\"regen-sub\">For a list: \"swap items 2 and 3\" \/ \"add an EV charging line at the bottom\" \/ \"drop the prices\". For a property: \"shorten the description\" \/ \"change the eyebrow to OFF-MARKET OPPORTUNITY\". For membership: \"more aspirational\" \/ \"shorten to 2 paragraphs\".<\/div>\r\n        <\/div>\r\n        <textarea class=\"form-input form-textarea regen-textarea\" id=\"mo-tweak\" rows=\"3\" placeholder=\"Describe any changes\"><\/textarea>\r\n      <\/div>\r\n\r\n      <div class=\"draft-actions\">\r\n        <button class=\"btn btn-cancel\" onclick=\"backToMoStep1()\">\u2190 Edit brief<\/button>\r\n        <button class=\"btn btn-view\" onclick=\"regenerateMoDesigned()\" id=\"mo-regen-btn\">\u21bb Regenerate<\/button>\r\n        <button class=\"btn btn-sky\" onclick=\"saveMoDesignedDraft()\" id=\"mo-save-btn\">Save draft<\/button>\r\n        <button class=\"btn btn-sky\" onclick=\"pushMoDesignedToCM()\" id=\"mo-push-btn\" style=\"display:none\">Push to Campaign Monitor<\/button>\r\n      <\/div>\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- ============================================================\r\n     MODAL: General designed email \u2014 chat-driven, two-pane\r\n     Left: conversation with Claude; right: live HTML preview\r\n     ============================================================ -->\r\n<div class=\"modal\" id=\"modal-draft-general-designed\">\r\n  <div class=\"modal-box gec-modal\">\r\n\r\n    <div class=\"gec-hdr\">\r\n      <div class=\"gec-hdr-l\">\r\n        <div class=\"modal-title\">New general email<\/div>\r\n        <div class=\"modal-sub\" id=\"gec-hdr-sub\">Brief Claude in the chat. Live preview updates on the right. Anything that isn't a property or MO release.<\/div>\r\n      <\/div>\r\n      <button class=\"modal-close-x\" onclick=\"closeModal('draft-general-designed')\" aria-label=\"Close\">\u00d7<\/button>\r\n    <\/div>\r\n\r\n    <!-- Meta bar: theme (required), sender, subject, schedule link -->\r\n    <div class=\"gec-meta-bar\">\r\n      <div class=\"gec-meta-field\">\r\n        <div class=\"form-label\">Theme <span class=\"form-label-req\">(required)<\/span><\/div>\r\n        <select class=\"form-input\" id=\"gec-theme\" onchange=\"gecOnThemeChange()\">\r\n          <option value=\"\">\u2014 Pick one \u2014<\/option>\r\n        <\/select>\r\n      <\/div>\r\n      <div class=\"gec-meta-field\">\r\n        <div class=\"form-label\">Sender<\/div>\r\n        <select class=\"form-input\" id=\"gec-sender\">\r\n          <option value=\"Neil Singer\">Neil Singer<\/option>\r\n          <option value=\"Dale Henry\">Dale Henry<\/option>\r\n          <option value=\"Xan Zuckerman\">Xan Zuckerman<\/option>\r\n          <option value=\"Singer Vielle\" selected>Singer Vielle (brand)<\/option>\r\n        <\/select>\r\n      <\/div>\r\n      <div class=\"gec-meta-field gec-meta-field-wide\">\r\n        <div class=\"form-label\">Subject line <span class=\"form-label-sub\">(Claude proposes \u2014 edit anytime)<\/span><\/div>\r\n        <input class=\"form-input\" id=\"gec-subject\" type=\"text\" placeholder=\"Will be filled by Claude after first generation\">\r\n      <\/div>\r\n      <div class=\"gec-meta-field\">\r\n        <div class=\"form-label\">Link to scheduled item <span class=\"form-label-sub\">(optional)<\/span><\/div>\r\n        <select class=\"form-input\" id=\"gec-schedule-link\"><\/select>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Two-pane body -->\r\n    <div class=\"gec-body\">\r\n\r\n      <!-- LEFT: chat -->\r\n      <div class=\"gec-chat\">\r\n\r\n        <div class=\"gec-chat-scroll\" id=\"gec-chat-scroll\">\r\n          <!-- Messages injected by JS; empty-state shown on first open -->\r\n        <\/div>\r\n\r\n        <!-- Attached image strip (shows only when an image is staged) -->\r\n        <div class=\"gec-image-strip\" id=\"gec-image-strip\" style=\"display:none\">\r\n          <img decoding=\"async\" class=\"gec-image-thumb\" id=\"gec-image-thumb\" src=\"\" alt=\"\">\r\n          <div class=\"gec-image-meta\">\r\n            <input class=\"form-input gec-image-caption-input\" id=\"gec-image-caption\" type=\"text\" placeholder=\"Caption (optional, included in the brief)\">\r\n            <div class=\"gec-image-status\" id=\"gec-image-status\"><\/div>\r\n          <\/div>\r\n          <div class=\"gec-image-actions\">\r\n            <button type=\"button\" class=\"btn btn-view btn-sm\" onclick=\"document.getElementById('gec-image-file').click()\">Replace<\/button>\r\n            <button type=\"button\" class=\"btn btn-cancel btn-sm\" onclick=\"gecClearImage()\">Remove<\/button>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <!-- Composer -->\r\n        <div class=\"gec-composer\">\r\n          <input type=\"file\" id=\"gec-image-file\" accept=\"image\/png,image\/jpeg,image\/webp,image\/gif\" style=\"display:none\" onchange=\"gecOnImageSelected(event)\">\r\n          <button type=\"button\" class=\"gec-attach-btn\" id=\"gec-attach-btn\" onclick=\"document.getElementById('gec-image-file').click()\" title=\"Attach image\">\ud83d\udcce<\/button>\r\n          <textarea class=\"form-input gec-composer-input\" id=\"gec-composer-input\" rows=\"2\" placeholder=\"Describe what you want \u2014 e.g. 'Milestone email: we just passed \u00a31bn through clicktopurchase. Hero stat, 3 reasons it matters, sign-off from Neil.'\"><\/textarea>\r\n          <button type=\"button\" class=\"btn btn-sky gec-send-btn\" id=\"gec-send-btn\" onclick=\"gecSend()\">Send<\/button>\r\n        <\/div>\r\n        <div class=\"gec-composer-hint\">Enter to send \u00b7 Shift+Enter for newline \u00b7 attached image is included with your next message<\/div>\r\n      <\/div>\r\n\r\n      <!-- RIGHT: preview -->\r\n      <div class=\"gec-preview\">\r\n        <div class=\"gec-preview-tabs\">\r\n          <div class=\"gec-preview-label\">Email preview<\/div>\r\n          <div style=\"flex:1\"><\/div>\r\n          <button class=\"btn btn-view btn-sm\" onclick=\"gecSetPreviewWidth('mobile')\" id=\"gec-view-mobile\">Mobile<\/button>\r\n          <button class=\"btn btn-view btn-sm btn-view-active\" onclick=\"gecSetPreviewWidth('desktop')\" id=\"gec-view-desktop\">Desktop<\/button>\r\n        <\/div>\r\n        <div class=\"gec-preview-frame-wrap\" id=\"gec-preview-frame-wrap\">\r\n          <iframe id=\"gec-preview-frame\" class=\"gec-preview-frame\"><\/iframe>\r\n          <div class=\"gec-preview-empty\" id=\"gec-preview-empty\">\r\n            <div class=\"gec-preview-empty-icon\">\u2709<\/div>\r\n            <div class=\"gec-preview-empty-title\">Preview will appear here<\/div>\r\n            <div class=\"gec-preview-empty-sub\">Send a brief in the chat to start designing.<\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n    <!-- Footer: CM lists + actions -->\r\n    <div class=\"gec-footer\">\r\n      <div class=\"gec-footer-lists\">\r\n        <div class=\"form-label\" style=\"margin-bottom:6px\">CM lists to send to<\/div>\r\n        <div id=\"gec-lists\" class=\"lists-picker gec-lists-picker\"><\/div>\r\n        <div class=\"reach-line\" id=\"gec-reach\"><span class=\"reach-num\">\u2014<\/span> projected unique recipients<\/div>\r\n      <\/div>\r\n      <div class=\"gec-footer-actions\">\r\n        <button class=\"btn btn-cancel\" onclick=\"closeModal('draft-general-designed')\">Close<\/button>\r\n        <button class=\"btn btn-view\" onclick=\"gecSaveDraft()\" id=\"gec-save-btn\">Save draft<\/button>\r\n        <button class=\"btn btn-sky\" onclick=\"gecPushToCM()\" id=\"gec-push-btn\" style=\"display:none\">Push to Campaign Monitor<\/button>\r\n      <\/div>\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- ============================================================\r\n     MODAL: Draft property email (paired light + dark)\r\n     ============================================================ -->\r\n<div class=\"modal\" id=\"modal-draft-property\">\r\n  <div class=\"modal-box modal-xl\">\r\n\r\n    <div class=\"draft-hdr\">\r\n      <div>\r\n        <div class=\"modal-title\">New property email<\/div>\r\n        <div class=\"modal-sub\" id=\"draft-prop-sub\">Paste an SV property URL to pre-fill the form, then generate paired light + dark email templates.<\/div>\r\n      <\/div>\r\n      <button class=\"modal-close-x\" onclick=\"closeModal('draft-property')\" aria-label=\"Close\">\u00d7<\/button>\r\n    <\/div>\r\n\r\n    <!-- Step 1: URL + scrape -->\r\n    <div class=\"draft-step\" id=\"draft-step-1\">\r\n      <div class=\"form-row\">\r\n        <div class=\"form-label\">Property URL<\/div>\r\n        <div style=\"display:flex;gap:8px\">\r\n          <input class=\"form-input\" id=\"dp-url\" type=\"url\" placeholder=\"https:\/\/singervielle.com\/property\/...\" style=\"flex:1\">\r\n          <button class=\"btn btn-sky\" onclick=\"scrapePropertyForDraft()\" id=\"dp-scrape-btn\">Fetch details<\/button>\r\n        <\/div>\r\n      <\/div>\r\n      <div id=\"dp-scrape-status\" class=\"form-status\"><\/div>\r\n    <\/div>\r\n\r\n    <!-- Step 2: Form (revealed after scrape) -->\r\n    <div class=\"draft-step\" id=\"draft-step-2\" style=\"display:none\">\r\n\r\n      <div class=\"draft-grid\">\r\n        <div class=\"draft-col\">\r\n\r\n          <div class=\"form-row\">\r\n            <div class=\"form-label\">Title \/ headline<\/div>\r\n            <input class=\"form-input\" id=\"dp-title\" type=\"text\" placeholder=\"Property headline\">\r\n          <\/div>\r\n\r\n          <div class=\"form-row\">\r\n            <div class=\"form-label\">Address<\/div>\r\n            <input class=\"form-input\" id=\"dp-address\" type=\"text\" placeholder=\"Street, city, postcode\">\r\n          <\/div>\r\n\r\n          <div class=\"form-row form-row-2col\">\r\n            <div>\r\n              <div class=\"form-label\">Asking price<\/div>\r\n              <input class=\"form-input\" id=\"dp-price\" type=\"text\" placeholder=\"\u00a3920,000\">\r\n            <\/div>\r\n            <div>\r\n              <div class=\"form-label\">Net Initial Yield <span class=\"form-label-sub\">(NIY)<\/span><\/div>\r\n              <input class=\"form-input\" id=\"dp-yield\" type=\"text\" placeholder=\"6.5%\">\r\n            <\/div>\r\n          <\/div>\r\n\r\n          <div class=\"form-row form-row-2col\">\r\n            <div>\r\n              <div class=\"form-label\">Passing rent p.a. <span class=\"form-label-sub\">(commercial let)<\/span><\/div>\r\n              <input class=\"form-input\" id=\"dp-passing-rent\" type=\"text\" placeholder=\"\u00a3156,600\">\r\n            <\/div>\r\n            <div>\r\n              <div class=\"form-label\">Contracted rent p.a. <span class=\"form-label-sub\">(residential \/ HMO)<\/span><\/div>\r\n              <input class=\"form-input\" id=\"dp-rent\" type=\"text\" placeholder=\"\u00a3126,000\">\r\n            <\/div>\r\n          <\/div>\r\n\r\n          <div class=\"form-row form-row-2col\">\r\n            <div>\r\n              <div class=\"form-label\">Accommodation <span class=\"form-label-sub\">(sq ft)<\/span><\/div>\r\n              <input class=\"form-input\" id=\"dp-accommodation\" type=\"text\" placeholder=\"4,453 sq ft\">\r\n            <\/div>\r\n            <div>\r\n              <div class=\"form-label\">Capital value \/ sq ft<\/div>\r\n              <input class=\"form-input\" id=\"dp-capval\" type=\"text\" placeholder=\"\u00a3126\">\r\n            <\/div>\r\n          <\/div>\r\n\r\n          <div class=\"form-hint\">The first 3 of these stats (Asking Price + Rent + Accommodation\/CapValue) appear as boxes in the light email. The dark email shows all 4. Leave blank to omit.<\/div>\r\n\r\n          <div class=\"form-row\">\r\n            <div class=\"form-label\">Highlights (one per line) \u2014 appears as bullets in the email<\/div>\r\n            <textarea class=\"form-input form-textarea\" id=\"dp-highlights\" rows=\"6\" placeholder=\"One highlight per line\"><\/textarea>\r\n          <\/div>\r\n\r\n          <div class=\"form-row\">\r\n            <div class=\"form-label\">Hero image URL<\/div>\r\n            <input class=\"form-input\" id=\"dp-hero\" type=\"url\" placeholder=\"https:\/\/singervielle.com\/wp-content\/...\">\r\n            <div id=\"dp-hero-preview\" class=\"hero-preview\"><\/div>\r\n          <\/div>\r\n\r\n          <div class=\"form-row\">\r\n            <div class=\"form-label\">Gallery<\/div>\r\n            <div id=\"dp-gallery-picker\"><\/div>\r\n          <\/div>\r\n\r\n        <\/div>\r\n\r\n        <div class=\"draft-col draft-col-side\">\r\n\r\n          <div class=\"form-row\">\r\n            <div class=\"form-label\">Sender<\/div>\r\n            <select class=\"form-input\" id=\"dp-sender\">\r\n              <option value=\"Dale Henry\">Dale Henry<\/option>\r\n              <option value=\"Neil Singer\">Neil Singer<\/option>\r\n              <option value=\"Xan Zuckerman\">Xan Zuckerman<\/option>\r\n            <\/select>\r\n          <\/div>\r\n\r\n          <div class=\"form-row\">\r\n            <div class=\"form-label\">In-email CTA contact<\/div>\r\n            <input class=\"form-input\" id=\"dp-cta-email\" type=\"email\" value=\"invest@singervielle.co.uk\">\r\n          <\/div>\r\n\r\n          <div class=\"form-row\">\r\n            <div class=\"form-label\">Theme<\/div>\r\n            <select class=\"form-input\" id=\"dp-theme\">\r\n              <!-- populated by JS -->\r\n            <\/select>\r\n          <\/div>\r\n\r\n          <div class=\"form-row\">\r\n            <div class=\"form-label\">CM lists to send to<\/div>\r\n            <div id=\"dp-lists\" class=\"lists-picker\">\r\n              <!-- populated by JS -->\r\n            <\/div>\r\n            <div class=\"reach-line\" id=\"dp-reach\"><span class=\"reach-num\">\u2014<\/span> projected unique recipients<\/div>\r\n          <\/div>\r\n\r\n          <div class=\"form-row\">\r\n            <div class=\"form-label\">Subject line<\/div>\r\n            <input class=\"form-input\" id=\"dp-subject\" type=\"text\" placeholder=\"Auto-generated if blank\">\r\n          <\/div>\r\n\r\n          <div class=\"form-row\">\r\n            <div class=\"form-label\">Link light to <span style=\"font-weight:400;color:var(--muted);font-size:11px\">(optional)<\/span><\/div>\r\n            <select class=\"form-input\" id=\"dp-schedule-link-light\"><\/select>\r\n          <\/div>\r\n\r\n          <div class=\"form-row\">\r\n            <div class=\"form-label\">Link dark to <span style=\"font-weight:400;color:var(--muted);font-size:11px\">(optional)<\/span><\/div>\r\n            <select class=\"form-input\" id=\"dp-schedule-link-dark\"><\/select>\r\n          <\/div>\r\n\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"draft-actions\">\r\n        <button class=\"btn btn-cancel\" onclick=\"closeModal('draft-property')\">Cancel<\/button>\r\n        <button class=\"btn btn-view\" onclick=\"saveDraftPropertyOnly()\" title=\"Save inputs to the library without generating HTML yet\">Save draft only<\/button>\r\n        <button class=\"btn btn-sky\" onclick=\"generatePropertyEmail()\" id=\"dp-generate-btn\">Generate light + dark \u2192<\/button>\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n    <!-- Step 3: Preview generated emails -->\r\n    <div class=\"draft-step\" id=\"draft-step-3\" style=\"display:none\">\r\n      <div class=\"preview-tabs\">\r\n        <button class=\"preview-tab on\" id=\"ptab-light\" onclick=\"switchPreview('light')\">Light template<\/button>\r\n        <button class=\"preview-tab\" id=\"ptab-dark\" onclick=\"switchPreview('dark')\">Dark template<\/button>\r\n        <div class=\"preview-spacer\"><\/div>\r\n        <button class=\"btn btn-view btn-sm\" onclick=\"setPreviewWidth('mobile')\">Mobile<\/button>\r\n        <button class=\"btn btn-view btn-sm\" onclick=\"setPreviewWidth('desktop')\">Desktop<\/button>\r\n      <\/div>\r\n      <div class=\"preview-frame-wrap\" id=\"preview-frame-wrap\">\r\n        <iframe id=\"dp-preview\" class=\"preview-frame\"><\/iframe>\r\n      <\/div>\r\n      <div class=\"regen-block\">\r\n        <div class=\"regen-hdr\">\r\n          <div class=\"regen-title\">Refine before sign-off<\/div>\r\n          <div class=\"regen-sub\">Describe any changes you want \u2014 emphasis shifts, wording tweaks, restructuring, new angles. Each regenerate iterates on the version above.<\/div>\r\n        <\/div>\r\n        <textarea class=\"form-input form-textarea regen-textarea\" id=\"dp-tweak\" rows=\"3\" placeholder=\"e.g. lead with the corporate covenant strength, shorten the lease detail bullet, add a line about the 2029 minimum yield uplift\"><\/textarea>\r\n      <\/div>\r\n      <div class=\"draft-actions\">\r\n        <button class=\"btn btn-cancel\" onclick=\"backToStep2()\">\u2190 Edit inputs<\/button>\r\n        <button class=\"btn btn-view\" onclick=\"regeneratePropertyEmail()\" id=\"dp-regen-btn\">\u21bb Regenerate<\/button>\r\n        <button class=\"btn btn-sky\" onclick=\"savePropertyDraft()\" id=\"dp-save-btn\">Save draft<\/button>\r\n        <button class=\"btn btn-sky\" onclick=\"pushPropertyToCM()\" id=\"dp-push-btn\" style=\"display:none\">Push to Campaign Monitor<\/button>\r\n      <\/div>\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- ============================================================\r\n     MODAL: New schedule item\r\n     ============================================================ -->\r\n<div class=\"modal\" id=\"modal-new\">\r\n  <div class=\"modal-box modal-wide\">\r\n    <div class=\"modal-title\">+ New scheduled item<\/div>\r\n    <div class=\"modal-sub\">Plan a campaign on the calendar. You can edit details or add content once the relevant tab ships (Emails, Social).<\/div>\r\n\r\n    <div class=\"form-row\">\r\n      <div class=\"form-label\">Date<\/div>\r\n      <input class=\"form-input\" id=\"new-date\" type=\"date\">\r\n    <\/div>\r\n\r\n    <div class=\"form-row\">\r\n      <div class=\"form-label\">Kind<\/div>\r\n      <select class=\"form-input\" id=\"new-kind\">\r\n        <optgroup label=\"Properties\">\r\n          <option value=\"email_property\">Property email<\/option>\r\n        <\/optgroup>\r\n        <optgroup label=\"Market Opportunities\">\r\n          <option value=\"email_mo\">MO email<\/option>\r\n        <\/optgroup>\r\n        <optgroup label=\"Other\">\r\n          <option value=\"email_general\" selected>General email<\/option>\r\n          <option value=\"article\">Article (folds into General)<\/option>\r\n          <option value=\"social_post\">Social post<\/option>\r\n        <\/optgroup>\r\n      <\/select>\r\n    <\/div>\r\n\r\n    <div class=\"form-row\">\r\n      <div class=\"form-label\">Theme<\/div>\r\n      <select class=\"form-input\" id=\"new-theme\">\r\n        <!-- populated by JS -->\r\n      <\/select>\r\n    <\/div>\r\n\r\n    <div class=\"form-row\" id=\"new-channels-row\" style=\"display:none\">\r\n      <div class=\"form-label\">Channels<\/div>\r\n      <div class=\"form-checkboxes\">\r\n        <label><input type=\"checkbox\" value=\"linkedin\" checked> LinkedIn<\/label>\r\n        <label><input type=\"checkbox\" value=\"instagram\" checked> Instagram<\/label>\r\n        <label><input type=\"checkbox\" value=\"facebook\" checked> Facebook<\/label>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"form-row\">\r\n      <div class=\"form-label\">Title<\/div>\r\n      <input class=\"form-input\" id=\"new-title\" type=\"text\" placeholder=\"e.g. Certainty of sale explainer\">\r\n    <\/div>\r\n\r\n    <div class=\"form-row\">\r\n      <div class=\"form-label\">Notes (optional)<\/div>\r\n      <textarea class=\"form-input form-textarea\" id=\"new-notes\" rows=\"3\" placeholder=\"Anything that helps when drafting later\"><\/textarea>\r\n    <\/div>\r\n\r\n    <div class=\"modal-actions\">\r\n      <button class=\"btn btn-cancel\" onclick=\"closeModal('new')\">Cancel<\/button>\r\n      <button class=\"btn btn-sky\" onclick=\"saveNewItem()\">Save to calendar<\/button>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- ============================================================\r\n     MODAL: Edit\/view schedule item\r\n     ============================================================ -->\r\n<div class=\"modal\" id=\"modal-item\">\r\n  <div class=\"modal-box modal-wide\">\r\n    <div class=\"modal-title\" id=\"item-title\">\u2014<\/div>\r\n    <div class=\"modal-sub\" id=\"item-sub\">\u2014<\/div>\r\n    <div id=\"item-body\"><!-- populated by JS --><\/div>\r\n    <div class=\"modal-actions\">\r\n      <button class=\"btn btn-rej\" onclick=\"deleteCurrentItem()\">Delete<\/button>\r\n      <div style=\"display:flex;gap:8px\">\r\n        <button class=\"btn btn-cancel\" onclick=\"closeModal('item')\">Close<\/button>\r\n        <button class=\"btn btn-sky\" onclick=\"saveCurrentItem()\">Save<\/button>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- ============================================================\r\n     MODAL: Edit theme\r\n     ============================================================ -->\r\n<div class=\"modal\" id=\"modal-theme\">\r\n  <div class=\"modal-box modal-wide\">\r\n    <div class=\"modal-title\" id=\"theme-modal-title\">\u2014<\/div>\r\n    <div class=\"modal-sub\">Edit theme metadata and content pack. Reserved themes can be edited but not deleted.<\/div>\r\n    <div id=\"theme-modal-body\"><!-- populated by JS --><\/div>\r\n    <div class=\"modal-actions\">\r\n      <div style=\"display:flex;gap:8px\">\r\n        <button class=\"btn btn-cancel\" onclick=\"closeModal('theme')\">Cancel<\/button>\r\n        <button class=\"btn btn-sky\" onclick=\"saveTheme()\">Save<\/button>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- ============================================================\r\n     MODAL: Quick-create scheduled item (mini-modal)\r\n     Stacks above any email drafting modal. Opened by picking\r\n     \"+ Create new\" in any \"Link to scheduled item\" dropdown.\r\n     ============================================================ -->\r\n<div class=\"modal\" id=\"modal-quick-schedule\">\r\n  <div class=\"modal-box modal-quick-schedule-box\">\r\n    <div class=\"draft-hdr\">\r\n      <div>\r\n        <div class=\"modal-title\">New calendar item<\/div>\r\n        <div class=\"modal-sub\">Will be created and linked to this email automatically.<\/div>\r\n      <\/div>\r\n      <button class=\"modal-close-x\" onclick=\"qsCancel()\" aria-label=\"Close\">\u00d7<\/button>\r\n    <\/div>\r\n\r\n    <div class=\"form-row\">\r\n      <div class=\"form-label\">Date <span class=\"form-label-req\">(required)<\/span><\/div>\r\n      <input class=\"form-input\" id=\"qs-date\" type=\"date\">\r\n    <\/div>\r\n\r\n    <div class=\"form-row\">\r\n      <div class=\"form-label\">Title <span class=\"form-label-req\">(required)<\/span><\/div>\r\n      <input class=\"form-input\" id=\"qs-title\" type=\"text\" placeholder=\"e.g. clicktopurchase milestone push\">\r\n    <\/div>\r\n\r\n    <div class=\"form-row form-row-2col\">\r\n      <div>\r\n        <div class=\"form-label\">Theme<\/div>\r\n        <select class=\"form-input\" id=\"qs-theme\"><\/select>\r\n      <\/div>\r\n      <div>\r\n        <div class=\"form-label\">Kind<\/div>\r\n        <select class=\"form-input\" id=\"qs-kind\"><\/select>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"form-row\">\r\n      <div class=\"form-label\">Notes <span class=\"form-label-sub\">(optional)<\/span><\/div>\r\n      <textarea class=\"form-input form-textarea\" id=\"qs-notes\" rows=\"2\" placeholder=\"Anything that helps when drafting\"><\/textarea>\r\n    <\/div>\r\n\r\n    <div class=\"draft-actions\">\r\n      <button class=\"btn btn-cancel\" onclick=\"qsCancel()\">Cancel<\/button>\r\n      <button class=\"btn btn-sky\" onclick=\"qsSave()\" id=\"qs-save-btn\">Create & link<\/button>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- ============================================================\r\n     MODAL: Article editor \u2014 chat + preview, WordPress-paste output\r\n     ============================================================ -->\r\n<div class=\"modal\" id=\"modal-article-editor\">\r\n  <div class=\"modal-box modal-xl modal-fill\">\r\n    <div class=\"draft-hdr\">\r\n      <div>\r\n        <div class=\"modal-title\">Article \u2014 <span id=\"art-title-chip\">untitled<\/span><\/div>\r\n        <div class=\"modal-sub\">Drafting for Market Insights \u00b7 clean prose HTML for WordPress paste<\/div>\r\n      <\/div>\r\n      <div style=\"display:flex;gap:8px;align-items:center;\">\r\n        <span class=\"article-status-pill\" id=\"art-status-pill\">DRAFT<\/span>\r\n        <button class=\"modal-close-x\" onclick=\"closeArticleEditor()\" aria-label=\"Close\">\u00d7<\/button>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"article-editor-grid\">\r\n\r\n      <!-- LEFT COLUMN: brief + meta + chat -->\r\n      <div class=\"article-editor-left\">\r\n\r\n        <!-- Compact meta header \u2014 title + status + schedule link -->\r\n        <div class=\"art-meta-row\">\r\n          <div class=\"art-meta-cell art-meta-cell-wide\">\r\n            <div class=\"form-label\">Title<\/div>\r\n            <input class=\"form-input\" id=\"art-title\" type=\"text\" placeholder=\"Article title \u2014 appears as H1 in WordPress\">\r\n          <\/div>\r\n          <div class=\"art-meta-cell\">\r\n            <div class=\"form-label\">Status<\/div>\r\n            <select class=\"form-input\" id=\"art-status\">\r\n              <option value=\"draft\">Draft<\/option>\r\n              <option value=\"ready\">Ready to publish<\/option>\r\n              <option value=\"published\">Published<\/option>\r\n              <option value=\"archived\">Archived<\/option>\r\n            <\/select>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"art-meta-row\">\r\n          <div class=\"art-meta-cell art-meta-cell-wide\">\r\n            <div class=\"form-label\">Subtitle <span class=\"form-label-sub\">(optional)<\/span><\/div>\r\n            <input class=\"form-input\" id=\"art-subtitle\" type=\"text\" placeholder=\"One-sentence lead \u2014 shown under the H1 in some WP themes\">\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"art-meta-row\" id=\"art-publish-fields\" style=\"display:none\">\r\n          <div class=\"art-meta-cell art-meta-cell-wide\">\r\n            <div class=\"form-label\">Published URL <span class=\"form-label-sub\">(live on WordPress)<\/span><\/div>\r\n            <input class=\"form-input\" id=\"art-wp-url\" type=\"url\" placeholder=\"https:\/\/singervielle.com\/your-article-slug\/\" readonly style=\"background:#f8fafc;cursor:default\">\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"art-meta-row\">\r\n          <div class=\"art-meta-cell art-meta-cell-wide\">\r\n            <div class=\"form-label\">Link to scheduled calendar item <span class=\"form-label-sub\">(optional)<\/span><\/div>\r\n            <select class=\"form-input\" id=\"art-schedule-link\">\r\n              <option value=\"\">\u2014 None \u2014<\/option>\r\n            <\/select>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <!-- Chat thread -->\r\n        <div class=\"art-chat-wrap\">\r\n          <div class=\"art-chat-hdr\">\r\n            <span class=\"art-chat-title\">Drafting chat<\/span>\r\n            <span class=\"art-chat-hint\">Brief Claude, iterate, get a polished article. Claude can web-search for current data.<\/span>\r\n          <\/div>\r\n          <div class=\"art-chat-thread\" id=\"art-chat-thread\">\r\n            <div class=\"art-chat-empty\">Tell Claude what you'd like to write about. Be specific where it matters (audience, angle, key points to cover). Claude will draft a first cut you can iterate from.<\/div>\r\n          <\/div>\r\n          <div class=\"art-chat-composer\">\r\n            <textarea class=\"form-input\" id=\"art-chat-input\" rows=\"3\" placeholder=\"e.g. Draft a piece on EV charging hubs as a commercial asset class \u2014 covenant strength, typical yields, why long leases work. Around 800 words.\" style=\"resize:vertical;min-height:70px;\"><\/textarea>\r\n            <div class=\"art-chat-actions\">\r\n              <button class=\"btn-link\" id=\"art-chat-btn\" onclick=\"articleChatSend()\">Send \u2192<\/button>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n      <!-- RIGHT COLUMN: preview + actions -->\r\n      <div class=\"article-editor-right\">\r\n        <div class=\"art-preview-hdr\">\r\n          <span class=\"art-preview-title\">Preview<\/span>\r\n          <span class=\"art-preview-meta\" id=\"art-preview-meta\">No draft yet<\/span>\r\n        <\/div>\r\n        <div class=\"art-preview\" id=\"art-preview\">\r\n          <div class=\"art-preview-empty\">\r\n            <div class=\"art-preview-empty-icon\">\ud83d\udcdd<\/div>\r\n            <div class=\"art-preview-empty-title\">Your article preview will appear here<\/div>\r\n            <div class=\"art-preview-empty-sub\">Start with a brief in the chat on the left.<\/div>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <!-- STAGE-AWARE ACTION AREA -->\r\n        <!-- Stage 1: Drafting (default). Shows when there's content but no publish flow active yet. -->\r\n        <div class=\"art-stage art-stage-drafting\" id=\"art-stage-drafting\" style=\"display:none\">\r\n          <div class=\"art-stage-hint\">Ready to publish? Copy the HTML and paste it into a new Market Insights page in WordPress.<\/div>\r\n          <div class=\"art-stage-actions\">\r\n            <button class=\"btn btn-view\" onclick=\"articleCopyPlain()\" id=\"art-copy-plain-btn\" disabled>\ud83d\udccb Copy plain text<\/button>\r\n            <button class=\"btn btn-sky\" onclick=\"articleStartPublishing()\" id=\"art-start-publishing-btn\" disabled>\ud83d\udccb Copy HTML & start publishing \u2192<\/button>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <!-- Stage 2: Publishing in progress. Shown after Start publishing is clicked. -->\r\n        <div class=\"art-stage art-stage-publishing\" id=\"art-stage-publishing\" style=\"display:none\">\r\n          <div class=\"art-stage-hint\">\r\n            <strong>HTML copied to clipboard.<\/strong> Now in WordPress: add a new Market Insights page, paste the HTML in code\/HTML mode, publish, then drop the live URL below.\r\n          <\/div>\r\n          <div class=\"art-stage-url-row\">\r\n            <input class=\"form-input\" id=\"art-wp-url-inline\" type=\"url\" placeholder=\"https:\/\/singervielle.com\/your-article-slug\/\" autocomplete=\"off\">\r\n            <button class=\"btn btn-sky\" onclick=\"articleMarkPublished()\" id=\"art-mark-published-btn\">\u2713 Mark published<\/button>\r\n          <\/div>\r\n          <div class=\"art-stage-secondary\">\r\n            <button class=\"btn-link-small\" onclick=\"articleCopyHtml()\" title=\"Copy the HTML again\">\ud83d\udccb Copy HTML again<\/button>\r\n            <span class=\"art-stage-divider\">\u00b7<\/span>\r\n            <button class=\"btn-link-small\" onclick=\"articleCancelPublishing()\">\u2190 Back to drafting<\/button>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <!-- Stage 3: Published. Shown when wp_post_url is set. -->\r\n        <div class=\"art-stage art-stage-published\" id=\"art-stage-published\" style=\"display:none\">\r\n          <div class=\"art-stage-hint\">\r\n            <strong>Live on WordPress.<\/strong> <a id=\"art-stage-published-link\" href=\"#\" target=\"_blank\" rel=\"noopener\">View on site \u2192<\/a>\r\n          <\/div>\r\n          <div class=\"art-stage-actions\">\r\n            <button class=\"btn btn-view\" onclick=\"articleCopyHtml()\">\ud83d\udccb Copy HTML<\/button>\r\n            <button class=\"btn btn-sky\" onclick=\"articleCreateEmailTeaser()\" id=\"art-email-teaser-btn\">\u2709 Create email teaser<\/button>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <!-- Bottom row: Close + auto-save indicator -->\r\n        <div class=\"art-bottom-actions\">\r\n          <button class=\"btn btn-cancel\" onclick=\"closeArticleEditor()\">Close<\/button>\r\n          <div class=\"art-bottom-status\" id=\"art-bottom-status\">\r\n            <span class=\"art-bottom-status-text\" id=\"art-bottom-status-text\">Unsaved<\/span>\r\n            <button class=\"btn btn-view\" onclick=\"articleSave()\" id=\"art-save-btn\">\ud83d\udcbe Save<\/button>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- ============================================================\r\n     MODAL: Quick add-an-idea\r\n     ============================================================ -->\r\n<div class=\"modal\" id=\"modal-add-idea\">\r\n  <div class=\"modal-box modal-sm\">\r\n    <div class=\"draft-hdr\">\r\n      <div>\r\n        <div class=\"modal-title\">Add an article idea<\/div>\r\n        <div class=\"modal-sub\">No commitment \u2014 just capture the topic so it's not forgotten.<\/div>\r\n      <\/div>\r\n      <button class=\"modal-close-x\" onclick=\"closeModal('add-idea')\" aria-label=\"Close\">\u00d7<\/button>\r\n    <\/div>\r\n    <div class=\"form-row\">\r\n      <div class=\"form-label\">Idea title<\/div>\r\n      <input class=\"form-input\" id=\"idea-title\" type=\"text\" placeholder=\"e.g. How rising bond yields affect prime commercial yields\">\r\n    <\/div>\r\n    <div class=\"form-row\">\r\n      <div class=\"form-label\">Notes <span class=\"form-label-sub\">(optional)<\/span><\/div>\r\n      <textarea class=\"form-input form-textarea\" id=\"idea-notes\" rows=\"3\" placeholder=\"Angle, key facts, who suggested it\"><\/textarea>\r\n    <\/div>\r\n    <div class=\"draft-actions\">\r\n      <button class=\"btn btn-cancel\" onclick=\"closeModal('add-idea')\">Cancel<\/button>\r\n      <button class=\"btn btn-sky\" onclick=\"saveNewIdea()\">Add idea<\/button>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- ============================================================\r\n     MODAL: Social composer \u2014 chat + 3 channel preview cards (v2 redesign)\r\n     ============================================================ -->\r\n<div class=\"modal\" id=\"modal-sm-composer\">\r\n  <div class=\"modal-box modal-xl modal-fill sm-modal-box\">\r\n\r\n    <!-- HEADER -->\r\n    <div class=\"sm-hdr\">\r\n      <div class=\"sm-hdr-l\">\r\n        <div class=\"sm-hdr-titles\">\r\n          <div class=\"modal-title\" id=\"sm-composer-title\">New social post<\/div>\r\n          <div class=\"modal-sub\">Brief Claude on the left. Edit the channel-tuned drafts on the right.<\/div>\r\n        <\/div>\r\n        <div class=\"sm-channels-inline\" id=\"sm-channel-toggles\"><\/div>\r\n      <\/div>\r\n      <div class=\"sm-hdr-r\">\r\n        <div class=\"sm-theme-pill-wrap\">\r\n          <button type=\"button\" class=\"sm-theme-pill\" id=\"sm-theme-pill\" onclick=\"smToggleThemeMenu(event)\">\r\n            <span class=\"sm-theme-pill-dot\" id=\"sm-theme-pill-dot\"><\/span>\r\n            <span class=\"sm-theme-pill-label\" id=\"sm-theme-pill-label\">Off-theme<\/span>\r\n            <span class=\"sm-theme-pill-caret\">\u25be<\/span>\r\n          <\/button>\r\n          <div class=\"sm-theme-menu\" id=\"sm-theme-menu\" role=\"menu\"><\/div>\r\n        <\/div>\r\n        <button class=\"modal-close-x sm-close-x\" onclick=\"smCloseComposer()\" aria-label=\"Close\">\u2715<\/button>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- BODY -->\r\n    <div class=\"sm-body\">\r\n\r\n      <!-- LEFT: chat -->\r\n      <div class=\"sm-chat\">\r\n        <div class=\"sm-chat-label\">Brief Claude<\/div>\r\n        <div class=\"sm-chat-thread\" id=\"sm-chat-thread\">\r\n          <div class=\"sm-chat-empty\">Brief Claude on what to post. Mention the topic, angle, and any details that matter.<\/div>\r\n        <\/div>\r\n        <div class=\"sm-composer-wrap\">\r\n          <textarea class=\"sm-composer-input\" id=\"sm-chat-input\" rows=\"2\" placeholder=\"e.g. New instruction in Sheffield \u2014 Tesco-anchored neighbourhood scheme, 15-year unbroken lease, asking 6.4%. Lead with the covenant.\"><\/textarea>\r\n          <div class=\"sm-composer-row\">\r\n            <button class=\"sm-composer-send\" id=\"sm-chat-btn\" onclick=\"smChatSend()\">Send \u2192<\/button>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <!-- RIGHT: channel cards -->\r\n      <div class=\"sm-cards\" id=\"sm-cards-row\"><\/div>\r\n\r\n    <\/div>\r\n\r\n    <!-- FOOTER -->\r\n    <div class=\"sm-ftr\">\r\n      <div class=\"sm-ftr-schedule\">\r\n        <span class=\"sm-ftr-label\">Post on<\/span>\r\n        <input type=\"datetime-local\" class=\"sm-ftr-input\" id=\"sm-schedule-for\">\r\n        <span class=\"sm-ftr-link\" id=\"sm-linked-chip\" style=\"display:none\">\r\n          Linked to <a href=\"#\" id=\"sm-linked-chip-anchor\" onclick=\"smOpenLinkedItem(event)\">\u2014<\/a>\r\n          <button type=\"button\" class=\"sm-linked-unlink\" onclick=\"smUnlinkScheduleItem()\" title=\"Unlink\">\u00d7<\/button>\r\n        <\/span>\r\n        <span class=\"sm-link-picker-wrap\" id=\"sm-link-picker-wrap\">\r\n          <button type=\"button\" class=\"sm-link-add\" id=\"sm-link-add-btn\" onclick=\"smToggleLinkPicker(event)\">+ Link to calendar item<\/button>\r\n          <div class=\"sm-link-menu\" id=\"sm-link-menu\" role=\"menu\"><\/div>\r\n        <\/span>\r\n      <\/div>\r\n      <div class=\"sm-ftr-spacer\"><\/div>\r\n      <span class=\"sm-ftr-status\" id=\"sm-status-text\">Saved<\/span>\r\n      <button class=\"sm-btn sm-btn-link\" onclick=\"smCloseComposer()\">Close<\/button>\r\n      <button class=\"sm-btn sm-btn-secondary\" onclick=\"smSaveAll()\">\ud83d\udcbe Save draft<\/button>\r\n      <button class=\"sm-btn sm-btn-primary\" onclick=\"smScheduleAll()\">\ud83d\udcc5 Save & schedule<\/button>\r\n    <\/div>\r\n\r\n    <!-- Hidden state \u2014 keeps the existing select-driven schedule-link logic working -->\r\n    <select id=\"sm-schedule-link\" style=\"display:none\">\r\n      <option value=\"\">\u2014 None \u2014<\/option>\r\n    <\/select>\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- ============================================================\r\n     MODAL: Social image picker \u2014 Upload \/ Library \/ [Stock soon] \/ [Scrape soon]\r\n     ============================================================ -->\r\n<div class=\"modal\" id=\"modal-sm-picker\">\r\n  <div class=\"modal-box modal-xl\">\r\n\r\n    <div class=\"draft-hdr\">\r\n      <div>\r\n        <div class=\"modal-title\">Choose an image<\/div>\r\n        <div class=\"modal-sub\">Upload, pick from your library, search stock images, or use scraped property photos.<\/div>\r\n      <\/div>\r\n      <button class=\"modal-close-x\" onclick=\"closeModal('sm-picker')\" aria-label=\"Close\">\u00d7<\/button>\r\n    <\/div>\r\n\r\n    <div class=\"sm-picker-tabs\">\r\n      <button class=\"sm-picker-tab active\" data-tab=\"upload\" onclick=\"smSetPickerTab('upload')\">Upload<\/button>\r\n      <button class=\"sm-picker-tab\" data-tab=\"library\" onclick=\"smSetPickerTab('library')\">Library<\/button>\r\n      <button class=\"sm-picker-tab\" data-tab=\"stock\" onclick=\"smSetPickerTab('stock')\">Stock<\/button>\r\n      <button class=\"sm-picker-tab\" data-tab=\"scrape\" onclick=\"smSetPickerTab('scrape')\">Property<\/button>\r\n    <\/div>\r\n\r\n    <!-- Upload panel -->\r\n    <div class=\"sm-picker-panel active\" data-tab=\"upload\">\r\n      <div class=\"sm-picker-upload-zone\" id=\"sm-picker-upload-zone\">\r\n        <div class=\"sm-picker-upload-icon\">\ud83d\udce4<\/div>\r\n        <div class=\"sm-picker-upload-text\">Drag and drop an image, or click to pick one<\/div>\r\n        <div class=\"sm-picker-upload-hint\">PNG, JPG, WebP or GIF \u00b7 up to 50 MB<\/div>\r\n        <input type=\"file\" id=\"sm-picker-file-input\" accept=\"image\/*\" style=\"display:none\">\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Library panel -->\r\n    <div class=\"sm-picker-panel\" data-tab=\"library\">\r\n      <div class=\"sm-picker-library-controls\">\r\n        <input class=\"form-input sm-picker-search\" id=\"sm-picker-search\" placeholder=\"Search by caption or tag\u2026\" type=\"text\">\r\n      <\/div>\r\n      <div class=\"sm-picker-grid\" id=\"sm-picker-grid\"><\/div>\r\n    <\/div>\r\n\r\n    <!-- Stock panel -->\r\n    <div class=\"sm-picker-panel\" data-tab=\"stock\">\r\n      <div class=\"sm-picker-library-controls\">\r\n        <input class=\"form-input sm-picker-search\" id=\"sm-stock-search-input\"\r\n               placeholder=\"Search Unsplash for stock images\u2026\" type=\"text\"\r\n               onkeydown=\"if(event.key==='Enter') smRunStockSearch()\">\r\n        <button class=\"btn btn-primary\" onclick=\"smRunStockSearch()\">Search<\/button>\r\n      <\/div>\r\n      <div class=\"sm-picker-stock-attribution\">Photos courtesy of <a href=\"https:\/\/unsplash.com\" target=\"_blank\" rel=\"noopener\">Unsplash<\/a>. Click a photo to download it into your library and attach it to this post.<\/div>\r\n      <div class=\"sm-picker-grid\" id=\"sm-stock-grid\">\r\n        <div class=\"sm-picker-empty\">Enter a search above. Try \"modern office building\", \"city skyline UK\", or \"investment commercial property\".<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Scrape panel -->\r\n    <div class=\"sm-picker-panel\" data-tab=\"scrape\">\r\n      <div class=\"sm-picker-scrape-hint\" id=\"sm-scrape-hint\">Property images scraped from singervielle.com listings will appear here when a property is attached to this post.<\/div>\r\n      <div class=\"sm-picker-grid\" id=\"sm-scrape-grid\"><\/div>\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- ============================================================\r\n     MODAL: Edit plan row (weekly content planner)\r\n     ============================================================ -->\r\n<div class=\"modal\" id=\"modal-sm-planner-edit\">\r\n  <div class=\"modal-box\">\r\n    <div class=\"draft-hdr\">\r\n      <div>\r\n        <div class=\"modal-title\">Edit plan row<\/div>\r\n        <div class=\"modal-sub\">Changes apply when you click Save. Approve to turn this into channel-tuned drafts.<\/div>\r\n      <\/div>\r\n      <button class=\"modal-close-x\" onclick=\"smClosePlannerEditModal()\" aria-label=\"Close\">\u00d7<\/button>\r\n    <\/div>\r\n    <div id=\"sm-planner-edit-body\"><!-- populated by smOpenPlannerEditModal --><\/div>\r\n    <div class=\"modal-actions\">\r\n      <button class=\"btn btn-cancel\" onclick=\"smClosePlannerEditModal()\">Cancel<\/button>\r\n      <button class=\"btn btn-sky\" onclick=\"smSavePlannerEdit()\">Save<\/button>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<div class=\"toast\" id=\"toast\"><\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":18,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"class_list":["post-49510","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Marketing - Singer Vielle<\/title>\n<meta name=\"description\" content=\"Marketing\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/singervielle.com\/zh\/svmarketing\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Marketing - Singer Vielle\" \/>\n<meta property=\"og:description\" content=\"Marketing\" \/>\n<meta property=\"og:url\" content=\"https:\/\/singervielle.com\/zh\/svmarketing\/\" \/>\n<meta property=\"og:site_name\" content=\"Singer Vielle\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-21T06:04:37+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@SingerVielle\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/singervielle.com\\\/svmarketing\\\/\",\"url\":\"https:\\\/\\\/singervielle.com\\\/svmarketing\\\/\",\"name\":\"Marketing - Singer Vielle\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/singervielle.com\\\/#website\"},\"datePublished\":\"2026-05-21T06:01:31+00:00\",\"dateModified\":\"2026-05-21T06:04:37+00:00\",\"description\":\"Marketing\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/singervielle.com\\\/svmarketing\\\/#breadcrumb\"},\"inLanguage\":\"zh-CN\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/singervielle.com\\\/svmarketing\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/singervielle.com\\\/svmarketing\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/singervielle.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Marketing\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/singervielle.com\\\/#website\",\"url\":\"https:\\\/\\\/singervielle.com\\\/\",\"name\":\"Singer Vielle Commercial Property Sales\",\"description\":\"UK Commercial Property Investment\",\"publisher\":{\"@id\":\"https:\\\/\\\/singervielle.com\\\/#organization\"},\"alternateName\":\"SingerVielle\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/singervielle.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"zh-CN\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/singervielle.com\\\/#organization\",\"name\":\"Singer Vielle Commercial Property Sales\",\"url\":\"https:\\\/\\\/singervielle.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-CN\",\"@id\":\"https:\\\/\\\/singervielle.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/singervielle.com\\\/wp-content\\\/uploads\\\/SINGER-logo-box.svg\",\"contentUrl\":\"https:\\\/\\\/singervielle.com\\\/wp-content\\\/uploads\\\/SINGER-logo-box.svg\",\"width\":104,\"height\":66,\"caption\":\"Singer Vielle Commercial Property Sales\"},\"image\":{\"@id\":\"https:\\\/\\\/singervielle.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/SingerVielle\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/singer-vielle\\\/\",\"https:\\\/\\\/www.youtube.com\\\/user\\\/SingerViellesales\\\/featured\",\"https:\\\/\\\/www.instagram.com\\\/singerviellesales\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u5e02\u573a\u8425\u9500 - Singer Vielle","description":"\u8425\u9500","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/singervielle.com\/zh\/svmarketing\/","og_locale":"zh_CN","og_type":"article","og_title":"Marketing - Singer Vielle","og_description":"Marketing","og_url":"https:\/\/singervielle.com\/zh\/svmarketing\/","og_site_name":"Singer Vielle","article_modified_time":"2026-05-21T06:04:37+00:00","twitter_card":"summary_large_image","twitter_site":"@SingerVielle","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/singervielle.com\/svmarketing\/","url":"https:\/\/singervielle.com\/svmarketing\/","name":"\u5e02\u573a\u8425\u9500 - Singer Vielle","isPartOf":{"@id":"https:\/\/singervielle.com\/#website"},"datePublished":"2026-05-21T06:01:31+00:00","dateModified":"2026-05-21T06:04:37+00:00","description":"\u8425\u9500","breadcrumb":{"@id":"https:\/\/singervielle.com\/svmarketing\/#breadcrumb"},"inLanguage":"zh-CN","potentialAction":[{"@type":"ReadAction","target":["https:\/\/singervielle.com\/svmarketing\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/singervielle.com\/svmarketing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/singervielle.com\/"},{"@type":"ListItem","position":2,"name":"Marketing"}]},{"@type":"WebSite","@id":"https:\/\/singervielle.com\/#website","url":"https:\/\/singervielle.com\/","name":"Singer Vielle\u5546\u4e1a\u5730\u4ea7\u9500\u552e","description":"\u82f1\u56fd\u5546\u4e1a\u5730\u4ea7\u6295\u8d44","publisher":{"@id":"https:\/\/singervielle.com\/#organization"},"alternateName":"SingerVielle","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/singervielle.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"zh-CN"},{"@type":"Organization","@id":"https:\/\/singervielle.com\/#organization","name":"Singer Vielle\u5546\u4e1a\u5730\u4ea7\u9500\u552e","url":"https:\/\/singervielle.com\/","logo":{"@type":"ImageObject","inLanguage":"zh-CN","@id":"https:\/\/singervielle.com\/#\/schema\/logo\/image\/","url":"https:\/\/singervielle.com\/wp-content\/uploads\/SINGER-logo-box.svg","contentUrl":"https:\/\/singervielle.com\/wp-content\/uploads\/SINGER-logo-box.svg","width":104,"height":66,"caption":"Singer Vielle Commercial Property Sales"},"image":{"@id":"https:\/\/singervielle.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/SingerVielle","https:\/\/www.linkedin.com\/company\/singer-vielle\/","https:\/\/www.youtube.com\/user\/SingerViellesales\/featured","https:\/\/www.instagram.com\/singerviellesales\/"]}]}},"_links":{"self":[{"href":"https:\/\/singervielle.com\/zh\/wp-json\/wp\/v2\/pages\/49510","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/singervielle.com\/zh\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/singervielle.com\/zh\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/singervielle.com\/zh\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/singervielle.com\/zh\/wp-json\/wp\/v2\/comments?post=49510"}],"version-history":[{"count":2,"href":"https:\/\/singervielle.com\/zh\/wp-json\/wp\/v2\/pages\/49510\/revisions"}],"predecessor-version":[{"id":49512,"href":"https:\/\/singervielle.com\/zh\/wp-json\/wp\/v2\/pages\/49510\/revisions\/49512"}],"wp:attachment":[{"href":"https:\/\/singervielle.com\/zh\/wp-json\/wp\/v2\/media?parent=49510"}],"curies":[{"name":"\u53ef\u6e7f\u6027\u7c89\u5242","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}