{"status":"success","html":"<!doctype html>\n<html>\n<head>\n<script nonce=\"iXr6bcYrPTzaLDbr96BwQA\">window['ppConfig'] = {productName: '26981ed0d57bbad37e728ff58134270c', deleteIsEnforced:  false , sealIsEnforced:  false , heartbeatRate:  0.5 , periodicReportingRateMillis:  60000.0 , disableAllReporting:  false };(function(){'use strict';function k(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}}function l(a){var b=typeof Symbol!=\"undefined\"&&Symbol.iterator&&a[Symbol.iterator];if(b)return b.call(a);if(typeof a.length==\"number\")return{next:k(a)};throw Error(String(a)+\" is not an iterable or ArrayLike\");}var m=typeof Object.defineProperties==\"function\"?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};\nfunction n(a){a=[\"object\"==typeof globalThis&&globalThis,a,\"object\"==typeof window&&window,\"object\"==typeof self&&self,\"object\"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error(\"Cannot find global object\");}var p=n(this);function q(a,b){if(b)a:{var c=p;a=a.split(\".\");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&b!=null&&m(c,a,{configurable:!0,writable:!0,value:b})}}\nq(\"Object.is\",function(a){return a?a:function(b,c){return b===c?b!==0||1\/b===1\/c:b!==b&&c!==c}});q(\"Array.prototype.includes\",function(a){return a?a:function(b,c){var d=this;d instanceof String&&(d=String(d));var e=d.length;c=c||0;for(c<0&&(c=Math.max(c+e,0));c<e;c++){var f=d[c];if(f===b||Object.is(f,b))return!0}return!1}});\nq(\"String.prototype.includes\",function(a){return a?a:function(b,c){if(this==null)throw new TypeError(\"The 'this' value for String.prototype.includes must not be null or undefined\");if(b instanceof RegExp)throw new TypeError(\"First argument to String.prototype.includes must not be a regular expression\");return this.indexOf(b,c||0)!==-1}});function r(a,b,c){a(\"https:\/\/csp.withgoogle.com\/csp\/proto\/\"+encodeURIComponent(b),JSON.stringify(c))}function t(){var a;if((a=window.ppConfig)==null?0:a.disableAllReporting)return function(){};var b,c,d,e;return(e=(b=window)==null?void 0:(c=b.navigator)==null?void 0:(d=c.sendBeacon)==null?void 0:d.bind(navigator))!=null?e:u}function u(a,b){var c=new XMLHttpRequest;c.open(\"POST\",a);c.send(b)}\nfunction v(){var a=(w=Object.prototype)==null?void 0:w.__lookupGetter__(\"__proto__\"),b=x,c=y;return function(){var d=a.call(this),e,f,g,h;r(c,b,{type:\"ACCESS_GET\",origin:(f=window.location.origin)!=null?f:\"unknown\",report:{className:(g=d==null?void 0:(e=d.constructor)==null?void 0:e.name)!=null?g:\"unknown\",stackTrace:(h=Error().stack)!=null?h:\"unknown\"}});return d}}\nfunction z(){var a=(A=Object.prototype)==null?void 0:A.__lookupSetter__(\"__proto__\"),b=x,c=y;return function(d){d=a.call(this,d);var e,f,g,h;r(c,b,{type:\"ACCESS_SET\",origin:(f=window.location.origin)!=null?f:\"unknown\",report:{className:(g=d==null?void 0:(e=d.constructor)==null?void 0:e.name)!=null?g:\"unknown\",stackTrace:(h=Error().stack)!=null?h:\"unknown\"}});return d}}function B(a,b){C(a.productName,b);setInterval(function(){C(a.productName,b)},a.periodicReportingRateMillis)}\nvar D=\"constructor __defineGetter__ __defineSetter__ hasOwnProperty __lookupGetter__ __lookupSetter__ isPrototypeOf propertyIsEnumerable toString valueOf __proto__ toLocaleString x_ngfn_x\".split(\" \"),E=D.concat,F=navigator.userAgent.match(\/Firefox\\\/([0-9]+)\\.\/),G=(!F||F.length<2?0:Number(F[1])<75)?[\"toSource\"]:[],H;if(G instanceof Array)H=G;else{for(var I=l(G),J,K=[];!(J=I.next()).done;)K.push(J.value);H=K}var L=E.call(D,H),M=[];\nfunction C(a,b){for(var c=[],d=l(Object.getOwnPropertyNames(Object.prototype)),e=d.next();!e.done;e=d.next())e=e.value,L.includes(e)||M.includes(e)||c.push(e);e=Object.prototype;d=[];for(var f=0;f<c.length;f++){var g=c[f];d[f]={name:g,descriptor:Object.getOwnPropertyDescriptor(Object.prototype,g),type:typeof e[g]}}if(d.length!==0){c=l(d);for(e=c.next();!e.done;e=c.next())M.push(e.value.name);var h;r(b,a,{type:\"SEAL\",origin:(h=window.location.origin)!=null?h:\"unknown\",report:{blockers:d}})}};var N=Math.random(),O=t(),P=window.ppConfig;P&&(P.disableAllReporting||P.deleteIsEnforced&&P.sealIsEnforced||N<P.heartbeatRate&&r(O,P.productName,{origin:window.location.origin,type:\"HEARTBEAT\"}));var y=t(),Q=window.ppConfig;if(Q)if(Q.deleteIsEnforced)delete Object.prototype.__proto__;else if(!Q.disableAllReporting){var x=Q.productName;try{var w,A;Object.defineProperty(Object.prototype,\"__proto__\",{enumerable:!1,get:v(),set:z()})}catch(a){}}\n(function(){var a=t(),b=window.ppConfig;b&&(b.sealIsEnforced?Object.seal(Object.prototype):b.disableAllReporting||(document.readyState!==\"loading\"?B(b,a):document.addEventListener(\"DOMContentLoaded\",function(){B(b,a)})))})();}).call(this);\n<\/script><meta name=\"chromevox\" content-script=\"no\">\n<title>上傳數字表<\/title>\n<meta name=\"viewport\"content=\"width=device-width, initial-scale=1\" \/>\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/icon?family=Material+Icons\" nonce=\"G-Hohpo0BtenlG-8KUAarQ\"><link rel=\"stylesheet\" href=\"\/static\/macros\/client\/css\/2208734863-mae_html_css_ltr.css\">\n<script type=\"text\/javascript\" src=\"\/static\/macros\/client\/js\/722357999-warden_bin_i18n_warden__zh_tw.js\"><\/script>\n<\/head>\n<body>\n<table id=\"warning-bar-table\" class=\"full_size\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div id=\"warning\" class=\"warning-bar\"><\/div><\/td><\/tr><tr><td style=\"height: 100%\"><iframe id=\"sandboxFrame\" title=\"上傳數字表\" allow=\"accelerometer *; autoplay *; clipboard-read *; clipboard-write *; encrypted-media *; fullscreen *; geolocation *; gyroscope *; local-network-access *; magnetometer *; midi *; payment *; picture-in-picture *; screen-wake-lock *; sync-xhr *; web-share *\" sandbox=\"allow-downloads allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-top-navigation-by-user-activation allow-storage-access-by-user-activation\">\n<\/iframe>\n<\/td><\/tr><\/table><script nonce=\"iXr6bcYrPTzaLDbr96BwQA\">\n(function() {\nvar el = document.getElementById('sandboxFrame');\nel.onload = function() {\ngoog.script.init(\"\\x7b\\x22functionNames\\x22:\\x5b\\x22initAccountsSheet\\x22,\\x22getAccounts\\x22,\\x22leaderLogin\\x22,\\x22addAccount\\x22,\\x22deleteAccount\\x22,\\x22changePassword\\x22,\\x22syncAccountGroupNames\\x22,\\x22getAllGroupListFull\\x22,\\x22initGroupSheet\\x22,\\x22getGroupsList\\x22,\\x22updateGroupName\\x22,\\x22updateGroupStatus\\x22,\\x22deleteGroupItem\\x22,\\x22addNewGroup\\x22,\\x22formatGroupCodeColumn\\x22,\\x22initItemsSheet\\x22,\\x22getAllActiveItems\\x22,\\x22initChantingSheet\\x22,\\x22verifySheetStructure\\x22,\\x22resetRitualSheet\\x22,\\x22fixRitualHeader\\x22,\\x22fixAll\\x22,\\x22addMember\\x22,\\x22isMemberNoDuplicate\\x22,\\x22generateUploadId\\x22,\\x22fixAllUploadIds\\x22,\\x22autoFillMemberNameForUpload\\x22,\\x22autoFillDate\\x22,\\x22autoFillMonth\\x22,\\x22recalcMemberStats\\x22,\\x22updateAllStats\\x22,\\x22refreshSummaryStats\\x22,\\x22debugSummarySheet\\x22,\\x22updateMemberStats\\x22,\\x22checkDeleteRow\\x22,\\x22setRitualTypeDropdown\\x22,\\x22updateRitualRemark\\x22,\\x22updateRitualRecord\\x22,\\x22generateRitualId\\x22,\\x22autoFillSendTime\\x22,\\x22autoFillMemberNameForRitual\\x22,\\x22getMemberListByGroup\\x22,\\x22getFullMemberListByGroup\\x22,\\x22getMemberUploadRecordsForLeader\\x22,\\x22updateMemberUploadRecord\\x22,\\x22getMemberInfoForLeaderUpload\\x22,\\x22safeDate\\x22,\\x22getRemarksByGroup\\x22,\\x22getChantingRemarks\\x22,\\x22isMemberRitualExists\\x22,\\x22getMemberRitualRecords\\x22,\\x22getRitualRecordById\\x22,\\x22onEdit\\x22,\\x22quickAddMember\\x22,\\x22saveQuickMember\\x22,\\x22chooseGroupStats\\x22,\\x22chooseGroupMonthStats\\x22,\\x22quickBackup\\x22,\\x22safeFixAll\\x22,\\x22safeRebuildAll\\x22,\\x22showAllGroupsReport\\x22,\\x22maskNameForGS\\x22,\\x22generateAllGroupsTableHTML\\x22,\\x22debugMemberStructure\\x22,\\x22debugUploadSheet\\x22,\\x22showLeaderSummary\\x22,\\x22showGroupDetailReport\\x22,\\x22generateGroupDetailUploadHTML\\x22,\\x22getGroupDetailUploadData\\x22,\\x22generateGroupDetailTableHTML\\x22,\\x22showGroupDetailReportWithGroup\\x22,\\x22getGroupDetailReportWithStats\\x22,\\x22getAllGroupsSummary\\x22,\\x22generateReportTableHTML\\x22,\\x22generateGroupDetailHTMLV3\\x22,\\x22getGroupDetailReportData\\x22,\\x22rebuildAll\\x22,\\x22submitMemberForm\\x22,\\x22showUploadForm\\x22,\\x22getMemberInfo\\x22,\\x22getUploadCount\\x22,\\x22saveMemberUploadsData\\x22,\\x22getMemberIdByNo\\x22,\\x22submitUploadData\\x22,\\x22getUploadRecordsByMember\\x22,\\x22clearTestUploadData\\x22,\\x22showAllUploadData\\x22,\\x22clearUploadRow2\\x22,\\x22clearUploadRow28\\x22,\\x22clearUploadCellA302\\x22,\\x22viewRow28\\x22,\\x22deleteRowByNumber\\x22,\\x22setCellValue\\x22,\\x22doGet\\x22,\\x22doPost\\x22,\\x22getGroupOrderList\\x22,\\x22getAllItemNames\\x22,\\x22showDeleteChantingDialog\\x22,\\x22deleteChantingRecords\\x22,\\x22showDeleteByItemDialog\\x22,\\x22getAllItemsWithIdAndName\\x22,\\x22showDeleteByMemberDialog\\x22,\\x22deleteMemberChantingRecords\\x22,\\x22getGroupStatsReport\\x22,\\x22getMonthColumn\\x22,\\x22getChantingItems\\x22,\\x22onOpen\\x22,\\x22quickFix10\\x22,\\x22quickFix20\\x22,\\x22quickFix30\\x22,\\x22quickFix50\\x22,\\x22quickFix100\\x22,\\x22quickFixByRange\\x22,\\x22deleteSelectedRowsAndUpdate\\x22,\\x22quickFixWithRange\\x22,\\x22addMemberByMode\\x22,\\x22checkMemberNoExists\\x22,\\x22getMemberDetail\\x22,\\x22updateMember\\x22,\\x22clearMemberCache\\x22,\\x22getMemberInfoByNo\\x22,\\x22getMemberInfoForForm\\x22,\\x22addUserMember\\x22,\\x22addLeaderMember\\x22,\\x22getNewMembersByGroup\\x22,\\x22getAllNewMembers\\x22,\\x22sendUploadRemarkNotification\\x22,\\x22sendChantingRemarkNotification\\x22,\\x22handleChantingRemark\\x22,\\x22submitUserUpload\\x22,\\x22afterUploadUpdateStats\\x22,\\x22updateMemberUploadRecordWithRemark\\x22,\\x22registerMember\\x22,\\x22submitLeaderUpload\\x22,\\x22submitUploadFormData\\x22,\\x22getMemberByNoForChanting\\x22,\\x22getMemberByNoForChantingCN\\x22,\\x22addChantingRecord\\x22,\\x22checkMemberStatus\\x22,\\x22getChantingYearReport\\x22,\\x22getAllItemsWithStatus\\x22,\\x22generateItemId\\x22,\\x22getItemIdByName\\x22,\\x22getItemInfoByName\\x22,\\x22addNewItem\\x22,\\x22updateItem\\x22,\\x22updateItemStatus\\x22,\\x22deleteItem\\x22,\\x22updateItemOrder\\x22,\\x22updateItemOrderLeader\\x22,\\x22getMemberChantingHistory\\x22,\\x22getMemberChantingDailyHistory\\x22,\\x22loadModifyChantingRecords\\x22,\\x22saveChantingRecord\\x22,\\x22updateChantingRecord\\x22,\\x22deleteChantingRecord\\x22,\\x22getChantingDetailStats\\x22,\\x22getAllMembersWithGroup\\x22,\\x22showYearlySummary\\x22,\\x22generateTest2026\\x22,\\x22generateTest2027\\x22,\\x22generateTest2028\\x22,\\x22generateTest2029\\x22,\\x22generateTest2030\\x22,\\x22generateTest2031\\x22,\\x22clearTestRecordsForYear\\x22,\\x22generateTestChantingRecords\\x22,\\x22getDaysInMonth\\x22,\\x22clearTestRecords\\x22,\\x22quickTestRecords\\x22,\\x22batchImportCustomMembers\\x22,\\x22batchImport300Members\\x22,\\x22calculateAndWriteMonthlyTotal\\x22,\\x22calculateAndWriteGrandTotal\\x22,\\x22recalculateAllTotals\\x22,\\x22flushDataToSheet\\x22,\\x22createUploadSheet\\x22,\\x22getCurrentBatch\\x22,\\x22isBatchOpen\\x22,\\x22addRitualRecord\\x22,\\x22testBatch\\x22,\\x22testAdd\\x22,\\x22generateMassUploadRecords\\x22,\\x22quickGenerate500\\x22,\\x22quickGenerate\\x22,\\x22clearMemberRowsFrom45\\x22,\\x22testSendEmail\\x22,\\x22authorizeMailApp\\x22,\\x22copyJ43ToJ41J42\\x22,\\x22emergencyStop\\x22,\\x22setupBalancedSync\\x22,\\x22incrementalSync\\x22,\\x22autoFullSync\\x22,\\x22updateSingleMemberFast\\x22,\\x22checkSyncStatus\\x22,\\x22checkEmailQuota\\x22\\x5d,\\x22sandboxMode\\x22:\\x22IFRAME_SANDBOX\\x22,\\x22callbackTimeout\\x22:390000,\\x22deploymentId\\x22:\\x22AKfycbxhfVsc-Rh-5ZvUlHtJXd-llKpQ9DYRJl8Sk0jDRwTSxoYop2mwRDlRa_xtvfyLs45m\\x22,\\x22eei\\x22:\\x22\\x22,\\x22sandboxHost\\x22:\\x22https:\\\/\\\/n-bcxis3zudmmjhvr47aoecrjjqeuwxchjnykofga-0lu-script.googleusercontent.com\\x22,\\x22clientSideProperties\\x22:\\x7b\\x22google.script.sandbox.mode\\x22:\\x22IFRAME_SANDBOX\\x22,\\x22google.script.use_fetch_for_post_form\\x22:false,\\x22google.script.host.origin\\x22:\\x22https:\\\/\\\/docs.google.com\\x22\\x7d,\\x22actionPrefix\\x22:\\x22\\\/macros\\\/s\\\/AKfycbxhfVsc-Rh-5ZvUlHtJXd-llKpQ9DYRJl8Sk0jDRwTSxoYop2mwRDlRa_xtvfyLs45m\\x22,\\x22userHtml\\x22:\\x22\\x3c!DOCTYPE html\\x3e\\\\n\\x3chtml lang\\x3d\\\\\\x22zh-Hant\\\\\\x22\\x3e\\\\n\\x3chead\\x3e\\\\n    \\x3cmeta charset\\x3d\\\\\\x22UTF-8\\\\\\x22\\x3e\\\\n    \\x3cmeta name\\x3d\\\\\\x22viewport\\\\\\x22 content\\x3d\\\\\\x22width\\x3ddevice-width, initial-scale\\x3d1.0, maximum-scale\\x3d2.0, user-scalable\\x3dyes\\\\\\x22\\x3e\\\\n    \\x3ctitle\\x3e藍綠橘 · 月曆誦經\\x3c\\\\\\\/title\\x3e\\\\n    \\x3cstyle\\x3e\\\\n        * \\x7b margin: 0; padding: 0; box-sizing: border-box; font-family: system-ui, \\x27Segoe UI\\x27, sans-serif; \\x7d\\\\n        body \\x7b background: linear-gradient(145deg, #e9dbc8 0%, #d9c5ae 100%); min-height: 100vh; padding: 12px; display: flex; justify-content: center; align-items: flex-start; \\x7d\\\\n        .card \\x7b max-width: 800px; width: 100%; background: white; border-radius: 32px; box-shadow: 0 25px 45px -12px rgba(0,0,0,0.3); overflow: hidden; \\x7d\\\\n        .hero \\x7b background: #d68c45; padding: 14px 16px; color: white; text-align: center; \\x7d\\\\n        .hero-top \\x7b display: flex; justify-content: space-between; align-items: center; gap: 8px; \\x7d\\\\n        .hero h1 \\x7b font-size: 20px; font-weight: 800; flex: 1; text-align: center; line-height: 1.2; \\x7d\\\\n        .hero p \\x7b margin-top: 2px; opacity: 0.9; font-size: 13px; \\x7d\\\\n        .lang-switch \\x7b background: rgba(255,255,255,0.15); border: 1.5px solid rgba(255,255,255,0.3); color: white; width: 40px; height: 40px; padding: 0; border-radius: 8px; font-size: 14px; font-weight: 600; cursor: pointer; flex-shrink: 0; display: flex; align-items: center; justify-content: center; transition: 0.2s; \\x7d\\\\n        .lang-switch:hover \\x7b background: rgba(255,255,255,0.25); border-color: rgba(255,255,255,0.5); transform: scale(1.03); \\x7d\\\\n        .rule \\x7b background: #fef4e8; margin: 10px 12px 0 12px; padding: 10px 12px; border-radius: 20px; border-left: 5px solid #f97316; \\x7d\\\\n        .rule .title \\x7b font-weight: 700; font-size: 13px; color: #7b3f00; margin-bottom: 2px; \\x7d\\\\n        .rule li \\x7b margin: 2px 0; font-size: 12px; color: #4a2e1a; line-height: 1.5; display: flex; gap: 4px; margin-left: 10px; \\x7d\\\\n        .form-panel \\x7b padding: 12px 14px; \\x7d\\\\n        .input-group \\x7b margin-bottom: 8px; \\x7d\\\\n        label \\x7b display: block; font-weight: 700; color: #2c241a; font-size: 13px; margin-bottom: 3px; \\x7d\\\\n        input, select \\x7b\\\\n            width: 100%;\\\\n            padding: 10px 14px;\\\\n            font-size: 16px !important;\\\\n            border: 1.8px solid #e9dfd3;\\\\n            border-radius: 40px;\\\\n            background: #fffdf9;\\\\n            outline: none;\\\\n            transition: 0.2s;\\\\n            -webkit-appearance: none;\\\\n            appearance: none;\\\\n            touch-action: manipulation;\\\\n        \\x7d\\\\n        input:focus, select:focus \\x7b border-color: #d68c45; \\x7d\\\\n        input:disabled, select:disabled, button:disabled \\x7b background: #f0f0f0 !important; color: #aaa !important; border-color: #e0d5c8 !important; cursor: not-allowed !important; \\x7d\\\\n        button \\x7b width: 100%; padding: 12px; background: #d68c45; border: none; border-radius: 40px; font-weight: 800; font-size: 15px; color: white; cursor: pointer; margin-top: 10px; transition: 0.2s; \\x7d\\\\n        button:hover \\x7b background: #c47a35; \\x7d\\\\n        button.query-btn \\x7b background: #2c6e2c; margin-top: 0; width: 100%; \\x7d\\\\n        button.query-btn:hover \\x7b background: #1e5a1e; \\x7d\\\\n        button.small \\x7b width: auto; padding: 8px 16px; margin-top: 0; background: #8d6e63; font-size: 13px; \\x7d\\\\n        button.small:hover \\x7b background: #6d4c41; \\x7d\\\\n        .flex-row \\x7b display: flex; flex-direction: column; gap: 8px; \\x7d\\\\n        .flex-row .input-group \\x7b width: 100%; margin-bottom: 0; \\x7d\\\\n        .flex-row button \\x7b width: 100% !important; margin-top: 0; padding: 12px; font-size: 15px; \\x7d\\\\n        .info-card \\x7b background: #fef9e8; border-radius: 20px; padding: 10px 14px; margin: 12px 0; border-left: 5px solid #f97316; \\x7d\\\\n        .info-card div \\x7b margin: 3px 0; font-size: 13px; \\x7d\\\\n        .section-title \\x7b font-size: 16px; font-weight: 700; color: #5d3a1a; margin: 16px 0 8px 0; padding-bottom: 4px; border-bottom: 2px solid #f0cfa0; text-align: center; \\x7d\\\\n        .warning \\x7b background: #fff0e0; color: #b85c00; padding: 8px 14px; border-radius: 35px; text-align: center; margin-top: 10px; display: none; font-size: 13px; \\x7d\\\\n        footer \\x7b background: #faf3ea; text-align: center; padding: 10px; font-size: 12px; color: #8b7355; border-top: 1px solid #edd9bf; \\x7d\\\\n        .date-filter \\x7b display: flex; gap: 6px; margin: 8px 0 12px; align-items: center; justify-content: center; flex-wrap: nowrap; \\x7d\\\\n        .date-filter select \\x7b flex: 1; max-width: 120px; padding: 6px 10px; font-size: 13px; border-radius: 30px; border: 1.5px solid #e9dfd3; background: #fffdf9; \\x7d\\\\n        .date-filter button \\x7b flex: 0 0 auto; padding: 6px 14px; margin-top: 0; border-radius: 30px; border: none; background: #8d6e63; color: white; font-weight: 600; cursor: pointer; white-space: nowrap; font-size: 13px; \\x7d\\\\n        .date-filter button:hover \\x7b background: #6d4c41; \\x7d\\\\n\\\\n         \\\\n        .calendar-wrap \\x7b background: #fefaf5; border-radius: 20px; padding: 10px 8px; border: 1px solid #f0e0c8; box-shadow: 0 2px 6px rgba(0,0,0,0.05); overflow-x: auto; -webkit-overflow-scrolling: touch; \\x7d\\\\n        .calendar-grid \\x7b display: grid; grid-template-columns: repeat(7, 1fr); gap: 3px; min-width: 320px; \\x7d\\\\n        .cal-header \\x7b font-weight: 700; text-align: center; padding: 4px 0; color: #5d3a1a; font-size: 12px; background: #f5ede4; border-radius: 16px; \\x7d\\\\n\\\\n         \\\\n        .cal-day \\x7b\\\\n            background: white;\\\\n            border-radius: 12px;\\\\n            padding: 6px 2px;\\\\n            text-align: center;\\\\n            font-size: 13px;\\\\n            font-weight: 500;\\\\n            color: #2c241a;\\\\n            min-height: 82px;\\\\n            height: 82px;\\\\n            display: flex;\\\\n            flex-direction: column;\\\\n            align-items: center;\\\\n            justify-content: flex-start;\\\\n            border: 1.5px solid #e9dfd3;\\\\n            transition: 0.1s;\\\\n            cursor: default;\\\\n            touch-action: manipulation;\\\\n            width: 100%;\\\\n            overflow: hidden;\\\\n            position: relative;\\\\n        \\x7d\\\\n        .cal-day.has-record \\x7b\\\\n            background: #fef4e8;\\\\n            border-color: #d68c45;\\\\n            box-shadow: 0 0 0 2px #f0cfa0;\\\\n            cursor: pointer;\\\\n        \\x7d\\\\n        .cal-day .record-icons \\x7b\\\\n            display: flex;\\\\n            flex-wrap: wrap;\\\\n            justify-content: center;\\\\n            align-items: center;\\\\n            gap: 1px 2px;\\\\n            margin-top: 2px;\\\\n            pointer-events: none;\\\\n            overflow: hidden;\\\\n            width: 100%;\\\\n            max-height: 36px;\\\\n        \\x7d\\\\n        .cal-day .record-icons span \\x7b\\\\n            font-size: 12px;\\\\n            line-height: 1.2;\\\\n            white-space: nowrap;\\\\n            flex-shrink: 0;\\\\n        \\x7d\\\\n        .cal-day .record-icons .icon-more \\x7b\\\\n            font-size: 9px;\\\\n            color: #8d6e63;\\\\n            background: #f0e8df;\\\\n            border-radius: 10px;\\\\n            padding: 0 4px;\\\\n            line-height: 1.3;\\\\n        \\x7d\\\\n        .cal-day .record-count-badge \\x7b display: none !important; \\x7d\\\\n        .cal-day.empty \\x7b background: transparent; border: 1px solid transparent; min-height: 82px; height: 82px; cursor: default; \\x7d\\\\n        .cal-day.lunar-1 \\x7b border-color: #e74c3c !important; background: #fde8e8 !important; \\x7d\\\\n        .cal-day.lunar-1 .date-num \\x7b color: #c0392b !important; \\x7d\\\\n        .cal-day.lunar-15 \\x7b border-color: #3498db !important; background: #e8f4fd !important; \\x7d\\\\n        .cal-day.lunar-15 .date-num \\x7b color: #2980b9 !important; \\x7d\\\\n        .cal-day.today \\x7b border-color: #f39c12; box-shadow: 0 0 0 2px #f1c40f; \\x7d\\\\n\\\\n         \\\\n        .cal-day .record-badge \\x7b\\\\n            display: inline-block;\\\\n            background: #99764B;\\\\n            color: white;\\\\n            border-radius: 50%;\\\\n            width: 22px;\\\\n            height: 22px;\\\\n            font-size: 11px;\\\\n            font-weight: 700;\\\\n            line-height: 22px;\\\\n            text-align: center;\\\\n            pointer-events: none;\\\\n            margin-top: 3px;\\\\n            flex-shrink: 0;\\\\n        \\x7d\\\\n\\\\n         \\\\n        .cal-day.lunar-1 .record-badge \\x7b\\\\n            background: #c0392b !important;\\\\n            color: #ffffff !important;\\\\n        \\x7d\\\\n\\\\n         \\\\n        .cal-day.lunar-15 .record-badge \\x7b\\\\n            background: #2980b9 !important;\\\\n            color: #ffffff !important;\\\\n        \\x7d\\\\n\\\\n        .day-detail-modal \\x7b position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); display: flex; align-items: center; justify-content: center; z-index: 10000; padding: 16px; \\x7d\\\\n        .day-detail-modal .modal-card \\x7b background: white; border-radius: 32px; padding: 20px; width: 100%; max-width: 380px; max-height: 80vh; overflow-y: auto; box-shadow: 0 20px 35px -10px rgba(0,0,0,0.3); \\x7d\\\\n        .day-detail-modal .modal-card h3 \\x7b font-size: 18px; color: #5d3a1a; margin-bottom: 12px; border-bottom: 2px solid #f0cfa0; padding-bottom: 6px; \\x7d\\\\n        .day-detail-modal .record-item \\x7b background: #fef9e8; border-radius: 16px; padding: 10px 12px; margin-bottom: 8px; border-left: 4px solid #d68c45; \\x7d\\\\n        .day-detail-modal .record-item .item-row \\x7b display: flex; align-items: center; flex-wrap: wrap; gap: 6px; \\x7d\\\\n        .day-detail-modal .record-item .item-name \\x7b font-weight: 700; color: #3d2b1a; \\x7d\\\\n        .day-detail-modal .record-item .count \\x7b color: #b85c00; font-weight: 700; \\x7d\\\\n        .day-detail-modal .record-item .time-tag \\x7b font-size: 11px; color: #8d6e63; margin-left: auto; \\x7d\\\\n        .day-detail-modal .record-item .remark-text \\x7b font-size: 12px; color: #7b3f00; display: block; margin-top: 4px; padding-top: 2px; border-top: 1px dashed #f0e0c8; \\x7d\\\\n        .day-detail-modal .close-btn \\x7b background: #d68c45; border: none; border-radius: 40px; padding: 10px; width: 100%; font-weight: 700; color: white; font-size: 16px; margin-top: 10px; cursor: pointer; \\x7d\\\\n        .day-detail-modal .close-btn:hover \\x7b background: #c47a35; \\x7d\\\\n\\\\n        .table-wrapper \\x7b overflow-x: auto; -webkit-overflow-scrolling: touch; margin-bottom: 12px; border-radius: 16px; border: 1px solid #f0e0c8; background: white; box-shadow: 0 2px 6px rgba(0,0,0,0.05); \\x7d\\\\n        .stats-table \\x7b width: 100%; border-collapse: collapse; font-size: 13px; min-width: 520px; \\x7d\\\\n        .stats-table th \\x7b background: #A1887F; color: white; padding: 8px 4px; text-align: center; font-weight: 700; font-size: 12px; position: sticky; top: 0; z-index: 2; \\x7d\\\\n        .stats-table td \\x7b padding: 10px; text-align: center; border-bottom: 1px solid #f0e0c8; background: white; font-size: 13px; \\x7d\\\\n        .stats-table th:first-child, .stats-table td:first-child \\x7b text-align: left; font-weight: 600; background: #fefaf5; position: sticky; left: 0; z-index: 3; min-width: 70px; \\x7d\\\\n        .stats-table th:first-child \\x7b z-index: 4; background: #A1887F !important; \\x7d\\\\n        .stats-table td.amount-red \\x7b color: #d32f2f; font-weight: bold; \\x7d\\\\n        .stats-table tr:last-child td \\x7b border-bottom: none; background: #f8f2ea; font-weight: bold; \\x7d\\\\n        .stats-table tr:last-child td:first-child \\x7b background: #f8f2ea; z-index: 3; \\x7d\\\\n\\\\n        .year-stat-filter \\x7b display: flex; gap: 6px; margin: 8px 0 12px; align-items: center; justify-content: center; flex-wrap: nowrap; \\x7d\\\\n        .year-stat-filter select \\x7b flex: 1; max-width: 120px; padding: 6px 10px; font-size: 13px; border-radius: 30px; border: 1.5px solid #e9dfd3; background: #fffdf9; \\x7d\\\\n        .year-stat-filter button \\x7b flex: 0 0 auto; padding: 6px 14px; margin-top: 0; border-radius: 30px; border: none; background: #8d6e63; color: white; font-weight: 600; cursor: pointer; white-space: nowrap; font-size: 13px; \\x7d\\\\n        .year-stat-filter button:hover \\x7b background: #6d4c41; \\x7d\\\\n\\\\n        .spinner \\x7b display: inline-block; width: 20px; height: 20px; border: 3px solid #f0e0c8; border-top: 3px solid #d68c45; border-radius: 50%; animation: spin 0.8s linear infinite; margin-right: 8px; vertical-align: middle; \\x7d\\\\n        @keyframes spin \\x7b to \\x7b transform: rotate(360deg); \\x7d \\x7d\\\\n\\\\n        html, body \\x7b overflow-x: hidden; width: 100%; max-width: 100vw; \\x7d\\\\n\\\\n         \\\\n        @media (max-width: 768px) \\x7b\\\\n            .cal-day \\x7b \\\\n                min-height: 70px; \\\\n                height: 70px;\\\\n                padding: 4px 1px; \\\\n                font-size: 12px; \\\\n                border-radius: 10px; \\\\n            \\x7d\\\\n            .cal-day .date-num \\x7b font-size: 13px; \\x7d\\\\n            .cal-day .lunar-date \\x7b font-size: 8px; margin-top: 1px; \\x7d\\\\n            .cal-day .record-icons \\x7b \\\\n                max-height: 28px; \\\\n                gap: 1px 2px; \\\\n                margin-top: 2px; \\\\n            \\x7d\\\\n            .cal-day .record-icons span \\x7b font-size: 7px; \\x7d\\\\n            .cal-day .record-icons .icon-more \\x7b font-size: 7px; padding: 0 3px; \\x7d\\\\n            .cal-day .record-badge \\x7b\\\\n                width: 16px;\\\\n                height: 16px;\\\\n                font-size: 8px;\\\\n                line-height: 16px;\\\\n                margin-top: 2px;\\\\n            \\x7d\\\\n            .cal-day.empty \\x7b min-height: 70px; height: 70px; \\x7d\\\\n            .calendar-grid \\x7b gap: 3px; min-width: 300px; \\x7d\\\\n            .cal-header \\x7b font-size: 11px; padding: 3px 0; \\x7d\\\\n        \\x7d\\\\n    \\x3c\\\\\\\/style\\x3e\\\\n\\x3c\\\\\\\/head\\x3e\\\\n\\x3cbody\\x3e\\\\n\\x3cdiv class\\x3d\\\\\\x22card\\\\\\x22\\x3e\\\\n    \\x3cdiv class\\x3d\\\\\\x22hero\\\\\\x22\\x3e\\\\n        \\x3cdiv class\\x3d\\\\\\x22hero-top\\\\\\x22\\x3e\\\\n            \\x3ch1 id\\x3d\\\\\\x22pageTitle\\\\\\x22\\x3e🍃 藍綠橘 📿 誦經共修\\x3c\\\\\\\/h1\\x3e\\\\n            \\x3cbutton class\\x3d\\\\\\x22lang-switch\\\\\\x22 id\\x3d\\\\\\x22langSwitchBtn\\\\\\x22 onclick\\x3d\\\\\\x22toggleLanguage()\\\\\\x22\\x3e简\\x3c\\\\\\\/button\\x3e\\\\n        \\x3c\\\\\\\/div\\x3e\\\\n        \\x3cp id\\x3d\\\\\\x22pageSubtitle\\\\\\x22\\x3etw-proxy-one.amtbw · 月曆檢視\\x3c\\\\\\\/p\\x3e\\\\n    \\x3c\\\\\\\/div\\x3e\\\\n    \\x3cdiv class\\x3d\\\\\\x22rule\\\\\\x22\\x3e\\\\n        \\x3cdiv id\\x3d\\\\\\x22ruleTitle\\\\\\x22 class\\x3d\\\\\\x22title\\\\\\x22\\x3e📌 使用說明\\x3c\\\\\\\/div\\x3e\\\\n        \\x3cli id\\x3d\\\\\\x22rule1\\\\\\x22\\x3e🔍 輸入會員編號，點擊「查詢會員」\\x3c\\\\\\\/li\\x3e\\\\n        \\x3cli id\\x3d\\\\\\x22rule2\\\\\\x22\\x3e📅 自動顯示當月月曆，有記錄的日期會標示\\x3c\\\\\\\/li\\x3e\\\\n        \\x3cli id\\x3d\\\\\\x22rule3\\\\\\x22\\x3e👆 點擊有記錄的日期，可查看當日明細\\x3c\\\\\\\/li\\x3e\\\\n        \\x3cli id\\x3d\\\\\\x22rule4\\\\\\x22\\x3e✏️ 下方登記新記錄後，月曆會自動更新\\x3c\\\\\\\/li\\x3e\\\\n    \\x3c\\\\\\\/div\\x3e\\\\n    \\x3cdiv class\\x3d\\\\\\x22form-panel\\\\\\x22\\x3e\\\\n        \\x3cdiv class\\x3d\\\\\\x22flex-row\\\\\\x22\\x3e\\\\n            \\x3cdiv class\\x3d\\\\\\x22input-group\\\\\\x22\\x3e\\x3clabel id\\x3d\\\\\\x22labelMemberNo\\\\\\x22\\x3e🔢 會員編號\\x3c\\\\\\\/label\\x3e\\x3cinput type\\x3d\\\\\\x22text\\\\\\x22 id\\x3d\\\\\\x22memberNo\\\\\\x22 placeholder\\x3d\\\\\\x22請輸入會員編號\\\\\\x22 autocomplete\\x3d\\\\\\x22off\\\\\\x22 inputmode\\x3d\\\\\\x22numeric\\\\\\x22\\x3e\\x3c\\\\\\\/div\\x3e\\\\n            \\x3cdiv class\\x3d\\\\\\x22input-group\\\\\\x22\\x3e\\x3cbutton id\\x3d\\\\\\x22searchBtn\\\\\\x22 class\\x3d\\\\\\x22query-btn\\\\\\x22\\x3e🔍 查詢會員\\x3c\\\\\\\/button\\x3e\\x3c\\\\\\\/div\\x3e\\\\n        \\x3c\\\\\\\/div\\x3e\\\\n        \\x3cdiv id\\x3d\\\\\\x22memberInfo\\\\\\x22 style\\x3d\\\\\\x22display:none;\\\\\\x22 class\\x3d\\\\\\x22info-card\\\\\\x22\\x3e\\\\n            \\x3cdiv\\x3e🧑 \\x3cstrong id\\x3d\\\\\\x22labelName\\\\\\x22\\x3e姓名：\\x3c\\\\\\\/strong\\x3e \\x3cspan id\\x3d\\\\\\x22memberName\\\\\\x22\\x3e-\\x3c\\\\\\\/span\\x3e\\x3c\\\\\\\/div\\x3e\\\\n            \\x3cdiv\\x3e🏷️ \\x3cstrong id\\x3d\\\\\\x22labelGroup\\\\\\x22\\x3e組別：\\x3c\\\\\\\/strong\\x3e \\x3cspan id\\x3d\\\\\\x22memberGroup\\\\\\x22\\x3e-\\x3c\\\\\\\/span\\x3e\\x3c\\\\\\\/div\\x3e\\\\n            \\x3cdiv\\x3e📋 \\x3cstrong id\\x3d\\\\\\x22labelStatus\\\\\\x22\\x3e狀態：\\x3c\\\\\\\/strong\\x3e \\x3cspan id\\x3d\\\\\\x22memberStatus\\\\\\x22\\x3e正常\\x3c\\\\\\\/span\\x3e\\x3c\\\\\\\/div\\x3e\\\\n        \\x3c\\\\\\\/div\\x3e\\\\n        \\x3cdiv id\\x3d\\\\\\x22formArea\\\\\\x22\\x3e\\\\n            \\x3cdiv class\\x3d\\\\\\x22input-group\\\\\\x22\\x3e\\x3clabel id\\x3d\\\\\\x22labelItem\\\\\\x22\\x3e📿 品項\\x3c\\\\\\\/label\\x3e\\x3cselect id\\x3d\\\\\\x22itemSelect\\\\\\x22 disabled\\x3e\\x3coption value\\x3d\\\\\\x22\\\\\\x22\\x3e🔒 請先查詢會員\\x3c\\\\\\\/option\\x3e\\x3c\\\\\\\/select\\x3e\\x3c\\\\\\\/div\\x3e\\\\n            \\x3cdiv class\\x3d\\\\\\x22input-group\\\\\\x22\\x3e\\x3clabel id\\x3d\\\\\\x22labelCount\\\\\\x22\\x3e🔢 遍數\\x3c\\\\\\\/label\\x3e\\x3cinput type\\x3d\\\\\\x22number\\\\\\x22 id\\x3d\\\\\\x22countInput\\\\\\x22 placeholder\\x3d\\\\\\x22請輸入遍數\\\\\\x22 disabled inputmode\\x3d\\\\\\x22numeric\\\\\\x22\\x3e\\x3c\\\\\\\/div\\x3e\\\\n            \\x3cdiv class\\x3d\\\\\\x22input-group\\\\\\x22\\x3e\\x3clabel id\\x3d\\\\\\x22labelRemark\\\\\\x22\\x3e📝 備註（選填）\\x3c\\\\\\\/label\\x3e\\x3cinput type\\x3d\\\\\\x22text\\\\\\x22 id\\x3d\\\\\\x22remarkInput\\\\\\x22 placeholder\\x3d\\\\\\x22備註說明\\\\\\x22 disabled\\x3e\\x3c\\\\\\\/div\\x3e\\\\n            \\x3cbutton id\\x3d\\\\\\x22submitBtn\\\\\\x22 disabled\\x3e🔒 請先查詢會員\\x3c\\\\\\\/button\\x3e\\\\n        \\x3c\\\\\\\/div\\x3e\\\\n        \\x3cdiv id\\x3d\\\\\\x22warningMsg\\\\\\x22 class\\x3d\\\\\\x22warning\\\\\\x22\\x3e\\x3c\\\\\\\/div\\x3e\\\\n        \\x3cdiv id\\x3d\\\\\\x22historyArea\\\\\\x22 style\\x3d\\\\\\x22display:none;\\\\\\x22\\x3e\\\\n            \\x3cdiv id\\x3d\\\\\\x22historyTitle\\\\\\x22 class\\x3d\\\\\\x22section-title\\\\\\x22\\x3e📅 誦經月曆 \\x3cspan style\\x3d\\\\\\x22font-size:12px;\\\\\\x22\\x3e（點日期看明細）\\x3c\\\\\\\/span\\x3e\\x3c\\\\\\\/div\\x3e\\\\n            \\x3cdiv class\\x3d\\\\\\x22date-filter\\\\\\x22\\x3e\\\\n                \\x3cselect id\\x3d\\\\\\x22yearSelect\\\\\\x22\\x3e\\x3c\\\\\\\/select\\x3e\\\\n                \\x3cselect id\\x3d\\\\\\x22monthSelect\\\\\\x22\\x3e\\x3c\\\\\\\/select\\x3e\\\\n                \\x3cbutton id\\x3d\\\\\\x22queryDailyBtn\\\\\\x22 class\\x3d\\\\\\x22small\\\\\\x22\\x3e🔍 切換\\x3c\\\\\\\/button\\x3e\\\\n            \\x3c\\\\\\\/div\\x3e\\\\n            \\x3cdiv id\\x3d\\\\\\x22calendarContainer\\\\\\x22 class\\x3d\\\\\\x22calendar-wrap\\\\\\x22\\x3e\\x3cdiv style\\x3d\\\\\\x22text-align:center;padding:16px;\\\\\\x22\\x3e📭 請先查詢會員\\x3c\\\\\\\/div\\x3e\\x3c\\\\\\\/div\\x3e\\\\n            \\x3cdiv id\\x3d\\\\\\x22yearTitle\\\\\\x22 class\\x3d\\\\\\x22section-title\\\\\\x22\\x3e📊 年度統計總表\\x3c\\\\\\\/div\\x3e\\\\n            \\x3cdiv class\\x3d\\\\\\x22year-stat-filter\\\\\\x22\\x3e\\\\n                \\x3cselect id\\x3d\\\\\\x22statYearSelect\\\\\\x22\\x3e\\x3c\\\\\\\/select\\x3e\\\\n                \\x3cbutton id\\x3d\\\\\\x22statYearBtn\\\\\\x22 class\\x3d\\\\\\x22small\\\\\\x22\\x3e🔍 切換年度\\x3c\\\\\\\/button\\x3e\\\\n            \\x3c\\\\\\\/div\\x3e\\\\n            \\x3cdiv id\\x3d\\\\\\x22yearTableWrapper\\\\\\x22 class\\x3d\\\\\\x22table-wrapper\\\\\\x22\\x3e\\x3cdiv style\\x3d\\\\\\x22text-align:center;padding:16px;\\\\\\x22\\x3e📭 請先查詢會員\\x3c\\\\\\\/div\\x3e\\x3c\\\\\\\/div\\x3e\\\\n        \\x3c\\\\\\\/div\\x3e\\\\n    \\x3c\\\\\\\/div\\x3e\\\\n    \\x3cfooter id\\x3d\\\\\\x22footerText\\\\\\x22\\x3e© 藍綠橘共修會 · 點擊日期查看明細\\x3c\\\\\\\/footer\\x3e\\\\n\\x3c\\\\\\\/div\\x3e\\\\n\\x3cscript\\x3e\\\\n    \\\\n\\\\n\\\\nvar lunarMonths \\x3d \\x5b\\x27正月\\x27, \\x27二月\\x27, \\x27三月\\x27, \\x27四月\\x27, \\x27五月\\x27, \\x27六月\\x27, \\x27七月\\x27, \\x27八月\\x27, \\x27九月\\x27, \\x27十月\\x27, \\x27冬月\\x27, \\x27臘月\\x27\\x5d;\\\\nvar lunarDays \\x3d \\x5b\\x27初一\\x27, \\x27初二\\x27, \\x27初三\\x27, \\x27初四\\x27, \\x27初五\\x27, \\x27初六\\x27, \\x27初七\\x27, \\x27初八\\x27, \\x27初九\\x27, \\x27初十\\x27,\\\\n    \\x27十一\\x27, \\x27十二\\x27, \\x27十三\\x27, \\x27十四\\x27, \\x27十五\\x27, \\x27十六\\x27, \\x27十七\\x27, \\x27十八\\x27, \\x27十九\\x27, \\x27二十\\x27,\\\\n    \\x27廿一\\x27, \\x27廿二\\x27, \\x27廿三\\x27, \\x27廿四\\x27, \\x27廿五\\x27, \\x27廿六\\x27, \\x27廿七\\x27, \\x27廿八\\x27, \\x27廿九\\x27, \\x27三十\\x27\\\\n\\x5d;\\\\n\\\\n\\\\nvar lunarLookup \\x3d \\x7b\\x7d;\\\\n\\\\n\\\\n\\\\n\\\\nvar lunarMonthStart \\x3d \\x7b\\\\n    \\\\n    \\x272026\\x27: \\x7b\\\\n        \\x27十一月\\x27: \\x7b year: 2025, month: 12, day: 20 \\x7d,\\\\n        \\x27臘月\\x27:   \\x7b year: 2026, month: 1, day: 19 \\x7d,\\\\n        \\x27正月\\x27:   \\x7b year: 2026, month: 2, day: 17 \\x7d,\\\\n        \\x27二月\\x27:   \\x7b year: 2026, month: 3, day: 19 \\x7d,\\\\n        \\x27三月\\x27:   \\x7b year: 2026, month: 4, day: 17 \\x7d,\\\\n        \\x27四月\\x27:   \\x7b year: 2026, month: 5, day: 17 \\x7d,\\\\n        \\x27五月\\x27:   \\x7b year: 2026, month: 6, day: 15 \\x7d,\\\\n        \\x27六月\\x27:   \\x7b year: 2026, month: 7, day: 14 \\x7d,\\\\n        \\x27七月\\x27:   \\x7b year: 2026, month: 8, day: 13 \\x7d,\\\\n        \\x27八月\\x27:   \\x7b year: 2026, month: 9, day: 11 \\x7d,\\\\n        \\x27九月\\x27:   \\x7b year: 2026, month: 10, day: 10 \\x7d,\\\\n        \\x27十月\\x27:   \\x7b year: 2026, month: 11, day: 9 \\x7d,\\\\n        \\x27十一月2\\x27: \\x7b year: 2026, month: 12, day: 9 \\x7d\\\\n    \\x7d,\\\\n    \\\\n    \\x272027\\x27: \\x7b\\\\n        \\x27臘月\\x27:   \\x7b year: 2027, month: 1, day: 8 \\x7d,\\\\n        \\x27正月\\x27:   \\x7b year: 2027, month: 2, day: 6 \\x7d,\\\\n        \\x27二月\\x27:   \\x7b year: 2027, month: 3, day: 8 \\x7d,\\\\n        \\x27三月\\x27:   \\x7b year: 2027, month: 4, day: 7 \\x7d,\\\\n        \\x27四月\\x27:   \\x7b year: 2027, month: 5, day: 6 \\x7d,\\\\n        \\x27五月\\x27:   \\x7b year: 2027, month: 6, day: 5 \\x7d,\\\\n        \\x27六月\\x27:   \\x7b year: 2027, month: 7, day: 4 \\x7d,\\\\n        \\x27七月\\x27:   \\x7b year: 2027, month: 8, day: 2 \\x7d,\\\\n        \\x27八月\\x27:   \\x7b year: 2027, month: 9, day: 1 \\x7d,\\\\n        \\x27九月\\x27:   \\x7b year: 2027, month: 10, day: 1 \\x7d,\\\\n        \\x27十月\\x27:   \\x7b year: 2027, month: 11, day: 29 \\x7d,\\\\n        \\x27十一月\\x27: \\x7b year: 2027, month: 12, day: 28 \\x7d\\\\n    \\x7d,\\\\n    \\\\n    \\x272028\\x27: \\x7b\\\\n        \\x27正月\\x27:   \\x7b year: 2028, month: 1, day: 26 \\x7d,\\\\n        \\x27二月\\x27:   \\x7b year: 2028, month: 2, day: 25 \\x7d,\\\\n        \\x27三月\\x27:   \\x7b year: 2028, month: 3, day: 26 \\x7d,\\\\n        \\x27四月\\x27:   \\x7b year: 2028, month: 4, day: 25 \\x7d,\\\\n        \\x27五月\\x27:   \\x7b year: 2028, month: 5, day: 24 \\x7d,\\\\n        \\x27閏五月\\x27: \\x7b year: 2028, month: 6, day: 23 \\x7d,\\\\n        \\x27六月\\x27:   \\x7b year: 2028, month: 7, day: 22 \\x7d,\\\\n        \\x27七月\\x27:   \\x7b year: 2028, month: 8, day: 20 \\x7d,\\\\n        \\x27八月\\x27:   \\x7b year: 2028, month: 9, day: 19 \\x7d,\\\\n        \\x27九月\\x27:   \\x7b year: 2028, month: 10, day: 18 \\x7d,\\\\n        \\x27十月\\x27:   \\x7b year: 2028, month: 11, day: 16 \\x7d,\\\\n        \\x27十一月\\x27: \\x7b year: 2028, month: 12, day: 16 \\x7d\\\\n    \\x7d,\\\\n    \\\\n    \\x272029\\x27: \\x7b\\\\n        \\x27臘月\\x27:   \\x7b year: 2029, month: 1, day: 15 \\x7d,\\\\n        \\x27正月\\x27:   \\x7b year: 2029, month: 2, day: 13 \\x7d,\\\\n        \\x27二月\\x27:   \\x7b year: 2029, month: 3, day: 15 \\x7d,\\\\n        \\x27三月\\x27:   \\x7b year: 2029, month: 4, day: 14 \\x7d,\\\\n        \\x27四月\\x27:   \\x7b year: 2029, month: 5, day: 13 \\x7d,\\\\n        \\x27五月\\x27:   \\x7b year: 2029, month: 6, day: 12 \\x7d,\\\\n        \\x27六月\\x27:   \\x7b year: 2029, month: 7, day: 11 \\x7d,\\\\n        \\x27七月\\x27:   \\x7b year: 2029, month: 8, day: 10 \\x7d,\\\\n        \\x27八月\\x27:   \\x7b year: 2029, month: 9, day: 8 \\x7d,\\\\n        \\x27九月\\x27:   \\x7b year: 2029, month: 10, day: 8 \\x7d,\\\\n        \\x27十月\\x27:   \\x7b year: 2029, month: 11, day: 6 \\x7d,\\\\n        \\x27十一月\\x27: \\x7b year: 2029, month: 12, day: 5 \\x7d\\\\n    \\x7d,\\\\n    \\\\n    \\x272030\\x27: \\x7b\\\\n        \\x27臘月\\x27:   \\x7b year: 2030, month: 1, day: 4 \\x7d,\\\\n        \\x27正月\\x27:   \\x7b year: 2030, month: 2, day: 3 \\x7d,\\\\n        \\x27二月\\x27:   \\x7b year: 2030, month: 3, day: 4 \\x7d,\\\\n        \\x27三月\\x27:   \\x7b year: 2030, month: 4, day: 3 \\x7d,\\\\n        \\x27四月\\x27:   \\x7b year: 2030, month: 5, day: 2 \\x7d,\\\\n        \\x27五月\\x27:   \\x7b year: 2030, month: 6, day: 1 \\x7d,\\\\n        \\x27六月\\x27:   \\x7b year: 2030, month: 7, day: 1 \\x7d,\\\\n        \\x27七月\\x27:   \\x7b year: 2030, month: 8, day: 30 \\x7d,\\\\n        \\x27八月\\x27:   \\x7b year: 2030, month: 9, day: 29 \\x7d,\\\\n        \\x27九月\\x27:   \\x7b year: 2030, month: 10, day: 27 \\x7d,\\\\n        \\x27十月\\x27:   \\x7b year: 2030, month: 11, day: 25 \\x7d,\\\\n        \\x27十一月\\x27: \\x7b year: 2030, month: 12, day: 25 \\x7d\\\\n    \\x7d,\\\\n    \\\\n    \\x272031\\x27: \\x7b\\\\n        \\x27正月\\x27:   \\x7b year: 2031, month: 1, day: 23 \\x7d,\\\\n        \\x27二月\\x27:   \\x7b year: 2031, month: 2, day: 21 \\x7d,\\\\n        \\x27三月\\x27:   \\x7b year: 2031, month: 3, day: 23 \\x7d,\\\\n        \\x27閏三月\\x27: \\x7b year: 2031, month: 4, day: 22 \\x7d,\\\\n        \\x27四月\\x27:   \\x7b year: 2031, month: 5, day: 21 \\x7d,\\\\n        \\x27五月\\x27:   \\x7b year: 2031, month: 6, day: 20 \\x7d,\\\\n        \\x27六月\\x27:   \\x7b year: 2031, month: 7, day: 19 \\x7d,\\\\n        \\x27七月\\x27:   \\x7b year: 2031, month: 8, day: 18 \\x7d,\\\\n        \\x27八月\\x27:   \\x7b year: 2031, month: 9, day: 17 \\x7d,\\\\n        \\x27九月\\x27:   \\x7b year: 2031, month: 10, day: 16 \\x7d,\\\\n        \\x27十月\\x27:   \\x7b year: 2031, month: 11, day: 15 \\x7d,\\\\n        \\x27十一月\\x27: \\x7b year: 2031, month: 12, day: 14 \\x7d\\\\n    \\x7d\\\\n\\x7d;\\\\n\\\\n\\\\n\\\\n\\\\nfunction buildFullLookup() \\x7b\\\\n    var years \\x3d \\x5b\\x272026\\x27, \\x272027\\x27, \\x272028\\x27, \\x272029\\x27, \\x272030\\x27, \\x272031\\x27\\x5d;\\\\n    \\\\n    for (var yi \\x3d 0; yi \\x3c years.length; yi++) \\x7b\\\\n        var yearKey \\x3d years\\x5byi\\x5d;\\\\n        var monthData \\x3d lunarMonthStart\\x5byearKey\\x5d;\\\\n        if (!monthData) continue;\\\\n        \\\\n        var monthNames \\x3d Object.keys(monthData);\\\\n        \\\\n        for (var mi \\x3d 0; mi \\x3c monthNames.length; mi++) \\x7b\\\\n            var monthName \\x3d monthNames\\x5bmi\\x5d;\\\\n            var info \\x3d monthData\\x5bmonthName\\x5d;\\\\n            if (!info) continue;\\\\n            \\\\n            var startDate \\x3d new Date(info.year, info.month - 1, info.day);\\\\n            \\\\n            \\\\n            var nextMonthName \\x3d monthNames\\x5bmi + 1\\x5d;\\\\n            var endDate;\\\\n            if (nextMonthName \\x26\\x26 monthData\\x5bnextMonthName\\x5d) \\x7b\\\\n                var nextInfo \\x3d monthData\\x5bnextMonthName\\x5d;\\\\n                endDate \\x3d new Date(nextInfo.year, nextInfo.month - 1, nextInfo.day);\\\\n            \\x7d else \\x7b\\\\n                \\\\n                endDate \\x3d new Date(startDate);\\\\n                endDate.setDate(endDate.getDate() + 30);\\\\n            \\x7d\\\\n            \\\\n            var currentDate \\x3d new Date(startDate);\\\\n            var dayIndex \\x3d 0;\\\\n            \\\\n            while (currentDate \\x3c endDate \\x26\\x26 dayIndex \\x3c 30) \\x7b\\\\n                var keyStr \\x3d currentDate.getFullYear() + \\x27-\\x27 + \\\\n                             String(currentDate.getMonth() + 1).padStart(2, \\x270\\x27) + \\x27-\\x27 + \\\\n                             String(currentDate.getDate()).padStart(2, \\x270\\x27);\\\\n                \\\\n                \\\\n                var displayName \\x3d monthName;\\\\n                lunarLookup\\x5bkeyStr\\x5d \\x3d displayName + lunarDays\\x5bdayIndex\\x5d;\\\\n                \\\\n                currentDate.setDate(currentDate.getDate() + 1);\\\\n                dayIndex++;\\\\n            \\x7d\\\\n        \\x7d\\\\n    \\x7d\\\\n\\x7d\\\\n\\\\n\\\\nbuildFullLookup();\\\\n\\\\n\\\\n\\\\n\\\\nfunction getLunarDateString(year, month, day) \\x7b\\\\n    var key \\x3d year + \\x27-\\x27 + String(month).padStart(2, \\x270\\x27) + \\x27-\\x27 + String(day).padStart(2, \\x270\\x27);\\\\n    var result \\x3d lunarLookup\\x5bkey\\x5d;\\\\n    if (result) return result;\\\\n    return \\x27--\\x27;\\\\n\\x7d\\\\n\\\\nfunction getLunarDayOnly(year, month, day) \\x7b\\\\n    var str \\x3d getLunarDateString(year, month, day);\\\\n    if (str \\x3d\\x3d\\x3d \\x27--\\x27) return 0;\\\\n    if (str.indexOf(\\x27十五\\x27) !\\x3d\\x3d -1) return 15;\\\\n    if (str.indexOf(\\x27初一\\x27) !\\x3d\\x3d -1) return 1;\\\\n    var match \\x3d str.match(\\\/(\\\\\\\\d+)$\\\/);\\\\n    if (match) \\x7b\\\\n        var num \\x3d parseInt(match\\x5b0\\x5d);\\\\n        if (num \\x3e\\x3d 1 \\x26\\x26 num \\x3c\\x3d 30) return num;\\\\n    \\x7d\\\\n    return 0;\\\\n\\x7d\\\\n\\\\n\\\\n\\\\n\\\\nconsole.log(\\x27\\x3d\\x3d\\x3d\\x3d\\x3d 2026年7月農曆測試 \\x3d\\x3d\\x3d\\x3d\\x3d\\x27);\\\\nvar testData \\x3d \\x5b\\\\n    \\x5b2026, 7, 1, \\x27五月十七\\x27\\x5d,\\\\n    \\x5b2026, 7, 14, \\x27六月初一\\x27\\x5d,\\\\n    \\x5b2026, 7, 15, \\x27六月初二\\x27\\x5d,\\\\n    \\x5b2026, 7, 24, \\x27六月十一\\x27\\x5d,\\\\n    \\x5b2026, 7, 28, \\x27六月十五\\x27\\x5d,\\\\n    \\x5b2026, 8, 13, \\x27七月初一\\x27\\x5d,\\\\n\\x5d;\\\\n\\\\nfor (var i \\x3d 0; i \\x3c testData.length; i++) \\x7b\\\\n    var y \\x3d testData\\x5bi\\x5d\\x5b0\\x5d;\\\\n    var m \\x3d testData\\x5bi\\x5d\\x5b1\\x5d;\\\\n    var d \\x3d testData\\x5bi\\x5d\\x5b2\\x5d;\\\\n    var expected \\x3d testData\\x5bi\\x5d\\x5b3\\x5d;\\\\n    var result \\x3d getLunarDateString(y, m, d);\\\\n    var status \\x3d (result \\x3d\\x3d\\x3d expected) ? \\x27✅\\x27 : \\x27❌\\x27;\\\\n    console.log(status + \\x27 \\x27 + y + \\x27\\\/\\x27 + m + \\x27\\\/\\x27 + d + \\x27 → \\x27 + result + \\x27 (期望: \\x27 + expected + \\x27)\\x27);\\\\n\\x7d\\\\n\\\\nconsole.log(\\x27\\\\\\\\n\\x3d\\x3d\\x3d\\x3d\\x3d 2027年1月測試 \\x3d\\x3d\\x3d\\x3d\\x3d\\x27);\\\\nvar test2027 \\x3d \\x5b\\\\n    \\x5b2027, 1, 1, \\x27十一月廿四\\x27\\x5d,\\\\n    \\x5b2027, 1, 8, \\x27臘月初一\\x27\\x5d,\\\\n    \\x5b2027, 1, 31, \\x27臘月廿四\\x27\\x5d,\\\\n\\x5d;\\\\n\\\\nfor (var i \\x3d 0; i \\x3c test2027.length; i++) \\x7b\\\\n    var y \\x3d test2027\\x5bi\\x5d\\x5b0\\x5d;\\\\n    var m \\x3d test2027\\x5bi\\x5d\\x5b1\\x5d;\\\\n    var d \\x3d test2027\\x5bi\\x5d\\x5b2\\x5d;\\\\n    var expected \\x3d test2027\\x5bi\\x5d\\x5b3\\x5d;\\\\n    var result \\x3d getLunarDateString(y, m, d);\\\\n    var status \\x3d (result \\x3d\\x3d\\x3d expected) ? \\x27✅\\x27 : \\x27❌\\x27;\\\\n    console.log(status + \\x27 \\x27 + y + \\x27\\\/\\x27 + m + \\x27\\\/\\x27 + d + \\x27 → \\x27 + result + \\x27 (期望: \\x27 + expected + \\x27)\\x27);\\\\n\\x7d\\\\n\\\\nconsole.log(\\x27\\\\\\\\n\\x3d\\x3d\\x3d\\x3d\\x3d 2027年1月完整對照 \\x3d\\x3d\\x3d\\x3d\\x3d\\x27);\\\\nfor (var d \\x3d 1; d \\x3c\\x3d 31; d++) \\x7b\\\\n    var result \\x3d getLunarDateString(2027, 1, d);\\\\n    console.log(\\x272027\\\/1\\\/\\x27 + String(d).padStart(2, \\x270\\x27) + \\x27 → \\x27 + result);\\\\n\\x7d\\\\n\\\\n    \\\\n    \\\\n    \\\\n    var currentMemberNo \\x3d null, currentMemberName \\x3d null, isLoading \\x3d false;\\\\n    var itemsList \\x3d \\x5b\\x5d, currentDisplayYear \\x3d null, currentDisplayMonth \\x3d null, currentStatYear \\x3d null;\\\\n    var visitedYears \\x3d \\x5b\\x5d, currentLang \\x3d \\x27zh-TW\\x27;\\\\n    var cachedDailyRecords \\x3d \\x7b\\x7d;  \\\\n\\\\n    \\\\n    \\\\n    \\\\n    var translations \\x3d \\x7b\\\\n        \\x27zh-TW\\x27: \\x7b\\\\n            pageTitle: \\x27🍃 藍綠橘 📿 誦經共修\\x27, pageSubtitle: \\x27tw-proxy-one.amtbw · 月曆檢視\\x27,\\\\n            ruleTitle: \\x27📌 使用說明\\x27, rule1: \\x27🔍 輸入會員編號，點擊「查詢會員」\\x27, rule2: \\x27📅 自動顯示當月月曆，有記錄的日期會標示\\x27,\\\\n            rule3: \\x27👆 點擊有記錄的日期，可查看當日明細\\x27, rule4: \\x27✏️ 下方登記新記錄後，月曆會自動更新\\x27,\\\\n            labelMemberNo: \\x27🔢 測試會員編號：01101\\x27, labelName: \\x27姓名：\\x27, labelGroup: \\x27組別：\\x27, labelStatus: \\x27狀態：\\x27,\\\\n            labelItem: \\x27📿 品項\\x27, labelCount: \\x27🔢 遍數\\x27, labelRemark: \\x27📝 備註（選填）\\x27,\\\\n            labelSearchBtn: \\x27🔍 查詢會員\\x27, labelSubmitBtn: \\x27📤 確認登記\\x27, labelSubmitLocked: \\x27🔒 請先查詢會員\\x27,\\\\n            labelHistoryTitle: \\x27📅 誦經月曆\\x27, labelYearTitle: \\x27📊 年度統計總表\\x27,\\\\n            labelQueryBtn: \\x27🔍 切換\\x27, labelStatSwitch: \\x27🔍 切換年度\\x27,\\\\n            labelLoading: \\x27⏳ 載入品項中...\\x27, labelSelectItem: \\x27請選擇用功項目\\x27, labelLoadFail: \\x27❌ 載入失敗\\x27,\\\\n            msgPleaseSearch: \\x27請先查詢會員\\x27, msgSearchFail: \\x27查無此會員編號\\x27,\\\\n            msgMemberDisabled: \\x27該會員已停用，無法進行誦經登記。\\x27, msgSearchSuccess: \\x27會員驗證成功！\\x27,\\\\n            msgCountInvalid: \\x27遍數必須大於0\\x27, msgCountTooLarge: \\x27單次遍數上限為 9,999,999 遍\\x27,\\\\n            msgSelectItem: \\x27請選擇用功項目\\x27, msgSubmitSuccess: \\x27✅ 登記成功！\\x27, msgSubmitFail: \\x27登記失敗\\x27,\\\\n            footer: \\x27© 藍綠橘共修會 · 點擊日期查看明細\\x27\\\\n        \\x7d,\\\\n        \\x27zh-CN\\x27: \\x7b\\\\n            pageTitle: \\x27🍃 蓝绿橘 📿 诵经共修\\x27, pageSubtitle: \\x27tw-proxy-one.amtbw · 月历检视\\x27,\\\\n            ruleTitle: \\x27📌 使用说明\\x27, rule1: \\x27🔍 输入会员编号，点击「查询会员」\\x27, rule2: \\x27📅 自动显示当月月历，有记录的日期会标示\\x27,\\\\n            rule3: \\x27👆 点击有记录的日期，可查看当日明细\\x27, rule4: \\x27✏️ 下方登记新记录后，月历会自动更新\\x27,\\\\n            labelMemberNo: \\x27🔢 测试会员编号：01101\\x27, labelName: \\x27姓名：\\x27, labelGroup: \\x27组别：\\x27, labelStatus: \\x27状态：\\x27,\\\\n            labelItem: \\x27📿 品项\\x27, labelCount: \\x27🔢 遍数\\x27, labelRemark: \\x27📝 备注（选填）\\x27,\\\\n            labelSearchBtn: \\x27🔍 查询会员\\x27, labelSubmitBtn: \\x27📤 确认登记\\x27, labelSubmitLocked: \\x27🔒 请先查询会员\\x27,\\\\n            labelHistoryTitle: \\x27📅 诵经月历\\x27, labelYearTitle: \\x27📊 年度统计总表\\x27,\\\\n            labelQueryBtn: \\x27🔍 切换\\x27, labelStatSwitch: \\x27🔍 切换年度\\x27,\\\\n            labelLoading: \\x27⏳ 载入品项中...\\x27, labelSelectItem: \\x27请选择用功项目\\x27, labelLoadFail: \\x27❌ 载入失败\\x27,\\\\n            msgPleaseSearch: \\x27请先查询会员\\x27, msgSearchFail: \\x27查无此会员编号\\x27,\\\\n            msgMemberDisabled: \\x27该会员已停用，无法进行诵经登记。\\x27, msgSearchSuccess: \\x27会员验证成功！\\x27,\\\\n            msgCountInvalid: \\x27遍数必须大于0\\x27, msgCountTooLarge: \\x27单次遍数上限为 9,999,999 遍\\x27,\\\\n            msgSelectItem: \\x27请选择用功项目\\x27, msgSubmitSuccess: \\x27✅ 登记成功！\\x27, msgSubmitFail: \\x27登记失败\\x27,\\\\n            footer: \\x27© 蓝绿橘共修会 · 点击日期查看明细\\x27\\\\n        \\x7d\\\\n    \\x7d;\\\\n\\\\n    function toggleLanguage() \\x7b currentLang \\x3d (currentLang \\x3d\\x3d\\x3d \\x27zh-TW\\x27) ? \\x27zh-CN\\x27 : \\x27zh-TW\\x27; applyLanguage(currentLang); localStorage.setItem(\\x27preferredLang\\x27, currentLang); \\x7d\\\\n    function applyLanguage(lang) \\x7b\\\\n        var t \\x3d translations\\x5blang\\x5d; if (!t) return;\\\\n        document.getElementById(\\x27pageTitle\\x27).innerHTML \\x3d t.pageTitle;\\\\n        document.getElementById(\\x27pageSubtitle\\x27).innerHTML \\x3d t.pageSubtitle;\\\\n        document.getElementById(\\x27ruleTitle\\x27).innerHTML \\x3d t.ruleTitle;\\\\n        document.getElementById(\\x27rule1\\x27).innerHTML \\x3d t.rule1;\\\\n        document.getElementById(\\x27rule2\\x27).innerHTML \\x3d t.rule2;\\\\n        document.getElementById(\\x27rule3\\x27).innerHTML \\x3d t.rule3;\\\\n        document.getElementById(\\x27rule4\\x27).innerHTML \\x3d t.rule4;\\\\n        document.getElementById(\\x27labelMemberNo\\x27).innerHTML \\x3d t.labelMemberNo;\\\\n        document.getElementById(\\x27labelName\\x27).innerHTML \\x3d t.labelName;\\\\n        document.getElementById(\\x27labelGroup\\x27).innerHTML \\x3d t.labelGroup;\\\\n        document.getElementById(\\x27labelStatus\\x27).innerHTML \\x3d t.labelStatus;\\\\n        document.getElementById(\\x27labelItem\\x27).innerHTML \\x3d t.labelItem;\\\\n        document.getElementById(\\x27labelCount\\x27).innerHTML \\x3d t.labelCount;\\\\n        document.getElementById(\\x27labelRemark\\x27).innerHTML \\x3d t.labelRemark;\\\\n        document.getElementById(\\x27searchBtn\\x27).innerHTML \\x3d t.labelSearchBtn;\\\\n        document.getElementById(\\x27historyTitle\\x27).innerHTML \\x3d t.labelHistoryTitle + \\x27 \\x3cspan style\\x3d\\\\\\x22font-size:12px;\\\\\\x22\\x3e（點日期看明細）\\x3c\\\\\\\/span\\x3e\\x27;\\\\n        document.getElementById(\\x27yearTitle\\x27).innerHTML \\x3d t.labelYearTitle;\\\\n        document.getElementById(\\x27queryDailyBtn\\x27).innerHTML \\x3d t.labelQueryBtn;\\\\n        document.getElementById(\\x27statYearBtn\\x27).innerHTML \\x3d t.labelStatSwitch;\\\\n        document.getElementById(\\x27footerText\\x27).innerHTML \\x3d t.footer;\\\\n        document.getElementById(\\x27langSwitchBtn\\x27).innerHTML \\x3d (lang \\x3d\\x3d\\x3d \\x27zh-TW\\x27) ? \\x27简\\x27 : \\x27繁\\x27;\\\\n        var submitBtn \\x3d document.getElementById(\\x27submitBtn\\x27);\\\\n        if (submitBtn \\x26\\x26 submitBtn.disabled \\x26\\x26 submitBtn.textContent.includes(\\x27請先查詢會員\\x27)) \\x7b\\\\n            submitBtn.textContent \\x3d t.labelSubmitLocked;\\\\n        \\x7d\\\\n        localStorage.setItem(\\x27preferredLang\\x27, lang);\\\\n    \\x7d\\\\n    function initLanguage() \\x7b\\\\n        var saved \\x3d localStorage.getItem(\\x27preferredLang\\x27);\\\\n        if (saved \\x26\\x26 translations\\x5bsaved\\x5d) \\x7b currentLang \\x3d saved; \\x7d\\\\n        else \\x7b var u \\x3d navigator.language || \\x27zh-TW\\x27; currentLang \\x3d (u.startsWith(\\x27zh-CN\\x27) || u.startsWith(\\x27zh-SG\\x27) || u.startsWith(\\x27zh-Hans\\x27)) ? \\x27zh-CN\\x27 : \\x27zh-TW\\x27; \\x7d\\\\n        applyLanguage(currentLang);\\\\n    \\x7d\\\\n\\\\n    function showModal(title, message, emoji, isError) \\x7b\\\\n        var e \\x3d document.getElementById(\\x27customModal\\x27); if (e) e.remove();\\\\n        var m \\x3d document.createElement(\\x27div\\x27); m.id \\x3d \\x27customModal\\x27; m.style.cssText \\x3d \\x27position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.5); display:flex; align-items:center; justify-content:center; z-index:10000; padding:16px;\\x27;\\\\n        var bg \\x3d isError ? \\x27#b91c1c\\x27 : \\x27#d68c45\\x27;\\\\n        var ec \\x3d emoji || (isError ? \\x27❌\\x27 : \\x27🎉\\x27);\\\\n        m.innerHTML \\x3d \\x27\\x3cdiv style\\x3d\\\\\\x22background:white; border-radius:32px; padding:20px 18px; width:100%; max-width:320px; text-align:center; box-shadow:0 20px 35px -10px rgba(0,0,0,0.3);\\\\\\x22\\x3e\\x3cdiv style\\x3d\\\\\\x22font-size:40px; margin-bottom:6px;\\\\\\x22\\x3e\\x27 + ec + \\x27\\x3c\\\\\\\/div\\x3e\\x3ch3 style\\x3d\\\\\\x22color:\\x27 + (isError ? \\x27#b91c1c\\x27 : \\x27#2c6e2c\\x27) + \\x27; margin-bottom:8px; font-size:18px; font-weight:700;\\\\\\x22\\x3e\\x27 + title + \\x27\\x3c\\\\\\\/h3\\x3e\\x3cdiv style\\x3d\\\\\\x22line-height:1.5; margin-bottom:14px; white-space:pre-line; color:#4a2e1a; font-size:13px; background:#fef9e8; padding:10px; border-radius:20px;\\\\\\x22\\x3e\\x27 + (message || \\x27\\x27).replace(\\\/\\\\\\\\n\\\/g, \\x27\\x3cbr\\x3e\\x27) + \\x27\\x3c\\\\\\\/div\\x3e\\x3cbutton id\\x3d\\\\\\x22closeModalBtn\\\\\\x22 style\\x3d\\\\\\x22background:\\x27 + bg + \\x27; padding:10px; border-radius:30px; font-size:14px; font-weight:600; width:100%; border:none; color:white; cursor:pointer;\\\\\\x22\\x3e我知道了\\x3c\\\\\\\/button\\x3e\\x3c\\\\\\\/div\\x3e\\x27;\\\\n        document.body.appendChild(m);\\\\n        document.getElementById(\\x27closeModalBtn\\x27).onclick \\x3d function() \\x7b m.remove(); \\x7d;\\\\n        m.onclick \\x3d function(e) \\x7b if (e.target \\x3d\\x3d\\x3d m) m.remove(); \\x7d;\\\\n    \\x7d\\\\n\\\\n    function showSuccessModal(item, count, remark) \\x7b\\\\n        var t \\x3d translations\\x5bcurrentLang\\x5d;\\\\n        var m \\x3d document.createElement(\\x27div\\x27); m.id \\x3d \\x27customModal\\x27; m.style.cssText \\x3d \\x27position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.5); display:flex; align-items:center; justify-content:center; z-index:10000; padding:16px;\\x27;\\\\n        m.innerHTML \\x3d \\x27\\x3cdiv style\\x3d\\\\\\x22background:white; border-radius:32px; padding:20px 18px; width:100%; max-width:320px; text-align:center; box-shadow:0 20px 35px -10px rgba(0,0,0,0.3);\\\\\\x22\\x3e\\x3cdiv style\\x3d\\\\\\x22font-size:40px; margin-bottom:6px;\\\\\\x22\\x3e🎉✨\\x3c\\\\\\\/div\\x3e\\x3ch3 style\\x3d\\\\\\x22color:#2c6e2c; margin-bottom:8px; font-size:18px; font-weight:700;\\\\\\x22\\x3e\\x27 + (currentLang \\x3d\\x3d\\x3d \\x27zh-TW\\x27 ? \\x27✅ 登記成功！\\x27 : \\x27✅ 登记成功！\\x27) + \\x27\\x3c\\\\\\\/h3\\x3e\\x3cdiv style\\x3d\\\\\\x22line-height:1.6; margin-bottom:14px; color:#4a2e1a; font-size:13px; background:#fef9e8; padding:10px; border-radius:20px; text-align:left;\\\\\\x22\\x3e\\x3cspan\\x3e📿 \\x3cstrong\\x3e\\x27 + (currentLang \\x3d\\x3d\\x3d \\x27zh-TW\\x27 ? \\x27品項\\x27 : \\x27品项\\x27) + \\x27\\x3c\\\\\\\/strong\\x3e ： \\x27 + item + \\x27\\x3c\\\\\\\/span\\x3e\\x3cbr\\x3e\\x3cspan\\x3e🔢 \\x3cstrong\\x3e\\x27 + (currentLang \\x3d\\x3d\\x3d \\x27zh-TW\\x27 ? \\x27遍數\\x27 : \\x27遍数\\x27) + \\x27\\x3c\\\\\\\/strong\\x3e ： \\x27 + Number(count).toLocaleString() + \\x27 \\x27 + (currentLang \\x3d\\x3d\\x3d \\x27zh-TW\\x27 ? \\x27遍\\x27 : \\x27遍\\x27) + \\x27\\x3c\\\\\\\/span\\x3e\\x3cbr\\x3e\\x3cspan\\x3e📝 \\x3cstrong\\x3e\\x27 + (currentLang \\x3d\\x3d\\x3d \\x27zh-TW\\x27 ? \\x27備註\\x27 : \\x27备注\\x27) + \\x27\\x3c\\\\\\\/strong\\x3e ： \\x27 + (remark \\x26\\x26 remark.trim() ? remark : (currentLang \\x3d\\x3d\\x3d \\x27zh-TW\\x27 ? \\x27無\\x27 : \\x27无\\x27)) + \\x27\\x3c\\\\\\\/span\\x3e\\x3c\\\\\\\/div\\x3e\\x3cbutton id\\x3d\\\\\\x22closeModalBtn\\\\\\x22 style\\x3d\\\\\\x22background:#d68c45; padding:10px; border-radius:30px; font-size:14px; font-weight:600; width:100%; border:none; color:white; cursor:pointer;\\\\\\x22\\x3e我知道了\\x3c\\\\\\\/button\\x3e\\x3c\\\\\\\/div\\x3e\\x27;\\\\n        document.body.appendChild(m);\\\\n        document.getElementById(\\x27closeModalBtn\\x27).onclick \\x3d function() \\x7b m.remove(); \\x7d;\\\\n        m.onclick \\x3d function(e) \\x7b if (e.target \\x3d\\x3d\\x3d m) m.remove(); \\x7d;\\\\n    \\x7d\\\\n\\\\n    function formatNumber(n) \\x7b if (n \\x3d\\x3d\\x3d undefined || n \\x3d\\x3d\\x3d null) return \\x270\\x27; return Number(n).toLocaleString(); \\x7d\\\\n\\\\n    function setFormEnabled(enabled) \\x7b\\\\n        var t \\x3d translations\\x5bcurrentLang\\x5d;\\\\n        var sel \\x3d document.getElementById(\\x27itemSelect\\x27), cnt \\x3d document.getElementById(\\x27countInput\\x27), rem \\x3d document.getElementById(\\x27remarkInput\\x27), sub \\x3d document.getElementById(\\x27submitBtn\\x27);\\\\n        if (enabled) \\x7b sel.disabled \\x3d false; cnt.disabled \\x3d false; rem.disabled \\x3d false; sub.disabled \\x3d false; sub.textContent \\x3d t ? t.labelSubmitBtn : \\x27📤 確認登記\\x27; \\x7d\\\\n        else \\x7b sel.disabled \\x3d true; cnt.disabled \\x3d true; rem.disabled \\x3d true; sub.disabled \\x3d true; sub.textContent \\x3d t ? t.labelSubmitLocked : \\x27🔒 請先查詢會員\\x27; \\x7d\\\\n    \\x7d\\\\n\\\\n    function loadItems() \\x7b\\\\n        var sel \\x3d document.getElementById(\\x27itemSelect\\x27); var t \\x3d translations\\x5bcurrentLang\\x5d;\\\\n        sel.innerHTML \\x3d \\x27\\x3coption value\\x3d\\\\\\x22\\\\\\x22\\x3e\\x27 + (t ? t.labelLoading : \\x27⏳ 載入品項中...\\x27) + \\x27\\x3c\\\\\\\/option\\x3e\\x27;\\\\n        google.script.run\\\\n            .withSuccessHandler(function(items) \\x7b\\\\n                if (!items || !Array.isArray(items)) items \\x3d \\x5b\\x5d;\\\\n                itemsList \\x3d items;\\\\n                sel.innerHTML \\x3d \\x27\\x3coption value\\x3d\\\\\\x22\\\\\\x22\\x3e\\x27 + (t ? t.labelSelectItem : \\x27請選擇品項\\x27) + \\x27\\x3c\\\\\\\/option\\x3e\\x27;\\\\n                if (items.length \\x3d\\x3d\\x3d 0) \\x7b sel.innerHTML \\x3d \\x27\\x3coption value\\x3d\\\\\\x22\\\\\\x22\\x3e📭 \\x27 + (t ? \\x27無品項\\x27 : \\x27无品项\\x27) + \\x27\\x3c\\\\\\\/option\\x3e\\x27; \\x7d\\\\n                else \\x7b for (var i \\x3d 0; i \\x3c itemsList.length; i++) \\x7b var opt \\x3d document.createElement(\\x27option\\x27); opt.value \\x3d itemsList\\x5bi\\x5d.name; opt.textContent \\x3d (itemsList\\x5bi\\x5d.icon || \\x27📿\\x27) + \\x27 \\x27 + itemsList\\x5bi\\x5d.name; sel.appendChild(opt); \\x7d \\x7d\\\\n                if (!currentMemberNo) sel.disabled \\x3d true;\\\\n            \\x7d)\\\\n            .withFailureHandler(function(err) \\x7b console.error(err); sel.innerHTML \\x3d \\x27\\x3coption value\\x3d\\\\\\x22\\\\\\x22\\x3e\\x27 + (t ? t.labelLoadFail : \\x27❌ 載入失敗\\x27) + \\x27\\x3c\\\\\\\/option\\x3e\\x27; showModal(\\x27載入錯誤\\x27, \\x27品項資料載入失敗\\x27, \\x27⚠️\\x27, true); \\x7d)\\\\n            .getAllActiveItems();\\\\n    \\x7d\\\\n\\\\n    function addVisitedYear(year) \\x7b if (visitedYears.indexOf(year) \\x3d\\x3d\\x3d -1) \\x7b visitedYears.push(year); visitedYears.sort(function(a, b) \\x7b return a - b; \\x7d); \\x7d \\x7d\\\\n    function populateStatYearSelect(selectedYear) \\x7b\\\\n        var statSelect \\x3d document.getElementById(\\x27statYearSelect\\x27);\\\\n        var currentYear \\x3d new Date().getFullYear();\\\\n        var allYears \\x3d visitedYears.slice();\\\\n        for (var y \\x3d currentYear; y \\x3c\\x3d currentYear + 5; y++) \\x7b if (allYears.indexOf(y) \\x3d\\x3d\\x3d -1) allYears.push(y); \\x7d\\\\n        allYears.sort(function(a, b) \\x7b return a - b; \\x7d);\\\\n        statSelect.innerHTML \\x3d \\x27\\x27;\\\\n        for (var i \\x3d 0; i \\x3c allYears.length; i++) \\x7b var opt \\x3d document.createElement(\\x27option\\x27); opt.value \\x3d allYears\\x5bi\\x5d; opt.textContent \\x3d allYears\\x5bi\\x5d + \\x27年\\x27; if (allYears\\x5bi\\x5d \\x3d\\x3d\\x3d selectedYear) opt.selected \\x3d true; statSelect.appendChild(opt); \\x7d\\\\n    \\x7d\\\\n    function populateYearSelect(selectedYear) \\x7b\\\\n        var yearSelect \\x3d document.getElementById(\\x27yearSelect\\x27);\\\\n        var currentYear \\x3d new Date().getFullYear();\\\\n        var allYears \\x3d visitedYears.slice();\\\\n        for (var y \\x3d currentYear; y \\x3c\\x3d currentYear + 5; y++) \\x7b if (allYears.indexOf(y) \\x3d\\x3d\\x3d -1) allYears.push(y); \\x7d\\\\n        allYears.sort(function(a, b) \\x7b return a - b; \\x7d);\\\\n        yearSelect.innerHTML \\x3d \\x27\\x27;\\\\n        for (var i \\x3d 0; i \\x3c allYears.length; i++) \\x7b var opt \\x3d document.createElement(\\x27option\\x27); opt.value \\x3d allYears\\x5bi\\x5d; opt.textContent \\x3d allYears\\x5bi\\x5d + \\x27年\\x27; if (allYears\\x5bi\\x5d \\x3d\\x3d\\x3d selectedYear) opt.selected \\x3d true; yearSelect.appendChild(opt); \\x7d\\\\n    \\x7d\\\\n\\\\n    \\\\n    \\\\n    \\\\n    function searchMember() \\x7b\\\\n        var no \\x3d document.getElementById(\\x27memberNo\\x27).value.trim();\\\\n        var t \\x3d translations\\x5bcurrentLang\\x5d;\\\\n        if (!no) \\x7b showModal(t ? \\x27輸入錯誤\\x27 : \\x27输入错误\\x27, t ? \\x27請輸入會員編號\\x27 : \\x27請輸入會員編號\\x27, \\x27⚠️\\x27, true); return; \\x7d\\\\n        if (isLoading) return;\\\\n        isLoading \\x3d true;\\\\n        var btn \\x3d document.getElementById(\\x27searchBtn\\x27);\\\\n        btn.disabled \\x3d true;\\\\n        btn.textContent \\x3d \\x27⏳ \\x27 + (t ? \\x27查詢中...\\x27 : \\x27查詢中...\\x27);\\\\n        setFormEnabled(false);\\\\n\\\\n        google.script.run\\\\n            .withSuccessHandler(function(result) \\x7b\\\\n                btn.disabled \\x3d false;\\\\n                btn.textContent \\x3d t ? t.labelSearchBtn : \\x27🔍 查詢會員\\x27;\\\\n                isLoading \\x3d false;\\\\n                if (result.success) \\x7b\\\\n                    currentMemberNo \\x3d no;\\\\n                    currentMemberName \\x3d result.name;\\\\n                    document.getElementById(\\x27memberInfo\\x27).style.display \\x3d \\x27block\\x27;\\\\n                    document.getElementById(\\x27memberName\\x27).innerText \\x3d result.name;\\\\n                    document.getElementById(\\x27memberGroup\\x27).innerText \\x3d result.group || \\x27-\\x27;\\\\n                    document.getElementById(\\x27memberStatus\\x27).innerText \\x3d result.status || (t ? \\x27正常\\x27 : \\x27正常\\x27);\\\\n                    if (result.status \\x3d\\x3d\\x3d \\x27停用\\x27) \\x7b\\\\n                        document.getElementById(\\x27warningMsg\\x27).style.display \\x3d \\x27block\\x27;\\\\n                        document.getElementById(\\x27warningMsg\\x27).innerHTML \\x3d \\x27⚠️ \\x27 + (t ? \\x27該會員已停用，無法登記\\x27 : \\x27该会员已停用，无法登记\\x27);\\\\n                        document.getElementById(\\x27historyArea\\x27).style.display \\x3d \\x27none\\x27;\\\\n                        showModal(t ? \\x27會員已停用\\x27 : \\x27会员已停用\\x27, t ? \\x27該會員已被停用，無法進行誦經登記。\\x27 : \\x27该会员已被停用，无法进行诵经登记。\\x27, \\x27🔒\\x27, true);\\\\n                    \\x7d else \\x7b\\\\n                        document.getElementById(\\x27warningMsg\\x27).style.display \\x3d \\x27none\\x27;\\\\n                        setFormEnabled(true);\\\\n                        showModal(t ? \\x27驗證成功\\x27 : \\x27验证成功\\x27, (t ? \\x27會員驗證成功！\\\\\\\\n姓名：\\x27 : \\x27会员验证成功！\\\\\\\\n姓名：\\x27) + result.name + \\x27\\\\\\\\n\\x27 + (t ? \\x27組別：\\x27 : \\x27组别：\\x27) + (result.group || \\x27-\\x27), \\x27✅\\x27, false);\\\\n                        loadFullData(no);\\\\n                    \\x7d\\\\n                \\x7d else \\x7b\\\\n                    currentMemberNo \\x3d null;\\\\n                    document.getElementById(\\x27memberInfo\\x27).style.display \\x3d \\x27none\\x27;\\\\n                    document.getElementById(\\x27historyArea\\x27).style.display \\x3d \\x27none\\x27;\\\\n                    setFormEnabled(false);\\\\n                    showModal(t ? \\x27查無會員\\x27 : \\x27查无会员\\x27, (t ? \\x27查無此會員編號：「\\x27 : \\x27查无此会员编号：「\\x27) + no + \\x27」\\x27, \\x27🔍\\x27, true);\\\\n                \\x7d\\\\n            \\x7d)\\\\n            .withFailureHandler(function(err) \\x7b\\\\n                btn.disabled \\x3d false;\\\\n                btn.textContent \\x3d t ? t.labelSearchBtn : \\x27🔍 查詢會員\\x27;\\\\n                isLoading \\x3d false;\\\\n                showModal(t ? \\x27系統錯誤\\x27 : \\x27系统错误\\x27, (t ? \\x27查詢失敗：\\x27 : \\x27查询失败：\\x27) + err.message, \\x27⚠️\\x27, true);\\\\n            \\x7d)\\\\n            .getMemberByNoForChanting(no);\\\\n    \\x7d\\\\n\\\\n    function loadFullData(memberNo) \\x7b\\\\n        var now \\x3d new Date();\\\\n        var y \\x3d now.getFullYear();\\\\n        var m \\x3d now.getMonth() + 1;\\\\n        currentStatYear \\x3d y;\\\\n        addVisitedYear(y);\\\\n        loadYearHistory(memberNo, y, m);\\\\n    \\x7d\\\\n\\\\n    \\\\n    \\\\n    \\\\n    function loadYearHistory(memberNo, defaultYear, defaultMonth) \\x7b\\\\n        var now \\x3d new Date();\\\\n        var year \\x3d defaultYear || now.getFullYear();\\\\n        var t \\x3d translations\\x5bcurrentLang\\x5d;\\\\n        currentStatYear \\x3d year;\\\\n        addVisitedYear(year);\\\\n        populateStatYearSelect(year);\\\\n\\\\n        var yearTable \\x3d document.getElementById(\\x27yearTableWrapper\\x27);\\\\n        yearTable.innerHTML \\x3d \\x27\\x3cdiv style\\x3d\\\\\\x22text-align:center;padding:16px;\\\\\\x22\\x3e\\x3cspan class\\x3d\\\\\\x22spinner\\\\\\x22\\x3e\\x3c\\\\\\\/span\\x3e \\x27 + (t ? \\x27載入統計中...\\x27 : \\x27载入统计中...\\x27) + \\x27\\x3c\\\\\\\/div\\x3e\\x27;\\\\n\\\\n        google.script.run\\\\n            .withSuccessHandler(function(result) \\x7b\\\\n                if (result.success \\x26\\x26 result.records) \\x7b\\\\n                    document.getElementById(\\x27historyArea\\x27).style.display \\x3d \\x27block\\x27;\\\\n                    var records \\x3d result.records;\\\\n                    var allItems \\x3d result.items || \\x5b\\x5d;\\\\n                    \\\\n                    \\\\n                    var items \\x3d allItems.filter(function(item) \\x7b\\\\n                        return item.status \\x3d\\x3d\\x3d \\x27啟用\\x27;\\\\n                    \\x7d);\\\\n                    \\\\n                    \\\\n                    if (items.length \\x3d\\x3d\\x3d 0) \\x7b\\\\n                        yearTable.innerHTML \\x3d \\x27\\x3cdiv style\\x3d\\\\\\x22text-align:center;padding:16px;\\\\\\x22\\x3e📭 \\x27 + (t ? \\x27目前沒有啟用的品項\\x27 : \\x27目前没有启用的品项\\x27) + \\x27\\x3c\\\\\\\/div\\x3e\\x27;\\\\n                        return;\\\\n                    \\x7d\\\\n                    \\\\n                    \\\\n                    items.sort(function(a, b) \\x7b\\\\n                        var orderA \\x3d (a.sortOrder !\\x3d\\x3d undefined \\x26\\x26 a.sortOrder !\\x3d\\x3d null) ? Number(a.sortOrder) : 999;\\\\n                        var orderB \\x3d (b.sortOrder !\\x3d\\x3d undefined \\x26\\x26 b.sortOrder !\\x3d\\x3d null) ? Number(b.sortOrder) : 999;\\\\n                        return orderA - orderB;\\\\n                    \\x7d);\\\\n                    \\\\n                    var months \\x3d \\x5b\\x271月\\x27, \\x272月\\x27, \\x273月\\x27, \\x274月\\x27, \\x275月\\x27, \\x276月\\x27, \\x277月\\x27, \\x278月\\x27, \\x279月\\x27, \\x2710月\\x27, \\x2711月\\x27, \\x2712月\\x27\\x5d;\\\\n                    var html \\x3d \\x27\\x3ctable class\\x3d\\\\\\x22stats-table\\\\\\x22\\x3e\\x3cthead\\x3e\\x3ctr\\x3e\\x3cth style\\x3d\\\\\\x22width:80px;position:sticky;left:0;z-index:4;background:#A1887F;color:white;\\\\\\x22\\x3e\\x27 + (t ? \\x27品項\\x27 : \\x27品项\\x27) + \\x27\\x3c\\\\\\\/th\\x3e\\x27;\\\\n                    for (var mi \\x3d 0; mi \\x3c months.length; mi++) \\x7b html +\\x3d \\x27\\x3cth style\\x3d\\\\\\x22background:#A1887F;color:white;\\\\\\x22\\x3e\\x27 + months\\x5bmi\\x5d + \\x27\\x3c\\\\\\\/th\\x3e\\x27; \\x7d\\\\n                    html +\\x3d \\x27\\x3cth style\\x3d\\\\\\x22background:#f97316;color:white;width:70px;\\\\\\x22\\x3e\\x27 + (t ? \\x27總計\\x27 : \\x27总计\\x27) + \\x27\\x3c\\\\\\\/th\\x3e\\x3c\\\\\\\/tr\\x3e\\x3c\\\\\\\/thead\\x3e\\x3ctbody\\x3e\\x27;\\\\n                    var grandTotal \\x3d 0;\\\\n                    for (var ii \\x3d 0; ii \\x3c items.length; ii++) \\x7b\\\\n                        var item \\x3d items\\x5bii\\x5d;\\\\n                        var itemTotal \\x3d 0;\\\\n                        html +\\x3d \\x27\\x3ctr\\x3e\\x3ctd style\\x3d\\\\\\x22padding:10px;min-width:120px;text-align:left;font-weight:bold;position:sticky;left:0;z-index:3;background:#fefaf5;\\\\\\x22\\x3e\\x27 + (item.icon || \\x27📿\\x27) + \\x27 \\x27 + item.name + \\x27\\x3c\\\\\\\/td\\x3e\\x27;\\\\n                        for (var mm \\x3d 1; mm \\x3c\\x3d 12; mm++) \\x7b\\\\n                            var amount \\x3d records\\x5bitem.name\\x5d ? (records\\x5bitem.name\\x5d\\x5bmm\\x5d || 0) : 0;\\\\n                            itemTotal +\\x3d amount;\\\\n                            html +\\x3d \\x27\\x3ctd class\\x3d\\\\\\x22\\x27 + (amount \\x3e 0 ? \\x27amount-red\\x27 : \\x27\\x27) + \\x27\\\\\\x22\\x3e\\x27 + (amount \\x3e 0 ? formatNumber(amount) : \\x27-\\x27) + \\x27\\x3c\\\\\\\/td\\x3e\\x27;\\\\n                        \\x7d\\\\n                        html +\\x3d \\x27\\x3ctd class\\x3d\\\\\\x22amount-red\\\\\\x22\\x3e\\x3cstrong\\x3e\\x27 + formatNumber(itemTotal) + \\x27\\x3c\\\\\\\/strong\\x3e\\x3c\\\\\\\/td\\x3e\\x3c\\\\\\\/tr\\x3e\\x27;\\\\n                        grandTotal +\\x3d itemTotal;\\\\n                    \\x7d\\\\n                    html +\\x3d \\x27\\x3ctr style\\x3d\\\\\\x22background:#efebe9;font-weight:bold;\\\\\\x22\\x3e\\x3ctd style\\x3d\\\\\\x22text-align:left;position:sticky;left:0;z-index:3;background:#efebe9;\\\\\\x22\\x3e📊 \\x27 + (t ? \\x27合計\\x27 : \\x27合计\\x27) + \\x27\\x3c\\\\\\\/td\\x3e\\x27;\\\\n                    for (var mm2 \\x3d 1; mm2 \\x3c\\x3d 12; mm2++) \\x7b\\\\n                        var mt \\x3d 0;\\\\n                        for (var ii2 \\x3d 0; ii2 \\x3c items.length; ii2++) \\x7b mt +\\x3d records\\x5bitems\\x5bii2\\x5d.name\\x5d ? (records\\x5bitems\\x5bii2\\x5d.name\\x5d\\x5bmm2\\x5d || 0) : 0; \\x7d\\\\n                        html +\\x3d \\x27\\x3ctd class\\x3d\\\\\\x22amount-red\\\\\\x22\\x3e\\x27 + (mt \\x3e 0 ? formatNumber(mt) : \\x27-\\x27) + \\x27\\x3c\\\\\\\/td\\x3e\\x27;\\\\n                    \\x7d\\\\n                    html +\\x3d \\x27\\x3ctd class\\x3d\\\\\\x22amount-red\\\\\\x22\\x3e\\x3cstrong\\x3e\\x27 + formatNumber(grandTotal) + \\x27\\x3c\\\\\\\/strong\\x3e\\x3c\\\\\\\/td\\x3e\\x3c\\\\\\\/tr\\x3e\\x3c\\\\\\\/tbody\\x3e\\x3c\\\\\\\/table\\x3e\\x27;\\\\n                    yearTable.innerHTML \\x3d html;\\\\n\\\\n                    var yearSelect \\x3d document.getElementById(\\x27yearSelect\\x27);\\\\n                    var monthSelect \\x3d document.getElementById(\\x27monthSelect\\x27);\\\\n                    populateYearSelect(year);\\\\n                    monthSelect.innerHTML \\x3d \\x27\\x27;\\\\n                    for (var mm3 \\x3d 1; mm3 \\x3c\\x3d 12; mm3++) \\x7b\\\\n                        var opt4 \\x3d document.createElement(\\x27option\\x27);\\\\n                        opt4.value \\x3d mm3;\\\\n                        opt4.textContent \\x3d mm3 + \\x27月\\x27;\\\\n                        if (mm3 \\x3d\\x3d\\x3d (defaultMonth || now.getMonth() + 1)) opt4.selected \\x3d true;\\\\n                        monthSelect.appendChild(opt4);\\\\n                    \\x7d\\\\n                    currentDisplayYear \\x3d defaultYear || year;\\\\n                    currentDisplayMonth \\x3d defaultMonth || (now.getMonth() + 1);\\\\n                    loadCalendar(memberNo, currentDisplayYear, currentDisplayMonth);\\\\n                \\x7d else \\x7b\\\\n                    document.getElementById(\\x27historyArea\\x27).style.display \\x3d \\x27none\\x27;\\\\n                \\x7d\\\\n            \\x7d)\\\\n            .withFailureHandler(function(err) \\x7b\\\\n                yearTable.innerHTML \\x3d \\x27\\x3cdiv style\\x3d\\\\\\x22text-align:center;padding:16px;\\\\\\x22\\x3e❌ \\x27 + (t ? \\x27載入失敗\\x27 : \\x27载入失败\\x27) + \\x27\\x3c\\\\\\\/div\\x3e\\x27;\\\\n                showModal(t ? \\x27載入錯誤\\x27 : \\x27载入错误\\x27, (t ? \\x27歷史記錄載入失敗：\\x27 : \\x27历史记录载入失败：\\x27) + err.message, \\x27⚠️\\x27, true);\\\\n            \\x7d)\\\\n            .getMemberChantingHistory(memberNo, year);\\\\n    \\x7d\\\\n\\\\n\\\\n\\\\n    function loadCalendar(memberNo, year, month) \\x7b\\\\n    if (!memberNo) return;\\\\n    var t \\x3d translations\\x5bcurrentLang\\x5d;\\\\n    var container \\x3d document.getElementById(\\x27calendarContainer\\x27);\\\\n    container.innerHTML \\x3d \\x27\\x3cdiv style\\x3d\\\\\\x22text-align:center;padding:16px;\\\\\\x22\\x3e\\x3cspan class\\x3d\\\\\\x22spinner\\\\\\x22\\x3e\\x3c\\\\\\\/span\\x3e \\x27 + (t ? \\x27載入月曆中...\\x27 : \\x27载入月历中...\\x27) + \\x27\\x3c\\\\\\\/div\\x3e\\x27;\\\\n\\\\n    google.script.run\\\\n        .withSuccessHandler(function(result) \\x7b\\\\n            if (result.success \\x26\\x26 result.dailyRecords) \\x7b\\\\n                \\\\n                cachedDailyRecords \\x3d result.dailyRecords;\\\\n                var dailyRecords \\x3d result.dailyRecords;\\\\n                var firstDay \\x3d new Date(year, month - 1, 1).getDay();\\\\n                var daysInMonth \\x3d new Date(year, month, 0).getDate();\\\\n                var today \\x3d new Date().getDate();\\\\n                var thisMonth \\x3d new Date().getMonth() + 1;\\\\n                var thisYear \\x3d new Date().getFullYear();\\\\n                var html \\x3d \\x27\\x3cdiv class\\x3d\\\\\\x22calendar-grid\\\\\\x22\\x3e\\x27;\\\\n                var weekDays \\x3d (t \\x3d\\x3d\\x3d \\x27zh-TW\\x27) ? \\x5b\\x27日\\x27, \\x27一\\x27, \\x27二\\x27, \\x27三\\x27, \\x27四\\x27, \\x27五\\x27, \\x27六\\x27\\x5d : \\x5b\\x27日\\x27, \\x27一\\x27, \\x27二\\x27, \\x27三\\x27, \\x27四\\x27, \\x27五\\x27, \\x27六\\x27\\x5d;\\\\n                for (var wi \\x3d 0; wi \\x3c weekDays.length; wi++) \\x7b \\\\n                    html +\\x3d \\x27\\x3cdiv class\\x3d\\\\\\x22cal-header\\\\\\x22\\x3e\\x27 + weekDays\\x5bwi\\x5d + \\x27\\x3c\\\\\\\/div\\x3e\\x27; \\\\n                \\x7d\\\\n                for (var i \\x3d 0; i \\x3c firstDay; i++) \\x7b \\\\n                    html +\\x3d \\x27\\x3cdiv class\\x3d\\\\\\x22cal-day empty\\\\\\x22\\x3e\\x3c\\\\\\\/div\\x3e\\x27; \\\\n                \\x7d\\\\n                for (var d \\x3d 1; d \\x3c\\x3d daysInMonth; d++) \\x7b\\\\n                    var hasRecord \\x3d dailyRecords\\x5bd\\x5d \\x26\\x26 dailyRecords\\x5bd\\x5d.length \\x3e 0;\\\\n                    var isToday \\x3d (d \\x3d\\x3d\\x3d today \\x26\\x26 month \\x3d\\x3d\\x3d thisMonth \\x26\\x26 year \\x3d\\x3d\\x3d thisYear);\\\\n                    var lunarStr \\x3d getLunarDateString(year, month, d);\\\\n                    var lunarDay \\x3d getLunarDayOnly(year, month, d);\\\\n                    var cls \\x3d \\x27cal-day\\x27;\\\\n                    if (hasRecord) cls +\\x3d \\x27 has-record\\x27;\\\\n                    if (isToday) cls +\\x3d \\x27 today\\x27;\\\\n                    if (lunarDay \\x3e 0) \\x7b\\\\n                        if (lunarDay \\x3d\\x3d\\x3d 1) cls +\\x3d \\x27 lunar-1\\x27;\\\\n                        if (lunarDay \\x3d\\x3d\\x3d 15) cls +\\x3d \\x27 lunar-15\\x27;\\\\n                    \\x7d\\\\n                    \\\\n                    var badgeHtml \\x3d \\x27\\x27;\\\\n                    if (hasRecord) \\x7b\\\\n                        var records \\x3d dailyRecords\\x5bd\\x5d;\\\\n                        var uniqueItems \\x3d \\x7b\\x7d;\\\\n                        for (var ri \\x3d 0; ri \\x3c records.length; ri++) \\x7b\\\\n                            var r \\x3d records\\x5bri\\x5d;\\\\n                            var itemName \\x3d r.item || \\x27\\x27;\\\\n                            var icon \\x3d r.icon || \\x27📿\\x27;\\\\n                            if (itemName \\x26\\x26 !uniqueItems\\x5bitemName\\x5d) \\x7b\\\\n                                uniqueItems\\x5bitemName\\x5d \\x3d icon;\\\\n                            \\x7d\\\\n                        \\x7d\\\\n                        var uniqueList \\x3d \\x5b\\x5d;\\\\n                        for (var key in uniqueItems) \\x7b\\\\n                            uniqueList.push(\\x7b name: key, icon: uniqueItems\\x5bkey\\x5d \\x7d);\\\\n                        \\x7d\\\\n                        var iconsHtml \\x3d \\x27\\x27;\\\\n                        var maxShow \\x3d 6;\\\\n                        var showCount \\x3d Math.min(uniqueList.length, maxShow);\\\\n                        for (var si \\x3d 0; si \\x3c showCount; si++) \\x7b\\\\n                            iconsHtml +\\x3d \\x27\\x3cspan\\x3e\\x27 + uniqueList\\x5bsi\\x5d.icon + \\x27\\x3c\\\\\\\/span\\x3e\\x27;\\\\n                        \\x7d\\\\n                        if (uniqueList.length \\x3e maxShow) \\x7b\\\\n                            iconsHtml +\\x3d \\x27\\x3cspan class\\x3d\\\\\\x22icon-more\\\\\\x22\\x3e+\\x27 + (uniqueList.length - maxShow) + \\x27\\x3c\\\\\\\/span\\x3e\\x27;\\\\n                        \\x7d\\\\n                        badgeHtml \\x3d \\x27\\x3cdiv class\\x3d\\\\\\x22record-icons\\\\\\x22\\x3e\\x27 + iconsHtml + \\x27\\x3c\\\\\\\/div\\x3e\\x27;\\\\n                    \\x7d\\\\n                    \\\\n                    html +\\x3d \\x27\\x3cdiv class\\x3d\\\\\\x22\\x27 + cls + \\x27\\\\\\x22 data-date\\x3d\\\\\\x22\\x27 + year + \\x27-\\x27 + String(month).padStart(2, \\x270\\x27) + \\x27-\\x27 + String(d).padStart(2, \\x270\\x27) + \\x27\\\\\\x22 data-has\\x3d\\\\\\x22\\x27 + (hasRecord ? \\x27true\\x27 : \\x27false\\x27) + \\x27\\\\\\x22 onclick\\x3d\\\\\\x22showDayDetail(\\\\\\\\\\x27\\x27 + memberNo + \\x27\\\\\\\\\\x27,\\\\\\\\\\x27\\x27 + year + \\x27\\\\\\\\\\x27,\\\\\\\\\\x27\\x27 + month + \\x27\\\\\\\\\\x27,\\\\\\\\\\x27\\x27 + d + \\x27\\\\\\\\\\x27)\\\\\\x22\\x3e\\x27;\\\\n                    html +\\x3d \\x27\\x3cdiv class\\x3d\\\\\\x22date-num\\\\\\x22\\x3e\\x27 + d + \\x27\\x3c\\\\\\\/div\\x3e\\x27;\\\\n                    html +\\x3d \\x27\\x3cdiv class\\x3d\\\\\\x22lunar-date\\\\\\x22\\x3e\\x27 + lunarStr + \\x27\\x3c\\\\\\\/div\\x3e\\x27;\\\\n                    html +\\x3d badgeHtml;\\\\n                    html +\\x3d \\x27\\x3c\\\\\\\/div\\x3e\\x27;\\\\n                \\x7d\\\\n                html +\\x3d \\x27\\x3c\\\\\\\/div\\x3e\\x27;\\\\n                container.innerHTML \\x3d html;\\\\n            \\x7d else \\x7b\\\\n                container.innerHTML \\x3d \\x27\\x3cdiv style\\x3d\\\\\\x22text-align:center;padding:16px;\\\\\\x22\\x3e📭 \\x27 + (t ? \\x27本月尚無誦經記錄\\x27 : \\x27本月尚无诵经记录\\x27) + \\x27\\x3c\\\\\\\/div\\x3e\\x27;\\\\n            \\x7d\\\\n        \\x7d)\\\\n        .withFailureHandler(function(err) \\x7b\\\\n            container.innerHTML \\x3d \\x27\\x3cdiv style\\x3d\\\\\\x22text-align:center;padding:16px;\\\\\\x22\\x3e❌ \\x27 + (t ? \\x27載入失敗\\x27 : \\x27载入失败\\x27) + \\x27\\x3c\\\\\\\/div\\x3e\\x27;\\\\n        \\x7d)\\\\n        .getMemberChantingDailyHistory(memberNo, year, month);\\\\n\\x7d\\\\n\\\\n\\\\n\\\\n    function showDayDetail(memberNo, year, month, day) \\x7b\\\\n    var t \\x3d translations\\x5bcurrentLang\\x5d;\\\\n    var dayData \\x3d cachedDailyRecords\\x5bday\\x5d;\\\\n    if (!dayData || dayData.length \\x3d\\x3d\\x3d 0) \\x7b\\\\n        showModal(t ? \\x27無記錄\\x27 : \\x27无记录\\x27, t ? \\x27該日期無誦經記錄\\x27 : \\x27该日期无诵经记录\\x27, \\x27📭\\x27, false);\\\\n        return;\\\\n    \\x7d\\\\n    if (!Array.isArray(dayData)) dayData \\x3d \\x5bdayData\\x5d;\\\\n    var modal \\x3d document.createElement(\\x27div\\x27);\\\\n    modal.className \\x3d \\x27day-detail-modal\\x27;\\\\n    var lunarStr \\x3d getLunarDateString(year, month, day);\\\\n    var html \\x3d \\x27\\x3cdiv class\\x3d\\\\\\x22modal-card\\\\\\x22\\x3e\\x3ch3\\x3e📅 \\x27 + year + \\x27\\\/\\x27 + String(month).padStart(2, \\x270\\x27) + \\x27\\\/\\x27 + String(day).padStart(2, \\x270\\x27) + \\x27 (\\x27 + lunarStr + \\x27) \\x27 + (t ? \\x27誦清明細\\x27 : \\x27诵清明细\\x27) + \\x27\\x3c\\\\\\\/h3\\x3e\\x27;\\\\n    var total \\x3d 0;\\\\n    for (var ri2 \\x3d 0; ri2 \\x3c dayData.length; ri2++) \\x7b\\\\n        var r2 \\x3d dayData\\x5bri2\\x5d;\\\\n        total +\\x3d parseInt(r2.count) || 0;\\\\n        var itemDisplay \\x3d (r2.icon || \\x27📿\\x27) + \\x27 \\x27 + r2.item;\\\\n        html +\\x3d \\x27\\x3cdiv class\\x3d\\\\\\x22record-item\\\\\\x22\\x3e\\x3cdiv class\\x3d\\\\\\x22item-row\\\\\\x22\\x3e\\x3cspan class\\x3d\\\\\\x22item-name\\\\\\x22\\x3e\\x27 + itemDisplay + \\x27\\x3c\\\\\\\/span\\x3e\\x3cspan class\\x3d\\\\\\x22count\\\\\\x22\\x3e\\x27 + formatNumber(r2.count) + \\x27 \\x27 + (t ? \\x27遍\\x27 : \\x27遍\\x27) + \\x27\\x3c\\\\\\\/span\\x3e\\x27;\\\\n        if (r2.time) \\x7b var timeStr \\x3d r2.time.split(\\x27 \\x27)\\x5b1\\x5d || r2.time; html +\\x3d \\x27\\x3cspan class\\x3d\\\\\\x22time-tag\\\\\\x22\\x3e🕘 \\x27 + timeStr + \\x27\\x3c\\\\\\\/span\\x3e\\x27; \\x7d\\\\n        html +\\x3d \\x27\\x3c\\\\\\\/div\\x3e\\x27;\\\\n        var remarkText \\x3d String(r2.remark || \\x27\\x27);\\\\n        if (remarkText.trim()) \\x7b\\\\n            html +\\x3d \\x27\\x3cspan class\\x3d\\\\\\x22remark-text\\\\\\x22\\x3e📝 \\x27 + remarkText + \\x27\\x3c\\\\\\\/span\\x3e\\x27;\\\\n        \\x7d\\\\n        html +\\x3d \\x27\\x3c\\\\\\\/div\\x3e\\x27;\\\\n    \\x7d\\\\n    html +\\x3d \\x27\\x3cdiv style\\x3d\\\\\\x22margin-top:8px;font-weight:700;color:#b85c00;\\\\\\x22\\x3e\\x27 + (t ? \\x27本日共\\x27 : \\x27本日共\\x27) + \\x27 \\x27 + formatNumber(total) + \\x27 \\x27 + (t ? \\x27遍\\x27 : \\x27遍\\x27) + \\x27  (\\x27 + dayData.length + (t ? \\x27筆\\x27 : \\x27笔\\x27) + \\x27)\\x3c\\\\\\\/div\\x3e\\x27;\\\\n    html +\\x3d \\x27\\x3cbutton class\\x3d\\\\\\x22close-btn\\\\\\x22 onclick\\x3d\\\\\\x22this.closest(\\\\\\\\\\x27.day-detail-modal\\\\\\\\\\x27).remove()\\\\\\x22\\x3e\\x27 + (t ? \\x27關閉\\x27 : \\x27关闭\\x27) + \\x27\\x3c\\\\\\\/button\\x3e\\x3c\\\\\\\/div\\x3e\\x27;\\\\n    modal.innerHTML \\x3d html;\\\\n    document.body.appendChild(modal);\\\\n    modal.onclick \\x3d function(e) \\x7b if (e.target \\x3d\\x3d\\x3d modal) modal.remove(); \\x7d;\\\\n\\x7d\\\\n\\\\n    \\\\n    \\\\n    \\\\n    function changeDate() \\x7b\\\\n        var t \\x3d translations\\x5bcurrentLang\\x5d;\\\\n        if (!currentMemberNo) \\x7b showModal(t ? \\x27請先查詢會員\\x27 : \\x27请先查询会员\\x27, t ? \\x27請先查詢會員\\x27 : \\x27请先查询会员\\x27, \\x27🔍\\x27, true); return; \\x7d\\\\n        var year \\x3d parseInt(document.getElementById(\\x27yearSelect\\x27).value);\\\\n        var month \\x3d parseInt(document.getElementById(\\x27monthSelect\\x27).value);\\\\n        currentDisplayYear \\x3d year;\\\\n        currentDisplayMonth \\x3d month;\\\\n        addVisitedYear(year);\\\\n        populateStatYearSelect(year);\\\\n        populateYearSelect(year);\\\\n        loadCalendar(currentMemberNo, year, month);\\\\n        loadYearHistory(currentMemberNo, year, month);\\\\n    \\x7d\\\\n\\\\n    function changeStatYear() \\x7b\\\\n        var t \\x3d translations\\x5bcurrentLang\\x5d;\\\\n        if (!currentMemberNo) \\x7b showModal(t ? \\x27請先查詢會員\\x27 : \\x27请先查询会员\\x27, t ? \\x27請先查詢會員\\x27 : \\x27请先查询会员\\x27, \\x27🔍\\x27, true); return; \\x7d\\\\n        var year \\x3d parseInt(document.getElementById(\\x27statYearSelect\\x27).value);\\\\n        if (year \\x26\\x26 !isNaN(year)) \\x7b\\\\n            currentStatYear \\x3d year;\\\\n            addVisitedYear(year);\\\\n            populateYearSelect(year);\\\\n            populateStatYearSelect(year);\\\\n            loadYearHistory(currentMemberNo, year, currentDisplayMonth);\\\\n            if (currentDisplayYear !\\x3d\\x3d year) \\x7b\\\\n                currentDisplayYear \\x3d year;\\\\n                loadCalendar(currentMemberNo, year, currentDisplayMonth || new Date().getMonth() + 1);\\\\n            \\x7d\\\\n        \\x7d\\\\n    \\x7d\\\\n\\\\n    \\\\n    \\\\n    \\\\n    function submitChanting() \\x7b\\\\n        var t \\x3d translations\\x5bcurrentLang\\x5d;\\\\n        if (!currentMemberNo) \\x7b showModal(t ? \\x27尚未查詢\\x27 : \\x27尚未查询\\x27, t ? \\x27請先查詢會員\\x27 : \\x27请先查询会员\\x27, \\x27🔍\\x27, true); return; \\x7d\\\\n        var item \\x3d document.getElementById(\\x27itemSelect\\x27).value;\\\\n        if (!item) \\x7b showModal(t ? \\x27品項未選擇\\x27 : \\x27品项未选择\\x27, t ? \\x27請選擇品項\\x27 : \\x27请选择品项\\x27, \\x27📿\\x27, true); return; \\x7d\\\\n        var count \\x3d parseInt(document.getElementById(\\x27countInput\\x27).value);\\\\n        if (isNaN(count) || count \\x3c 0) \\x7b showModal(t ? \\x27遍數無效\\x27 : \\x27遍数无效\\x27, t ? \\x27遍數不能為負數\\x27 : \\x27遍数不能为负数\\x27, \\x27🔢\\x27, true); return; \\x7d\\\\n        if (count \\x3e 9999999) \\x7b showModal(t ? \\x27遍數過大\\x27 : \\x27遍数过大\\x27, t ? \\x27上限 9,999,999 遍\\x27 : \\x27上限 9,999,999 遍\\x27, \\x27⚠️\\x27, true); return; \\x7d\\\\n        var remark \\x3d document.getElementById(\\x27remarkInput\\x27).value;\\\\n        var btn \\x3d document.getElementById(\\x27submitBtn\\x27);\\\\n        btn.disabled \\x3d true;\\\\n        btn.textContent \\x3d \\x27⏳ \\x27 + (t ? \\x27登記中...\\x27 : \\x27登记中...\\x27);\\\\n\\\\n        google.script.run\\\\n            .withSuccessHandler(function(result) \\x7b\\\\n                btn.disabled \\x3d false;\\\\n                btn.textContent \\x3d t ? t.labelSubmitBtn : \\x27📤 確認登記\\x27;\\\\n                if (result.success) \\x7b\\\\n                    showSuccessModal(item, count, remark);\\\\n                    document.getElementById(\\x27countInput\\x27).value \\x3d \\x27\\x27;\\\\n                    document.getElementById(\\x27remarkInput\\x27).value \\x3d \\x27\\x27;\\\\n                    if (currentMemberNo) loadFullData(currentMemberNo);\\\\n                \\x7d else \\x7b\\\\n                    showModal(t ? \\x27登記失敗\\x27 : \\x27登记失败\\x27, result.message, \\x27❌\\x27, true);\\\\n                \\x7d\\\\n            \\x7d)\\\\n            .withFailureHandler(function(err) \\x7b\\\\n                btn.disabled \\x3d false;\\\\n                btn.textContent \\x3d t ? t.labelSubmitBtn : \\x27📤 確認登記\\x27;\\\\n                showModal(t ? \\x27系統錯誤\\x27 : \\x27系统错误\\x27, err.message, \\x27⚠️\\x27, true);\\\\n            \\x7d)\\\\n            .addChantingRecord(\\x7b\\\\n                memberNo: currentMemberNo,\\\\n                memberName: currentMemberName,\\\\n                item: item,\\\\n                count: count,\\\\n                remark: remark\\\\n            \\x7d);\\\\n    \\x7d\\\\n\\\\n    \\\\n    \\\\n    \\\\n    document.getElementById(\\x27searchBtn\\x27).onclick \\x3d searchMember;\\\\n    document.getElementById(\\x27submitBtn\\x27).onclick \\x3d submitChanting;\\\\n    document.getElementById(\\x27queryDailyBtn\\x27).onclick \\x3d changeDate;\\\\n    document.getElementById(\\x27statYearBtn\\x27).onclick \\x3d changeStatYear;\\\\n    document.getElementById(\\x27memberNo\\x27).addEventListener(\\x27keypress\\x27, function(e) \\x7b if (e.key \\x3d\\x3d\\x3d \\x27Enter\\x27) searchMember(); \\x7d);\\\\n\\\\n    window.addEventListener(\\x27load\\x27, function() \\x7b\\\\n        initLanguage();\\\\n        loadItems();\\\\n        setFormEnabled(false);\\\\n        var now \\x3d new Date();\\\\n        var y \\x3d now.getFullYear();\\\\n        visitedYears \\x3d \\x5by, y+1, y+2\\x5d;\\\\n        populateYearSelect(y);\\\\n        populateStatYearSelect(y);\\\\n    \\x7d);\\\\n\\x3c\\\\\\\/script\\x3e\\\\n\\x3c\\\\\\\/body\\x3e\\\\n\\x3c\\\\\\\/html\\x3e\\x22,\\x22ncc\\x22:\\x22\\x7b\\\\\\x22awhs\\\\\\x22:true\\x7d\\x22\\x7d\", \"\", undefined, true , false  , \"false\", \"https:\\\/\\\/n-bcxis3zudmmjhvr47aoecrjjqeuwxchjnykofga-0lu-script.googleusercontent.com\", \"https:\\\/\\\/drive.google.com\\\/abuse?id\\x3dAAMpA0RUKQfh9NfoWeKby5axBlnE9RT7T0FJGmH64sq9dJQjr4HmXY6tFghW-ss_5z38IWqaPQ1m3GCTuE65y8F35Gyr_0TIrLg5MqH4%3A0\\x26docurl\\x3dhttps%3A%2F%2Fscript.google.com%2Fmacros%2Fs%2FAKfycbxhfVsc-Rh-5ZvUlHtJXd-llKpQ9DYRJl8Sk0jDRwTSxoYop2mwRDlRa_xtvfyLs45m%2Fexec\");}\nel.src = 'https:\\\/\\\/n-bcxis3zudmmjhvr47aoecrjjqeuwxchjnykofga-0lu-script.googleusercontent.com\\\/userCodeAppPanel';\n}());\n<\/script>\n<\/body>\n<\/html>\n"}