mcd-mcp-app 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  本应用通过 MCP 协议向 AI 助手暴露了以下能力,并为每个功能提供了配套的 UI 界面:
12
12
 
13
- - **📅 活动日历 (`campaign-calender`)**
13
+ - **📅 活动日历 (`campaign-calendar`)**
14
14
  - 查询当月营销活动(进行中、往期、未来)。
15
15
  - **UI 展示**: 交互式日历视图,清晰展示每日活动详情。
16
16
  <div style="display: flex; gap: 10px;">
package/dist/index.html CHANGED
@@ -258,7 +258,7 @@ container holding the app. Specify either width or maxWidth, and either height o
258
258
  `+l.map(Xg).join(`
259
259
  `):" "+Xg(l[0]):"as no adapter specified";throw new ce("There is no suitable adapter to dispatch the request "+d,"ERR_NOT_SUPPORT")}return n}const tb={getAdapter:YP,adapters:Jp};function nd(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new da(null,e)}function Qg(e){return nd(e),e.headers=Bt.from(e.headers),e.data=td.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),tb.getAdapter(e.adapter||ca.adapter,e)(e).then(function(a){return nd(e),a.data=td.call(e,e.transformResponse,a),a.headers=Bt.from(a.headers),a},function(a){return Gx(a)||(nd(e),a&&a.response&&(a.response.data=td.call(e,e.transformResponse,a.response),a.response.headers=Bt.from(a.response.headers))),Promise.reject(a)})}const nb="1.13.4",Yu={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Yu[e]=function(a){return typeof a===e||"a"+(t<1?"n ":" ")+e}});const Yg={};Yu.transitional=function(t,i,a){function n(s,l){return"[Axios v"+nb+"] Transitional option '"+s+"'"+l+(a?". "+a:"")}return(s,l,d)=>{if(t===!1)throw new ce(n(l," has been removed"+(i?" in "+i:"")),ce.ERR_DEPRECATED);return i&&!Yg[l]&&(Yg[l]=!0,console.warn(n(l," has been deprecated since v"+i+" and will be removed in the near future"))),t?t(s,l,d):!0}};Yu.spelling=function(t){return(i,a)=>(console.warn(`${a} is likely a misspelling of ${t}`),!0)};function eC(e,t,i){if(typeof e!="object")throw new ce("options must be an object",ce.ERR_BAD_OPTION_VALUE);const a=Object.keys(e);let n=a.length;for(;n-- >0;){const s=a[n],l=t[s];if(l){const d=e[s],h=d===void 0||l(d,s,e);if(h!==!0)throw new ce("option "+s+" must be "+h,ce.ERR_BAD_OPTION_VALUE);continue}if(i!==!0)throw new ce("Unknown option "+s,ce.ERR_BAD_OPTION)}}const Us={assertOptions:eC,validators:Yu},jn=Us.validators;let Cr=class{constructor(t){this.defaults=t||{},this.interceptors={request:new Mg,response:new Mg}}async request(t,i){try{return await this._request(t,i)}catch(a){if(a instanceof Error){let n={};Error.captureStackTrace?Error.captureStackTrace(n):n=new Error;const s=n.stack?n.stack.replace(/^.+\n/,""):"";try{a.stack?s&&!String(a.stack).endsWith(s.replace(/^.+\n.+\n/,""))&&(a.stack+=`
260
260
  `+s):a.stack=s}catch{}}throw a}}_request(t,i){typeof t=="string"?(i=i||{},i.url=t):i=t||{},i=Zr(this.defaults,i);const{transitional:a,paramsSerializer:n,headers:s}=i;a!==void 0&&Us.assertOptions(a,{silentJSONParsing:jn.transitional(jn.boolean),forcedJSONParsing:jn.transitional(jn.boolean),clarifyTimeoutError:jn.transitional(jn.boolean)},!1),n!=null&&(O.isFunction(n)?i.paramsSerializer={serialize:n}:Us.assertOptions(n,{encode:jn.function,serialize:jn.function},!0)),i.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?i.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:i.allowAbsoluteUrls=!0),Us.assertOptions(i,{baseUrl:jn.spelling("baseURL"),withXsrfToken:jn.spelling("withXSRFToken")},!0),i.method=(i.method||this.defaults.method||"get").toLowerCase();let l=s&&O.merge(s.common,s[i.method]);s&&O.forEach(["delete","get","head","post","put","patch","common"],z=>{delete s[z]}),i.headers=Bt.concat(l,s);const d=[];let h=!0;this.interceptors.request.forEach(function(D){typeof D.runWhen=="function"&&D.runWhen(i)===!1||(h=h&&D.synchronous,d.unshift(D.fulfilled,D.rejected))});const m=[];this.interceptors.response.forEach(function(D){m.push(D.fulfilled,D.rejected)});let g,y=0,k;if(!h){const z=[Qg.bind(this),void 0];for(z.unshift(...d),z.push(...m),k=z.length,g=Promise.resolve(i);y<k;)g=g.then(z[y++],z[y++]);return g}k=d.length;let T=i;for(;y<k;){const z=d[y++],D=d[y++];try{T=z(T)}catch(U){D.call(this,U);break}}try{g=Qg.call(this,T)}catch(z){return Promise.reject(z)}for(y=0,k=m.length;y<k;)g=g.then(m[y++],m[y++]);return g}getUri(t){t=Zr(this.defaults,t);const i=Qx(t.baseURL,t.url,t.allowAbsoluteUrls);return Hx(i,t.params,t.paramsSerializer)}};O.forEach(["delete","get","head","options"],function(t){Cr.prototype[t]=function(i,a){return this.request(Zr(a||{},{method:t,url:i,data:(a||{}).data}))}});O.forEach(["post","put","patch"],function(t){function i(a){return function(s,l,d){return this.request(Zr(d||{},{method:t,headers:a?{"Content-Type":"multipart/form-data"}:{},url:s,data:l}))}}Cr.prototype[t]=i(),Cr.prototype[t+"Form"]=i(!0)});let tC=class rb{constructor(t){if(typeof t!="function")throw new TypeError("executor must be a function.");let i;this.promise=new Promise(function(s){i=s});const a=this;this.promise.then(n=>{if(!a._listeners)return;let s=a._listeners.length;for(;s-- >0;)a._listeners[s](n);a._listeners=null}),this.promise.then=n=>{let s;const l=new Promise(d=>{a.subscribe(d),s=d}).then(n);return l.cancel=function(){a.unsubscribe(s)},l},t(function(s,l,d){a.reason||(a.reason=new da(s,l,d),i(a.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const i=this._listeners.indexOf(t);i!==-1&&this._listeners.splice(i,1)}toAbortSignal(){const t=new AbortController,i=a=>{t.abort(a)};return this.subscribe(i),t.signal.unsubscribe=()=>this.unsubscribe(i),t.signal}static source(){let t;return{token:new rb(function(n){t=n}),cancel:t}}};function nC(e){return function(i){return e.apply(null,i)}}function rC(e){return O.isObject(e)&&e.isAxiosError===!0}const hd={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(hd).forEach(([e,t])=>{hd[t]=e});function ib(e){const t=new Cr(e),i=Rx(Cr.prototype.request,t);return O.extend(i,Cr.prototype,t,{allOwnKeys:!0}),O.extend(i,t,null,{allOwnKeys:!0}),i.create=function(n){return ib(Zr(e,n))},i}const ut=ib(ca);ut.Axios=Cr;ut.CanceledError=da;ut.CancelToken=tC;ut.isCancel=Gx;ut.VERSION=nb;ut.toFormData=Qu;ut.AxiosError=ce;ut.Cancel=ut.CanceledError;ut.all=function(t){return Promise.all(t)};ut.spread=nC;ut.isAxiosError=rC;ut.mergeConfig=Zr;ut.AxiosHeaders=Bt;ut.formToJSON=e=>Kx(O.isHTMLForm(e)?new FormData(e):e);ut.getAdapter=tb.getAdapter;ut.HttpStatusCode=hd;ut.default=ut;const{Axios:$C,AxiosError:kC,CanceledError:wC,isCancel:xC,CancelToken:bC,VERSION:SC,all:IC,Cancel:zC,isAxiosError:NC,spread:EC,toFormData:jC,AxiosHeaders:TC,HttpStatusCode:OC,formToJSON:PC,getAdapter:CC,mergeConfig:UC}=ut;function iC(e){const t=[],i=e.split(/####\s+/).slice(1);for(const a of i){const n=a.indexOf(`
261
- `),s=a.substring(0,n).trim(),[l,...d]=s.split(" "),h=d.join(" ");let m="future";h.includes("往期")?m="past":(h.includes("今日")||h.includes("进行中"))&&(m="ongoing");const g=a.split(/-\s+\*\*活动标题\*\*/).slice(1);for(const y of g){let k="";const T=y.match(/^:(.*?)(?:\\|\n)/);T&&(k=T[1].trim());let z="";const D=y.match(/\*\*活动内容介绍\*\*:([\s\S]*?)(?=\*\*活动图片介绍\*\*)/);D&&(z=D[1].trim(),z.endsWith("\\")&&(z=z.slice(0,-1).trim()));let U="";const ue=y.match(/<img src="\s*([^"]+)\s*"/);ue&&(U=ue[1].trim()),t.push({id:`enevt-${Date.now()}`,date:l,title:k,description:z,status:m,imageUrl:U||void 0})}}return t}function oC(e){const t=[],i=e.split(/-\s+优惠券标题[::]\s*/);for(let a=1;a<i.length;a++){const n=i[a].trim();if(!n)continue;let s="Unknown Coupon";const l=n.indexOf("状态:");if(l>0)s=n.substring(0,l).trim();else{const T=n.indexOf("状态:");T>0&&(s=n.substring(0,T).trim())}let d="unclaimed";const h=n.match(/状态[::]\s*(.*?)(?:\s+优惠券图片[::]|\\|\n|$)/);if(h){const T=h[1].trim();d={已领取:"claimed",未领取:"unclaimed",不可领取:"unavailable"}[T]||"unclaimed"}let m="";const g=n.match(/<img[^>]+src\s*=\s*["']([^"']+)["']/i);g&&(m=g[1].trim());let y;const k=s.match(/(\d+(?:\.\d+)?)\s*元/);k&&(y=parseFloat(k[1])),t.push({id:`coupon-${Date.now()}-${a}`,title:s,imageUrl:m,status:d,...y!==void 0&&{discountPrice:y}})}return t}function aC(e){return e.split(/(?=##\s)/).filter(a=>a.trim().startsWith("##")).map((a,n)=>{const s=a.match(/##\s*(?:\*\*)?\s*(.+?)(?:\n|$)/),l=s?s[1].replace(/\*\*/g,"").trim():"",d=a.match(/[¥¥]\s*(\d+(?:\.\d+)?)/),h=d?`¥${d[1]}`:"",m=a.match(/(?:^|\n)\s*(?:-\s+)?(?:\*\*)?\s*(?:有效期|使用期限)\s*(?:\*\*)?\s*[::]\s*(\d{4}-\d{2}-\d{2})\s*(\d{2}:\d{2})[-~]\s*(\d{4}-\d{2}-\d{2})\s*(\d{2}:\d{2})/);let g="",y="";m&&(g=`${m[1]} ${m[2]}`,y=`${m[3]} ${m[4]}`);const k=a.match(/(?:^|\n)\s*(?:-\s+)?(?:\*\*)?\s*领取时间\s*(?:\*\*)?\s*[::]\s*(.+?)(?:\n|$)/),T=k?k[1].trim():"",z=a.match(/(?:^|\n)\s*(?:-\s+)?(?:\*\*)?\s*标签\s*(?:\*\*)?\s*[::]\s*(.+?)(?:\n|$)/),D=z?z[1].split(/[,,、]\s*/).filter(Boolean):[],U=a.match(/<img[^>]+src\s*=\s*["']([^"']+)["']/i),ue=U?U[1].trim():"";return{id:`myCoupon-${Date.now()}-${n}`,title:l,price:h,validStart:g,validEnd:y,receivedAt:T,tags:D,imageUrl:ue}})}function sC(e){const t=e.match(/\*\*总计\*\*[::]\s*(\d+)/),i=e.match(/\*\*成功\*\*[::]\s*(\d+)/),a=e.match(/\*\*失败\*\*[::]\s*(\d+)/),n=t?parseInt(t[1],10):0,s=i?parseInt(i[1],10):0,l=a?parseInt(a[1],10):0,d=[],h=e.split(/\n\s*- \*\*/).slice(1);for(const m of h){const g=m.match(/^(.+?)\*\*/),y=g?g[1].trim():"",k=m.match(/couponId[::]\s*([A-Z0-9]+)/i),T=k?k[1]:"",z=m.match(/couponCode[::]\s*([A-Z0-9]+)/i),D=z?z[1]:"",U=m.match(/<img[^>]+src=["']([^"']+)["']/),ue=U?U[1].trim():"";y&&T&&d.push({title:y,couponId:T,couponCode:D,imageUrl:ue})}return{status:s>0?"success":"failed",total:n,success:s,failed:l,coupons:d}}var uC={};const lC="https://mcp.mcd.cn";class cC{axiosInstance;tokenProvider;constructor(){this.axiosInstance=ut.create({baseURL:lC,headers:{"Content-Type":"application/json"}})}setTokenProvider(t){this.tokenProvider=t}async callTool(t,i={}){const a={jsonrpc:"2.0",id:Date.now(),method:"tools/call",params:{name:t,arguments:i}};let n=this.tokenProvider?.()||uC.Authorization;if(!n)throw new Error("请先设置 MCP Token");n.startsWith("Bearer ")||(n=`Bearer ${n}`);try{const s=await this.axiosInstance.post("",a,{headers:{Authorization:n}});if(s.data.error)throw new Error(s.data.error.message||"请求失败");return s.data.result?s.data.result:s.data}catch(s){throw s.code==="ERR_NETWORK"||s.message==="Network Error"?(console.warn("Network error, falling back to mock implementation for demo purposes."),new Error("网络连接失败,请检查网络连接")):s.response?s.response.status===429?new Error("请求频率过高,请稍后再试(每分钟最多 600 次请求)"):s.response.status===401?new Error("Token 无效或已过期,请重新设置"):s.response.status===403?new Error("Token 权限不足"):s.response.status===404?new Error("API 端点不存在,请检查 MCP Server 地址是否正确"):s.response.status===500?new Error("服务器内部错误,请稍后重试"):new Error(`请求失败 (${s.response.status}): ${s.response.data?.message||s.response.statusText||"未知错误"}`):s.message?new Error(s.message):new Error("网络请求失败,请检查网络连接和 MCP Server 地址")}}async getCampaignCalendar(t){const i=await this.callTool("campaign-calender",{specifiedDate:t});if(i&&i.content&&Array.isArray(i.content)&&i.content[0]?.text){const a=i.content[0].text;if(typeof a=="string"&&a.includes("### 活动列表"))return iC(a)}return i}async getAvailableCoupons(){const t=await this.callTool("available-coupons",{});if(t&&t.content&&Array.isArray(t.content)&&t.content[0]?.text){const i=t.content[0].text;if(typeof i=="string"&&i.includes("优惠券列表"))return oC(i)}return t}async autoBindCoupons(){const t=await this.callTool("auto-bind-coupons",{});if(t&&t.content&&Array.isArray(t.content)&&t.content[0]?.text){const i=t.content[0].text;if(typeof i=="string"&&i.includes("优惠券列表"))return sC(i);if(typeof i=="string"&&i.includes("领券失败"))return{status:"failed",total:0,success:0,failed:0,coupons:[]}}return t}async getMyCoupons(){const t=await this.callTool("my-coupons",{});if(t&&t.content&&Array.isArray(t.content)&&t.content[0]?.text){const i=t.content[0].text;if(typeof i=="string"&&i.includes("# 您的优惠券列表"))return aC(i)}return t}}const dC=new cC,fC=({couponsData:e})=>{const[t,i]=Fe.useState(e),[a,n]=Fe.useState(!1),[s,l]=Fe.useState(null),d=t.filter(g=>g.status==="unclaimed").length,h=d===0,m=async()=>{if(!a){n(!0),l(null);try{(await dC.autoBindCoupons()).status==="success"?i(y=>y.map(k=>({...k,status:"claimed"}))):(l("领券失败,请稍后重试"),setTimeout(()=>l(null),3e3))}catch(g){console.error("Unexpected error:",g),l("发生未知错误,请检查网络")}finally{n(!1)}}};return x.jsxs("div",{className:"h-200 w-full bg-[#0078D4] pb-28 overflow-auto relative",children:[s&&x.jsx("div",{className:"fixed top-4 left-4 right-4 z-100 animate-bounce-in",children:x.jsxs("div",{className:"bg-red-50 border border-red-200 text-red-800 px-4 py-3 rounded-xl shadow-lg flex items-start gap-3",children:[x.jsx(Cx,{className:"w-5 h-5 text-red-600 shrink-0 mt-0.5"}),x.jsx("div",{className:"flex-1 text-sm font-medium",children:s}),x.jsx("button",{onClick:()=>l(null),className:"text-red-400 hover:text-red-600 transition-colors cursor-pointer",children:x.jsx(Mp,{className:"w-5 h-5"})})]})}),x.jsx("div",{className:"bg-[#0078D4] pt-6 pb-4 px-4",children:x.jsxs("div",{className:"w-full mx-auto",children:[x.jsx("div",{className:"flex items-baseline gap-3",children:x.jsx("h2",{className:"text-5xl font-black text-[#FFC72C] italic drop-shadow-md",children:"麦麦省"})}),x.jsxs("p",{className:"text-white/80 text-sm font-bold mt-2 flex items-center gap-2",children:[x.jsx("span",{className:"bg-linear-to-r from-red-500 to-red-600 text-white px-2 py-0.5 rounded text-xs border border-red-400 shadow-sm",children:"领券马上省"}),x.jsx("span",{children:"限时限领 先到先得"})]})]})}),x.jsx("div",{className:"w-full mx-auto px-4 space-y-3",children:t.map(g=>{const y=g.status==="claimed";return x.jsxs("div",{className:`
261
+ `),s=a.substring(0,n).trim(),[l,...d]=s.split(" "),h=d.join(" ");let m="future";h.includes("往期")?m="past":(h.includes("今日")||h.includes("进行中"))&&(m="ongoing");const g=a.split(/-\s+\*\*活动标题\*\*/).slice(1);for(const y of g){let k="";const T=y.match(/^:(.*?)(?:\\|\n)/);T&&(k=T[1].trim());let z="";const D=y.match(/\*\*活动内容介绍\*\*:([\s\S]*?)(?=\*\*活动图片介绍\*\*)/);D&&(z=D[1].trim(),z.endsWith("\\")&&(z=z.slice(0,-1).trim()));let U="";const ue=y.match(/<img src="\s*([^"]+)\s*"/);ue&&(U=ue[1].trim()),t.push({id:`enevt-${Date.now()}`,date:l,title:k,description:z,status:m,imageUrl:U||void 0})}}return t}function oC(e){const t=[],i=e.split(/-\s+优惠券标题[::]\s*/);for(let a=1;a<i.length;a++){const n=i[a].trim();if(!n)continue;let s="Unknown Coupon";const l=n.indexOf("状态:");if(l>0)s=n.substring(0,l).trim();else{const T=n.indexOf("状态:");T>0&&(s=n.substring(0,T).trim())}let d="unclaimed";const h=n.match(/状态[::]\s*(.*?)(?:\s+优惠券图片[::]|\\|\n|$)/);if(h){const T=h[1].trim();d={已领取:"claimed",未领取:"unclaimed",不可领取:"unavailable"}[T]||"unclaimed"}let m="";const g=n.match(/<img[^>]+src\s*=\s*["']([^"']+)["']/i);g&&(m=g[1].trim());let y;const k=s.match(/(\d+(?:\.\d+)?)\s*元/);k&&(y=parseFloat(k[1])),t.push({id:`coupon-${Date.now()}-${a}`,title:s,imageUrl:m,status:d,...y!==void 0&&{discountPrice:y}})}return t}function aC(e){return e.split(/(?=##\s)/).filter(a=>a.trim().startsWith("##")).map((a,n)=>{const s=a.match(/##\s*(?:\*\*)?\s*(.+?)(?:\n|$)/),l=s?s[1].replace(/\*\*/g,"").trim():"",d=a.match(/[¥¥]\s*(\d+(?:\.\d+)?)/),h=d?`¥${d[1]}`:"",m=a.match(/(?:^|\n)\s*(?:-\s+)?(?:\*\*)?\s*(?:有效期|使用期限)\s*(?:\*\*)?\s*[::]\s*(\d{4}-\d{2}-\d{2})\s*(\d{2}:\d{2})[-~]\s*(\d{4}-\d{2}-\d{2})\s*(\d{2}:\d{2})/);let g="",y="";m&&(g=`${m[1]} ${m[2]}`,y=`${m[3]} ${m[4]}`);const k=a.match(/(?:^|\n)\s*(?:-\s+)?(?:\*\*)?\s*领取时间\s*(?:\*\*)?\s*[::]\s*(.+?)(?:\n|$)/),T=k?k[1].trim():"",z=a.match(/(?:^|\n)\s*(?:-\s+)?(?:\*\*)?\s*标签\s*(?:\*\*)?\s*[::]\s*(.+?)(?:\n|$)/),D=z?z[1].split(/[,,、]\s*/).filter(Boolean):[],U=a.match(/<img[^>]+src\s*=\s*["']([^"']+)["']/i),ue=U?U[1].trim():"";return{id:`myCoupon-${Date.now()}-${n}`,title:l,price:h,validStart:g,validEnd:y,receivedAt:T,tags:D,imageUrl:ue}})}function sC(e){const t=e.match(/\*\*总计\*\*[::]\s*(\d+)/),i=e.match(/\*\*成功\*\*[::]\s*(\d+)/),a=e.match(/\*\*失败\*\*[::]\s*(\d+)/),n=t?parseInt(t[1],10):0,s=i?parseInt(i[1],10):0,l=a?parseInt(a[1],10):0,d=[],h=e.split(/\n\s*- \*\*/).slice(1);for(const m of h){const g=m.match(/^(.+?)\*\*/),y=g?g[1].trim():"",k=m.match(/couponId[::]\s*([A-Z0-9]+)/i),T=k?k[1]:"",z=m.match(/couponCode[::]\s*([A-Z0-9]+)/i),D=z?z[1]:"",U=m.match(/<img[^>]+src=["']([^"']+)["']/),ue=U?U[1].trim():"";y&&T&&d.push({title:y,couponId:T,couponCode:D,imageUrl:ue})}return{status:s>0?"success":"failed",total:n,success:s,failed:l,coupons:d}}var uC={};const lC="https://mcp.mcd.cn";class cC{axiosInstance;tokenProvider;constructor(){this.axiosInstance=ut.create({baseURL:lC,headers:{"Content-Type":"application/json"}})}setTokenProvider(t){this.tokenProvider=t}async callTool(t,i={}){const a={jsonrpc:"2.0",id:Date.now(),method:"tools/call",params:{name:t,arguments:i}};let n=this.tokenProvider?.()||uC.Authorization;if(!n)throw new Error("请先设置 MCP Token");n.startsWith("Bearer ")||(n=`Bearer ${n}`);try{const s=await this.axiosInstance.post("",a,{headers:{Authorization:n}});if(s.data.error)throw new Error(s.data.error.message||"请求失败");return s.data.result?s.data.result:s.data}catch(s){throw s.code==="ERR_NETWORK"||s.message==="Network Error"?(console.warn("Network error, falling back to mock implementation for demo purposes."),new Error("网络连接失败,请检查网络连接")):s.response?s.response.status===429?new Error("请求频率过高,请稍后再试(每分钟最多 600 次请求)"):s.response.status===401?new Error("Token 无效或已过期,请重新设置"):s.response.status===403?new Error("Token 权限不足"):s.response.status===404?new Error("API 端点不存在,请检查 MCP Server 地址是否正确"):s.response.status===500?new Error("服务器内部错误,请稍后重试"):new Error(`请求失败 (${s.response.status}): ${s.response.data?.message||s.response.statusText||"未知错误"}`):s.message?new Error(s.message):new Error("网络请求失败,请检查网络连接和 MCP Server 地址")}}async getCampaignCalendar(t){const i=await this.callTool("campaign-calendar",{specifiedDate:t});if(i&&i.content&&Array.isArray(i.content)&&i.content[0]?.text){const a=i.content[0].text;if(typeof a=="string"&&a.includes("### 活动列表"))return iC(a)}return i}async getAvailableCoupons(){const t=await this.callTool("available-coupons",{});if(t&&t.content&&Array.isArray(t.content)&&t.content[0]?.text){const i=t.content[0].text;if(typeof i=="string"&&i.includes("优惠券列表"))return oC(i)}return t}async autoBindCoupons(){const t=await this.callTool("auto-bind-coupons",{});if(t&&t.content&&Array.isArray(t.content)&&t.content[0]?.text){const i=t.content[0].text;if(typeof i=="string"&&i.includes("优惠券列表"))return sC(i);if(typeof i=="string"&&i.includes("领券失败"))return{status:"failed",total:0,success:0,failed:0,coupons:[]}}return t}async getMyCoupons(){const t=await this.callTool("query-my-coupons",{});if(t&&t.content&&Array.isArray(t.content)&&t.content[0]?.text){const i=t.content[0].text;if(typeof i=="string"&&i.includes("# 您的优惠券列表"))return aC(i)}return t}}const dC=new cC,fC=({couponsData:e})=>{const[t,i]=Fe.useState(e),[a,n]=Fe.useState(!1),[s,l]=Fe.useState(null),d=t.filter(g=>g.status==="unclaimed").length,h=d===0,m=async()=>{if(!a){n(!0),l(null);try{(await dC.autoBindCoupons()).status==="success"?i(y=>y.map(k=>({...k,status:"claimed"}))):(l("领券失败,请稍后重试"),setTimeout(()=>l(null),3e3))}catch(g){console.error("Unexpected error:",g),l("发生未知错误,请检查网络")}finally{n(!1)}}};return x.jsxs("div",{className:"h-200 w-full bg-[#0078D4] pb-28 overflow-auto relative",children:[s&&x.jsx("div",{className:"fixed top-4 left-4 right-4 z-100 animate-bounce-in",children:x.jsxs("div",{className:"bg-red-50 border border-red-200 text-red-800 px-4 py-3 rounded-xl shadow-lg flex items-start gap-3",children:[x.jsx(Cx,{className:"w-5 h-5 text-red-600 shrink-0 mt-0.5"}),x.jsx("div",{className:"flex-1 text-sm font-medium",children:s}),x.jsx("button",{onClick:()=>l(null),className:"text-red-400 hover:text-red-600 transition-colors cursor-pointer",children:x.jsx(Mp,{className:"w-5 h-5"})})]})}),x.jsx("div",{className:"bg-[#0078D4] pt-6 pb-4 px-4",children:x.jsxs("div",{className:"w-full mx-auto",children:[x.jsx("div",{className:"flex items-baseline gap-3",children:x.jsx("h2",{className:"text-5xl font-black text-[#FFC72C] italic drop-shadow-md",children:"麦麦省"})}),x.jsxs("p",{className:"text-white/80 text-sm font-bold mt-2 flex items-center gap-2",children:[x.jsx("span",{className:"bg-linear-to-r from-red-500 to-red-600 text-white px-2 py-0.5 rounded text-xs border border-red-400 shadow-sm",children:"领券马上省"}),x.jsx("span",{children:"限时限领 先到先得"})]})]})}),x.jsx("div",{className:"w-full mx-auto px-4 space-y-3",children:t.map(g=>{const y=g.status==="claimed";return x.jsxs("div",{className:`
262
262
  relative bg-white rounded-xl overflow-hidden shadow-lg
263
263
  ${y?"opacity-75 grayscale-[0.2]":""}
264
264
  `,children:[x.jsx("div",{className:"h-1 bg-[#FFC72C]"}),x.jsxs("div",{className:"relative w-full aspect-16/6 bg-gray-50 overflow-hidden",children:[x.jsx("img",{src:g.imageUrl,alt:g.title,className:"w-full h-full object-contain object-center",onError:k=>{k.target.src='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="800" height="300" viewBox="0 0 800 300"><rect fill="%23f5f5f5" width="800" height="300"/><text x="400" y="150" font-family="Arial" font-size="40" fill="%23999" text-anchor="middle" dy=".3em">🍔 优惠券图片</text></svg>'}}),y&&x.jsx("div",{className:"absolute inset-0 bg-white/40 backdrop-blur-[1px] flex items-center justify-center",children:x.jsxs("div",{className:"bg-gray-800/90 text-white px-5 py-2 rounded-full font-black text-base flex items-center gap-2 shadow-2xl border-2 border-white/50",children:[x.jsx(Dg,{className:"w-5 h-5"}),"已领取"]})})]})]},g.id)})}),x.jsx("div",{className:`
@@ -268,7 +268,7 @@ container holding the app. Specify either width or maxWidth, and either height o
268
268
  w-full bg-[#DA291C] text-white py-3.5 rounded-xl font-black text-lg
269
269
  shadow-lg shadow-red-200 transition-all flex items-center justify-center gap-2
270
270
  ${a?"opacity-80 cursor-not-allowed":"hover:bg-[#c4121c] active:scale-[0.98] cursor-pointer"}
271
- `,children:a?x.jsxs(x.Fragment,{children:[x.jsx(w2,{className:"w-5 h-5 animate-spin"}),x.jsx("span",{children:"正在领取..."})]}):x.jsxs(x.Fragment,{children:[x.jsx("span",{children:"一键领取全部"}),x.jsxs("span",{className:"bg-white/20 px-2 py-0.5 rounded-lg text-sm",children:[d,"张"]})]})})})})]})},pC=({coupons:e})=>{const[t,i]=Fe.useState("all"),a=m=>{const g=new Date(m),y=new Date,k=g.getTime()-y.getTime();return Math.ceil(k/(1e3*60*60*24))},n=m=>{const g=new Date(m);return`${g.getMonth()+1}月${g.getDate()}日`},s=m=>{const g=a(m.validEnd);return g<=3&&g>0},l=m=>a(m.validEnd)<0,d=Fe.useMemo(()=>{switch(t){case"expiring":return e.filter(s);case"expired":return e.filter(l);case"all":default:return e}},[t]),h=Fe.useMemo(()=>({all:e.length,expiring:e.filter(s).length,expired:e.filter(l).length}),[]);return x.jsxs("div",{className:"h-200 w-full bg-[#FFC72C]",children:[x.jsx("div",{className:"bg-[#FFC72C] px-5 pt-6 pb-4 sticky top-0 z-10 shadow-sm",children:x.jsxs("div",{className:"w-full mx-auto",children:[x.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[x.jsx("div",{className:"w-10 h-10 bg-[#DA291C] rounded-full flex items-center justify-center shadow-md",children:x.jsx("span",{className:"text-white font-black text-xl",children:"M"})}),x.jsx("h1",{className:"text-2xl font-black text-gray-900 tracking-tight",children:"我的优惠券"})]}),x.jsx("div",{className:"flex bg-white/40 backdrop-blur-sm rounded-xl p-1.5 gap-1",children:[{key:"all",label:"全部",count:h.all},{key:"expiring",label:"即将过期",count:h.expiring,alert:!0},{key:"expired",label:"已过期",count:h.expired}].map(m=>x.jsxs("button",{onClick:()=>i(m.key),className:`flex-1 flex items-center justify-center gap-2 px-4 py-2.5 rounded-lg text-sm font-bold transition-all ${t===m.key?"bg-white text-[#DA291C] shadow-md":"text-gray-700 hover:bg-white/50"}`,children:[m.label,x.jsx("span",{className:`text-xs px-2 py-0.5 rounded-full font-black ${t===m.key?"bg-[#DA291C]/10":m.alert&&m.count>0?"bg-[#DA291C] text-white":"bg-gray-200 text-gray-600"}`,children:m.count}),m.alert&&m.count>0&&t!==m.key&&x.jsx("span",{className:"w-2 h-2 bg-[#DA291C] rounded-full animate-pulse"})]},m.key))})]})}),x.jsx("div",{className:"w-full h-150 overflow-auto mx-auto px-4 pb-8 space-y-4 pt-2",children:d.length===0?x.jsxs("div",{className:"text-center py-16",children:[x.jsx("div",{className:"text-7xl mb-4 grayscale opacity-40",children:"🎫"}),x.jsx("p",{className:"text-gray-700 font-bold text-lg mb-1",children:"暂无此类优惠券"}),x.jsx("p",{className:"text-gray-500 text-sm",children:t==="expiring"?"太棒了!暂无即将过期的券":"去看看其他优惠券吧"})]}):d.map(m=>{const g=a(m.validEnd),y=g<=3&&g>0,k=g<0;return x.jsxs("div",{className:`relative bg-white rounded-2xl overflow-hidden shadow-lg ${k?"opacity-60 grayscale":""}`,children:[x.jsx("div",{className:"h-1.5 bg-[#FFC72C]"}),y&&x.jsxs("div",{className:"absolute top-3 right-3 z-20 bg-[#DA291C] text-white px-3 py-1.5 rounded-full text-xs font-black flex items-center gap-1 shadow-lg border-2 border-white animate-pulse",children:[x.jsx(Cx,{className:"w-3.5 h-3.5"}),"剩",g,"天"]}),k&&x.jsx("div",{className:"absolute top-3 right-3 z-20 bg-gray-700 text-white px-3 py-1.5 rounded-full text-xs font-black shadow-lg border-2 border-white",children:"已过期"}),x.jsx("div",{className:"relative w-full aspect-16/7 bg-gray-50",children:x.jsx("img",{src:m.imageUrl,alt:m.title,className:"w-full h-full object-cover object-center",onError:T=>{T.target.src='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="800" height="350" viewBox="0 0 800 350"><rect fill="%23f5f5f5" width="800" height="350"/><text x="400" y="175" font-family="Arial" font-size="60" fill="%23DA291C" text-anchor="middle" font-weight="bold">M</text></svg>'}})}),x.jsxs("div",{className:"p-4",children:[x.jsxs("div",{className:"flex items-start justify-between gap-3 mb-3",children:[x.jsx("h3",{className:`text-lg font-black leading-tight flex-1 ${k?"text-gray-500":"text-gray-900"}`,children:m.title}),x.jsx("div",{className:"text-right shrink-0",children:x.jsx("div",{className:`text-2xl font-black italic ${k?"text-gray-400":"text-[#DA291C]"}`,children:m.price})})]}),x.jsxs("div",{className:"flex items-center justify-between pt-3 border-t border-dashed border-gray-200",children:[x.jsx("div",{className:"flex gap-2 flex-wrap",children:m.tags.map((T,z)=>x.jsxs("span",{className:`inline-flex items-center gap-1 text-xs font-bold px-2.5 py-1 rounded-full border ${k?"text-gray-400 bg-gray-100 border-gray-200":"text-yellow-700 bg-yellow-50 border-yellow-200"}`,children:[!k&&T.includes("到店")&&x.jsx(b2,{className:"w-3 h-3"}),!k&&T.includes("外送")&&x.jsx(s2,{className:"w-3 h-3"}),T.replace("专用","")]},z))}),x.jsxs("div",{className:`flex items-center gap-1.5 text-xs font-bold ${y?"text-[#DA291C]":k?"text-gray-400":"text-gray-500"}`,children:[x.jsx(Ux,{className:"w-4 h-4"}),x.jsx("span",{children:k?`已于 ${n(m.validEnd)} 过期`:`至 ${n(m.validEnd)}`})]})]})]}),x.jsx("div",{className:"absolute left-0 top-[60%] w-3 h-6 bg-[#FFC72C] rounded-r-full"}),x.jsx("div",{className:"absolute right-0 top-[60%] w-3 h-6 bg-[#FFC72C] rounded-l-full"})]},m.id)})}),x.jsx("div",{className:"w-full mx-auto px-4 pb-8 text-center",children:x.jsx("p",{className:"text-xs text-yellow-800/60 font-medium",children:"优惠券有效期及使用规则以麦当劳官方说明为准"})})]})},mC=({claimResult:e})=>{const t=a=>{navigator.clipboard.writeText(a),console.log("已复制:",a)},i=e.total>0&&e.status==="success";return x.jsxs("div",{className:`${i?"h-200":"h-100"} w-full bg-[#FFC72C] flex flex-col overflow-hidden`,children:[x.jsxs("div",{className:"shrink-0 pt-10 pb-5 px-6 text-center relative overflow-hidden",children:[x.jsx("div",{className:"absolute top-[-30px] left-1/2 -translate-x-1/2 w-48 h-48 bg-white/30 rounded-full blur-3xl"}),x.jsxs("div",{className:"relative z-10 ",children:[x.jsx("div",{className:"w-16 h-16 bg-white rounded-full mx-auto mb-3 flex items-center justify-center shadow-lg",children:x.jsx("div",{className:"w-12 h-12 bg-[#DA291C] rounded-full flex items-center justify-center",children:i?x.jsx(c2,{className:"w-7 h-7 text-white stroke-3"}):x.jsx(Mp,{className:"w-7 h-7 text-white stroke-3"})})}),x.jsx("h1",{className:"text-2xl font-black text-gray-900 mb-1",children:i?"领取成功!":"领取失败!"}),i&&x.jsxs("p",{className:"text-gray-700 font-bold text-sm",children:["成功领取"," ",x.jsx("span",{className:"text-[#DA291C] text-xl mx-1",children:e.success})," ","张优惠券"]})]})]}),i&&x.jsxs(x.Fragment,{children:[x.jsx("div",{className:"shrink-0 px-4 mb-4",children:x.jsxs("div",{className:"w-full mx-auto bg-white/50 backdrop-blur-sm rounded-xl p-3 flex justify-around shadow-md border border-white/50",children:[x.jsxs("div",{className:"text-center",children:[x.jsx("div",{className:"text-xl font-black text-gray-900",children:e.total}),x.jsx("div",{className:"text-[10px] font-bold text-gray-500 uppercase mt-0.5",children:"总计"})]}),x.jsx("div",{className:"w-px bg-white/50"}),x.jsxs("div",{className:"text-center",children:[x.jsx("div",{className:"text-xl font-black text-green-600",children:e.success}),x.jsx("div",{className:"text-[10px] font-bold text-gray-500 uppercase mt-0.5",children:"成功"})]}),x.jsx("div",{className:"w-px bg-white/50"}),x.jsxs("div",{className:"text-center",children:[x.jsx("div",{className:"text-xl font-black text-gray-400",children:e.failed}),x.jsx("div",{className:"text-[10px] font-bold text-gray-500 uppercase mt-0.5",children:"失败"})]})]})}),x.jsx("div",{className:"flex-1 overflow-y-auto px-4 pb-6",children:x.jsxs("div",{className:"w-full mx-auto",children:[x.jsxs("h2",{className:"text-xs font-bold text-gray-700 mb-3 flex items-center gap-1.5 sticky top-0 bg-[#FFC72C] py-2 z-10",children:[x.jsx(I2,{className:"w-3.5 h-3.5 text-[#DA291C]"}),"已领取的优惠券 (",e.coupons.length,")"]}),x.jsx("div",{className:"space-y-3",children:e.coupons.map(a=>x.jsxs("div",{className:"bg-white rounded-2xl overflow-hidden shadow-lg border-2 border-white relative",children:[x.jsx("div",{className:"h-1 bg-[#FFC72C]"}),x.jsx("div",{className:"relative w-full aspect-16/7 bg-gray-50",children:x.jsx("img",{src:a.imageUrl,alt:a.title,className:"w-full h-full object-contain object-center",onError:n=>{n.target.src='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="400" height="175" viewBox="0 0 400 175"><rect fill="%23f5f5f5" width="400" height="175"/><text x="200" y="87" font-family="Arial" font-size="40" fill="%23DA291C" text-anchor="middle">🍟</text></svg>'}})}),x.jsxs("div",{className:"p-3",children:[x.jsx("h3",{className:"text-base font-black text-gray-900 mb-2 truncate",children:a.title}),x.jsxs("div",{className:"bg-gray-50 rounded-lg p-2.5 border border-gray-200",children:[x.jsx("div",{className:"text-[10px] text-gray-500 font-bold mb-1 uppercase tracking-wider",children:"券码"}),x.jsxs("div",{className:"flex items-center gap-2",children:[x.jsx("code",{className:"flex-1 bg-white px-2.5 py-1.5 rounded-md text-xs font-mono font-bold text-gray-800 tracking-wider border border-gray-200 truncate select-all",children:a.couponCode}),x.jsx("button",{onClick:()=>t(a.couponCode),className:"shrink-0 bg-[#DA291C] text-white p-1.5 rounded-md active:scale-95 transition-transform",children:x.jsx(y2,{className:"w-3.5 h-3.5"})})]})]})]})]},a.couponId))}),x.jsx("div",{className:"mt-4 text-center pb-2",children:x.jsx("p",{className:"text-[10px] text-yellow-800/60 font-medium",children:'优惠券已保存至账户,可在"我的优惠券"查看'})})]})})]})]})},hC=({data:e})=>{const{view:t,data:i}=e,a=()=>{switch(t){case"calendar":return x.jsx(N2,{events:i});case"available-coupons":return x.jsx(fC,{couponsData:i});case"my-coupons":return x.jsx(pC,{coupons:i});case"bind-coupons":return x.jsx(mC,{claimResult:i});default:return null}};return x.jsx("div",{className:"w-full font-sans transition-colors duration-300 mx-auto p-0",children:x.jsx("div",{className:"w-full overflow-hidden",children:a()})})};function vC(){const[e,t]=Fe.useState(null),[i,a]=Fe.useState();if(e2({appInfo:{name:"McDonald's MCP App",version:"0.0.4"},capabilities:{},onAppCreated:n=>{n.onhostcontextchanged=s=>{a(s)},n.ontoolresult=s=>{console.log("Tool result:",s);const l=s.content?.find(d=>d.type==="text")?.text;if(l)try{const d=JSON.parse(l);t(d)}catch(d){console.error("Failed to parse tool result:",d)}}}}),!e){const n=i?.theme==="dark";return x.jsxs("div",{className:"text-center p-10 font-sans min-h-screen flex flex-col items-center justify-center transition-colors duration-300 ",children:[x.jsx("h2",{className:"text-[#DA291C] text-2xl font-bold mb-4",children:"McDonald's"}),x.jsx("p",{className:"mb-2",children:"正在加载数据..."}),x.jsx("p",{className:`text-xs ${n?"text-gray-400":"text-gray-500"}`,children:"Waiting for tool result..."})]})}return x.jsx(hC,{data:e})}d1.createRoot(document.getElementById("root")).render(x.jsx(i1.StrictMode,{children:x.jsx(vC,{})}));</script>
271
+ `,children:a?x.jsxs(x.Fragment,{children:[x.jsx(w2,{className:"w-5 h-5 animate-spin"}),x.jsx("span",{children:"正在领取..."})]}):x.jsxs(x.Fragment,{children:[x.jsx("span",{children:"一键领取全部"}),x.jsxs("span",{className:"bg-white/20 px-2 py-0.5 rounded-lg text-sm",children:[d,"张"]})]})})})})]})},pC=({coupons:e})=>{const[t,i]=Fe.useState("all"),a=m=>{const g=new Date(m),y=new Date,k=g.getTime()-y.getTime();return Math.ceil(k/(1e3*60*60*24))},n=m=>{const g=new Date(m);return`${g.getMonth()+1}月${g.getDate()}日`},s=m=>{const g=a(m.validEnd);return g<=3&&g>0},l=m=>a(m.validEnd)<0,d=Fe.useMemo(()=>{switch(t){case"expiring":return e.filter(s);case"expired":return e.filter(l);case"all":default:return e}},[t]),h=Fe.useMemo(()=>({all:e.length,expiring:e.filter(s).length,expired:e.filter(l).length}),[]);return x.jsxs("div",{className:"h-200 w-full bg-[#FFC72C]",children:[x.jsx("div",{className:"bg-[#FFC72C] px-5 pt-6 pb-4 sticky top-0 z-10 shadow-sm",children:x.jsxs("div",{className:"w-full mx-auto",children:[x.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[x.jsx("div",{className:"w-10 h-10 bg-[#DA291C] rounded-full flex items-center justify-center shadow-md",children:x.jsx("span",{className:"text-white font-black text-xl",children:"M"})}),x.jsx("h1",{className:"text-2xl font-black text-gray-900 tracking-tight",children:"我的优惠券"})]}),x.jsx("div",{className:"flex bg-white/40 backdrop-blur-sm rounded-xl p-1.5 gap-1",children:[{key:"all",label:"全部",count:h.all},{key:"expiring",label:"即将过期",count:h.expiring,alert:!0},{key:"expired",label:"已过期",count:h.expired}].map(m=>x.jsxs("button",{onClick:()=>i(m.key),className:`flex-1 flex items-center justify-center gap-2 px-4 py-2.5 rounded-lg text-sm font-bold transition-all ${t===m.key?"bg-white text-[#DA291C] shadow-md":"text-gray-700 hover:bg-white/50"}`,children:[m.label,x.jsx("span",{className:`text-xs px-2 py-0.5 rounded-full font-black ${t===m.key?"bg-[#DA291C]/10":m.alert&&m.count>0?"bg-[#DA291C] text-white":"bg-gray-200 text-gray-600"}`,children:m.count}),m.alert&&m.count>0&&t!==m.key&&x.jsx("span",{className:"w-2 h-2 bg-[#DA291C] rounded-full animate-pulse"})]},m.key))})]})}),x.jsx("div",{className:"w-full h-150 overflow-auto mx-auto px-4 pb-8 space-y-4 pt-2",children:d.length===0?x.jsxs("div",{className:"text-center py-16",children:[x.jsx("div",{className:"text-7xl mb-4 grayscale opacity-40",children:"🎫"}),x.jsx("p",{className:"text-gray-700 font-bold text-lg mb-1",children:"暂无此类优惠券"}),x.jsx("p",{className:"text-gray-500 text-sm",children:t==="expiring"?"太棒了!暂无即将过期的券":"去看看其他优惠券吧"})]}):d.map(m=>{const g=a(m.validEnd),y=g<=3&&g>0,k=g<0;return x.jsxs("div",{className:`relative bg-white rounded-2xl overflow-hidden shadow-lg ${k?"opacity-60 grayscale":""}`,children:[x.jsx("div",{className:"h-1.5 bg-[#FFC72C]"}),y&&x.jsxs("div",{className:"absolute top-3 right-3 z-20 bg-[#DA291C] text-white px-3 py-1.5 rounded-full text-xs font-black flex items-center gap-1 shadow-lg border-2 border-white animate-pulse",children:[x.jsx(Cx,{className:"w-3.5 h-3.5"}),"剩",g,"天"]}),k&&x.jsx("div",{className:"absolute top-3 right-3 z-20 bg-gray-700 text-white px-3 py-1.5 rounded-full text-xs font-black shadow-lg border-2 border-white",children:"已过期"}),x.jsx("div",{className:"relative w-full aspect-16/7 bg-gray-50",children:x.jsx("img",{src:m.imageUrl,alt:m.title,className:"w-full h-full object-cover object-center",onError:T=>{T.target.src='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="800" height="350" viewBox="0 0 800 350"><rect fill="%23f5f5f5" width="800" height="350"/><text x="400" y="175" font-family="Arial" font-size="60" fill="%23DA291C" text-anchor="middle" font-weight="bold">M</text></svg>'}})}),x.jsxs("div",{className:"p-4",children:[x.jsxs("div",{className:"flex items-start justify-between gap-3 mb-3",children:[x.jsx("h3",{className:`text-lg font-black leading-tight flex-1 ${k?"text-gray-500":"text-gray-900"}`,children:m.title}),x.jsx("div",{className:"text-right shrink-0",children:x.jsx("div",{className:`text-2xl font-black italic ${k?"text-gray-400":"text-[#DA291C]"}`,children:m.price})})]}),x.jsxs("div",{className:"flex items-center justify-between pt-3 border-t border-dashed border-gray-200",children:[x.jsx("div",{className:"flex gap-2 flex-wrap",children:m.tags.map((T,z)=>x.jsxs("span",{className:`inline-flex items-center gap-1 text-xs font-bold px-2.5 py-1 rounded-full border ${k?"text-gray-400 bg-gray-100 border-gray-200":"text-yellow-700 bg-yellow-50 border-yellow-200"}`,children:[!k&&T.includes("到店")&&x.jsx(b2,{className:"w-3 h-3"}),!k&&T.includes("外送")&&x.jsx(s2,{className:"w-3 h-3"}),T.replace("专用","")]},z))}),x.jsxs("div",{className:`flex items-center gap-1.5 text-xs font-bold ${y?"text-[#DA291C]":k?"text-gray-400":"text-gray-500"}`,children:[x.jsx(Ux,{className:"w-4 h-4"}),x.jsx("span",{children:k?`已于 ${n(m.validEnd)} 过期`:`至 ${n(m.validEnd)}`})]})]})]}),x.jsx("div",{className:"absolute left-0 top-[60%] w-3 h-6 bg-[#FFC72C] rounded-r-full"}),x.jsx("div",{className:"absolute right-0 top-[60%] w-3 h-6 bg-[#FFC72C] rounded-l-full"})]},m.id)})}),x.jsx("div",{className:"w-full mx-auto px-4 pb-8 text-center",children:x.jsx("p",{className:"text-xs text-yellow-800/60 font-medium",children:"优惠券有效期及使用规则以麦当劳官方说明为准"})})]})},mC=({claimResult:e})=>{const t=a=>{navigator.clipboard.writeText(a),console.log("已复制:",a)},i=e.total>0&&e.status==="success";return x.jsxs("div",{className:`${i?"h-200":"h-100"} w-full bg-[#FFC72C] flex flex-col overflow-hidden`,children:[x.jsxs("div",{className:"shrink-0 pt-10 pb-5 px-6 text-center relative overflow-hidden",children:[x.jsx("div",{className:"absolute top-[-30px] left-1/2 -translate-x-1/2 w-48 h-48 bg-white/30 rounded-full blur-3xl"}),x.jsxs("div",{className:"relative z-10 ",children:[x.jsx("div",{className:"w-16 h-16 bg-white rounded-full mx-auto mb-3 flex items-center justify-center shadow-lg",children:x.jsx("div",{className:"w-12 h-12 bg-[#DA291C] rounded-full flex items-center justify-center",children:i?x.jsx(c2,{className:"w-7 h-7 text-white stroke-3"}):x.jsx(Mp,{className:"w-7 h-7 text-white stroke-3"})})}),x.jsx("h1",{className:"text-2xl font-black text-gray-900 mb-1",children:i?"领取成功!":"领取失败!"}),i&&x.jsxs("p",{className:"text-gray-700 font-bold text-sm",children:["成功领取"," ",x.jsx("span",{className:"text-[#DA291C] text-xl mx-1",children:e.success})," ","张优惠券"]})]})]}),i&&x.jsxs(x.Fragment,{children:[x.jsx("div",{className:"shrink-0 px-4 mb-4",children:x.jsxs("div",{className:"w-full mx-auto bg-white/50 backdrop-blur-sm rounded-xl p-3 flex justify-around shadow-md border border-white/50",children:[x.jsxs("div",{className:"text-center",children:[x.jsx("div",{className:"text-xl font-black text-gray-900",children:e.total}),x.jsx("div",{className:"text-[10px] font-bold text-gray-500 uppercase mt-0.5",children:"总计"})]}),x.jsx("div",{className:"w-px bg-white/50"}),x.jsxs("div",{className:"text-center",children:[x.jsx("div",{className:"text-xl font-black text-green-600",children:e.success}),x.jsx("div",{className:"text-[10px] font-bold text-gray-500 uppercase mt-0.5",children:"成功"})]}),x.jsx("div",{className:"w-px bg-white/50"}),x.jsxs("div",{className:"text-center",children:[x.jsx("div",{className:"text-xl font-black text-gray-400",children:e.failed}),x.jsx("div",{className:"text-[10px] font-bold text-gray-500 uppercase mt-0.5",children:"失败"})]})]})}),x.jsx("div",{className:"flex-1 overflow-y-auto px-4 pb-6",children:x.jsxs("div",{className:"w-full mx-auto",children:[x.jsxs("h2",{className:"text-xs font-bold text-gray-700 mb-3 flex items-center gap-1.5 sticky top-0 bg-[#FFC72C] py-2 z-10",children:[x.jsx(I2,{className:"w-3.5 h-3.5 text-[#DA291C]"}),"已领取的优惠券 (",e.coupons.length,")"]}),x.jsx("div",{className:"space-y-3",children:e.coupons.map(a=>x.jsxs("div",{className:"bg-white rounded-2xl overflow-hidden shadow-lg border-2 border-white relative",children:[x.jsx("div",{className:"h-1 bg-[#FFC72C]"}),x.jsx("div",{className:"relative w-full aspect-16/7 bg-gray-50",children:x.jsx("img",{src:a.imageUrl,alt:a.title,className:"w-full h-full object-contain object-center",onError:n=>{n.target.src='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="400" height="175" viewBox="0 0 400 175"><rect fill="%23f5f5f5" width="400" height="175"/><text x="200" y="87" font-family="Arial" font-size="40" fill="%23DA291C" text-anchor="middle">🍟</text></svg>'}})}),x.jsxs("div",{className:"p-3",children:[x.jsx("h3",{className:"text-base font-black text-gray-900 mb-2 truncate",children:a.title}),x.jsxs("div",{className:"bg-gray-50 rounded-lg p-2.5 border border-gray-200",children:[x.jsx("div",{className:"text-[10px] text-gray-500 font-bold mb-1 uppercase tracking-wider",children:"券码"}),x.jsxs("div",{className:"flex items-center gap-2",children:[x.jsx("code",{className:"flex-1 bg-white px-2.5 py-1.5 rounded-md text-xs font-mono font-bold text-gray-800 tracking-wider border border-gray-200 truncate select-all",children:a.couponCode}),x.jsx("button",{onClick:()=>t(a.couponCode),className:"shrink-0 bg-[#DA291C] text-white p-1.5 rounded-md active:scale-95 transition-transform",children:x.jsx(y2,{className:"w-3.5 h-3.5"})})]})]})]})]},a.couponId))}),x.jsx("div",{className:"mt-4 text-center pb-2",children:x.jsx("p",{className:"text-[10px] text-yellow-800/60 font-medium",children:'优惠券已保存至账户,可在"我的优惠券"查看'})})]})})]})]})},hC=({data:e})=>{const{view:t,data:i}=e,a=()=>{switch(t){case"calendar":return x.jsx(N2,{events:i});case"available-coupons":return x.jsx(fC,{couponsData:i});case"query-my-coupons":return x.jsx(pC,{coupons:i});case"bind-coupons":return x.jsx(mC,{claimResult:i});default:return null}};return x.jsx("div",{className:"w-full font-sans transition-colors duration-300 mx-auto p-0",children:x.jsx("div",{className:"w-full overflow-hidden",children:a()})})};function vC(){const[e,t]=Fe.useState(null),[i,a]=Fe.useState();if(e2({appInfo:{name:"McDonald's MCP App",version:"0.0.5"},capabilities:{},onAppCreated:n=>{n.onhostcontextchanged=s=>{a(s)},n.ontoolresult=s=>{console.log("Tool result:",s);const l=s.content?.find(d=>d.type==="text")?.text;if(l)try{const d=JSON.parse(l);t(d)}catch(d){console.error("Failed to parse tool result:",d)}}}}),!e){const n=i?.theme==="dark";return x.jsxs("div",{className:"text-center p-10 font-sans min-h-screen flex flex-col items-center justify-center transition-colors duration-300 ",children:[x.jsx("h2",{className:"text-[#DA291C] text-2xl font-bold mb-4",children:"McDonald's"}),x.jsx("p",{className:"mb-2",children:"正在加载数据..."}),x.jsx("p",{className:`text-xs ${n?"text-gray-400":"text-gray-500"}`,children:"Waiting for tool result..."})]})}return x.jsx(hC,{data:e})}d1.createRoot(document.getElementById("root")).render(x.jsx(i1.StrictMode,{children:x.jsx(vC,{})}));</script>
272
272
  <style rel="stylesheet" crossorigin>/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-scroll-snap-strictness:proximity;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-orange-50:oklch(98% .016 73.684);--color-orange-500:oklch(70.5% .213 47.604);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-emerald-500:oklch(69.6% .17 162.48);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--text-7xl:4.5rem;--text-7xl--line-height:1;--text-8xl:6rem;--text-8xl--line-height:1;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-normal:0em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--shadow-sm:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--shadow-md:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--shadow-lg:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--drop-shadow-sm:0 1px 2px #00000026;--drop-shadow-md:0 3px 3px #0000001f;--drop-shadow-lg:0 4px 4px #00000026;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-md:12px;--blur-xl:24px;--blur-2xl:40px;--blur-3xl:64px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-1{inset-inline:calc(var(--spacing)*1)}.-top-3{top:calc(var(--spacing)*-3)}.-top-6{top:calc(var(--spacing)*-6)}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-2{top:calc(var(--spacing)*2)}.top-3{top:calc(var(--spacing)*3)}.top-4{top:calc(var(--spacing)*4)}.top-7{top:calc(var(--spacing)*7)}.top-10{top:calc(var(--spacing)*10)}.top-32{top:calc(var(--spacing)*32)}.top-40{top:calc(var(--spacing)*40)}.top-\[-30px\]{top:-30px}.top-\[60\%\]{top:60%}.-right-2{right:calc(var(--spacing)*-2)}.-right-3{right:calc(var(--spacing)*-3)}.-right-8{right:calc(var(--spacing)*-8)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-10{right:calc(var(--spacing)*10)}.-bottom-1{bottom:calc(var(--spacing)*-1)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-3{bottom:calc(var(--spacing)*3)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-5{bottom:calc(var(--spacing)*5)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-10{bottom:calc(var(--spacing)*10)}.-left-2{left:calc(var(--spacing)*-2)}.-left-3{left:calc(var(--spacing)*-3)}.left-0{left:calc(var(--spacing)*0)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-8{left:calc(var(--spacing)*8)}.left-10{left:calc(var(--spacing)*10)}.left-20{left:calc(var(--spacing)*20)}.-z-0{z-index:-0}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-60{z-index:60}.z-100{z-index:100}.col-span-full{grid-column:1/-1}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing)*0)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mt-auto{margin-top:auto}.mr-0{margin-right:calc(var(--spacing)*0)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-10{margin-bottom:calc(var(--spacing)*10)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-16\/6{aspect-ratio:16/6}.aspect-16\/7{aspect-ratio:16/7}.aspect-square{aspect-ratio:1}.h-0{height:calc(var(--spacing)*0)}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-56{height:calc(var(--spacing)*56)}.h-60{height:calc(var(--spacing)*60)}.h-64{height:calc(var(--spacing)*64)}.h-72{height:calc(var(--spacing)*72)}.h-80{height:calc(var(--spacing)*80)}.h-96{height:calc(var(--spacing)*96)}.h-100{height:calc(var(--spacing)*100)}.h-150{height:calc(var(--spacing)*150)}.h-200{height:calc(var(--spacing)*200)}.h-300{height:calc(var(--spacing)*300)}.h-400{height:calc(var(--spacing)*400)}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-40{max-height:calc(var(--spacing)*40)}.max-h-400{max-height:calc(var(--spacing)*400)}.max-h-\[60vh\]{max-height:60vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-screen{min-height:100vh}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-2{width:calc(var(--spacing)*2)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-40{width:calc(var(--spacing)*40)}.w-48{width:calc(var(--spacing)*48)}.w-60{width:calc(var(--spacing)*60)}.w-500{width:calc(var(--spacing)*500)}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.w-screen{width:100vw}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-\[800px\]{max-width:800px}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\[100px\]{min-width:100px}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-none{flex:none}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-full{--tw-translate-y:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-105{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.-rotate-2{rotate:-2deg}.-rotate-12{rotate:-12deg}.rotate-12{rotate:12deg}.rotate-45{rotate:45deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-bounce{animation:var(--animate-bounce)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.snap-x{scroll-snap-type:x var(--tw-scroll-snap-strictness)}.snap-start{scroll-snap-align:start}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}.self-center{align-self:center}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[2\.5rem\]{border-radius:2.5rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-l-full{border-top-left-radius:3.40282e38px;border-bottom-left-radius:3.40282e38px}.rounded-r-full{border-top-right-radius:3.40282e38px;border-bottom-right-radius:3.40282e38px}.rounded-r-xl{border-top-right-radius:var(--radius-xl);border-bottom-right-radius:var(--radius-xl)}.rounded-bl-lg{border-bottom-left-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.border-t-4{border-top-style:var(--tw-border-style);border-top-width:4px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-b-4{border-bottom-style:var(--tw-border-style);border-bottom-width:4px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-gray-50{border-color:var(--color-gray-50)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-900{border-color:var(--color-gray-900)}.border-red-100{border-color:var(--color-red-100)}.border-red-200{border-color:var(--color-red-200)}.border-red-400{border-color:var(--color-red-400)}.border-slate-100{border-color:var(--color-slate-100)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\/50{border-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.border-white\/50{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}}.border-yellow-200{border-color:var(--color-yellow-200)}.border-yellow-400{border-color:var(--color-yellow-400)}.border-yellow-500{border-color:var(--color-yellow-500)}.border-yellow-500\/30{border-color:#edb2004d}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/30{border-color:color-mix(in oklab,var(--color-yellow-500)30%,transparent)}}.border-yellow-600{border-color:var(--color-yellow-600)}.bg-\[\#0078D4\]{background-color:#0078d4}.bg-\[\#DA291C\]{background-color:#da291c}.bg-\[\#DA291C\]\/10{background-color:#da291c1a}.bg-\[\#FFC72C\]{background-color:#ffc72c}.bg-black{background-color:var(--color-black)}.bg-black\/5{background-color:#0000000d}@supports (color:color-mix(in lab,red,red)){.bg-black\/5{background-color:color-mix(in oklab,var(--color-black)5%,transparent)}}.bg-black\/20{background-color:#0003}@supports (color:color-mix(in lab,red,red)){.bg-black\/20{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-700{background-color:var(--color-gray-700)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-800\/90{background-color:#1e2939e6}@supports (color:color-mix(in lab,red,red)){.bg-gray-800\/90{background-color:color-mix(in oklab,var(--color-gray-800)90%,transparent)}}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-500{background-color:var(--color-green-500)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-600{background-color:var(--color-red-600)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-300{background-color:var(--color-slate-300)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/20{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-white\/30{background-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.bg-white\/40{background-color:#fff6}@supports (color:color-mix(in lab,red,red)){.bg-white\/40{background-color:color-mix(in oklab,var(--color-white)40%,transparent)}}.bg-white\/50{background-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.bg-white\/50{background-color:color-mix(in oklab,var(--color-white)50%,transparent)}}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-linear-to-r{--tw-gradient-position:to right}@supports (background-image:linear-gradient(in lab,red,red)){.bg-linear-to-r{--tw-gradient-position:to right in oklab}}.bg-linear-to-r{background-image:linear-gradient(var(--tw-gradient-stops))}.bg-linear-to-t{--tw-gradient-position:to top}@supports (background-image:linear-gradient(in lab,red,red)){.bg-linear-to-t{--tw-gradient-position:to top in oklab}}.bg-linear-to-t{background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-black{--tw-gradient-from:var(--color-black);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-black\/50{--tw-gradient-from:#00000080}@supports (color:color-mix(in lab,red,red)){.from-black\/50{--tw-gradient-from:color-mix(in oklab,var(--color-black)50%,transparent)}}.from-black\/50{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-50{--tw-gradient-from:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-50{--tw-gradient-from:var(--color-red-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-500{--tw-gradient-from:var(--color-red-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-transparent{--tw-gradient-from:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-white{--tw-gradient-from:var(--color-white);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.via-black{--tw-gradient-via:var(--color-black);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-transparent{--tw-gradient-via:transparent;--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-white{--tw-gradient-via:var(--color-white);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-yellow-50{--tw-gradient-via:var(--color-yellow-50);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-gray-100{--tw-gradient-to:var(--color-gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-100{--tw-gradient-to:var(--color-red-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-600{--tw-gradient-to:var(--color-red-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.stroke-3{stroke-width:3px}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-center{object-position:center}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-2\.5{padding:calc(var(--spacing)*2.5)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-10{padding:calc(var(--spacing)*10)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-3\.5{padding-block:calc(var(--spacing)*3.5)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-8{padding-block:calc(var(--spacing)*8)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-4{padding-right:calc(var(--spacing)*4)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-20{padding-bottom:calc(var(--spacing)*20)}.pb-24{padding-bottom:calc(var(--spacing)*24)}.pb-28{padding-bottom:calc(var(--spacing)*28)}.pb-32{padding-bottom:calc(var(--spacing)*32)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#DA291C\]{color:#da291c}.text-\[\#FFC72C\]{color:#ffc72c}.text-black{color:var(--color-black)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-gray-100{color:var(--color-gray-100)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-orange-500{color:var(--color-orange-500)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-800{color:var(--color-red-800)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-transparent{color:#0000}.text-white{color:var(--color-white)}.text-white\/80{color:#fffc}@supports (color:color-mix(in lab,red,red)){.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-800\/60{color:#874b0099}@supports (color:color-mix(in lab,red,red)){.text-yellow-800\/60{color:color-mix(in oklab,var(--color-yellow-800)60%,transparent)}}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.line-through{text-decoration-line:line-through}.decoration-gray-300{-webkit-text-decoration-color:var(--color-gray-300);text-decoration-color:var(--color-gray-300)}.decoration-red-500{-webkit-text-decoration-color:var(--color-red-500);text-decoration-color:var(--color-red-500)}.decoration-2{text-decoration-thickness:2px}.opacity-20{opacity:.2}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_-4px_20px_rgba\(0\,0\,0\,0\.1\)\]{--tw-shadow:0 -4px 20px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-4{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-gray-100{--tw-shadow-color:oklch(96.7% .003 264.542)}@supports (color:color-mix(in lab,red,red)){.shadow-gray-100{--tw-shadow-color:color-mix(in oklab,var(--color-gray-100)var(--tw-shadow-alpha),transparent)}}.shadow-red-100{--tw-shadow-color:oklch(93.6% .032 17.717)}@supports (color:color-mix(in lab,red,red)){.shadow-red-100{--tw-shadow-color:color-mix(in oklab,var(--color-red-100)var(--tw-shadow-alpha),transparent)}}.shadow-red-200{--tw-shadow-color:oklch(88.5% .062 18.334)}@supports (color:color-mix(in lab,red,red)){.shadow-red-200{--tw-shadow-color:color-mix(in oklab,var(--color-red-200)var(--tw-shadow-alpha),transparent)}}.shadow-red-500{--tw-shadow-color:oklch(63.7% .237 25.331)}@supports (color:color-mix(in lab,red,red)){.shadow-red-500{--tw-shadow-color:color-mix(in oklab,var(--color-red-500)var(--tw-shadow-alpha),transparent)}}.shadow-yellow-200{--tw-shadow-color:oklch(94.5% .129 101.54)}@supports (color:color-mix(in lab,red,red)){.shadow-yellow-200{--tw-shadow-color:color-mix(in oklab,var(--color-yellow-200)var(--tw-shadow-alpha),transparent)}}.ring-\[\#DA291C\]{--tw-ring-color:#da291c}.ring-black{--tw-ring-color:var(--color-black)}.ring-red-400{--tw-ring-color:var(--color-red-400)}.ring-white{--tw-ring-color:var(--color-white)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ring-offset-4{--tw-ring-offset-width:4px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-2xl{--tw-blur:blur(var(--blur-2xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-xl{--tw-blur:blur(var(--blur-xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-lg{--tw-drop-shadow-size:drop-shadow(0 4px 4px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-lg));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-md{--tw-drop-shadow-size:drop-shadow(0 3px 3px var(--tw-drop-shadow-color,#0000001f));--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-sm{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-sm));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.grayscale-\[0\.2\]{--tw-grayscale:grayscale(.2);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-\[1px\]{--tw-backdrop-blur:blur(1px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition\!{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events!important;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))!important;transition-duration:var(--tw-duration,var(--default-transition-duration))!important}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.delay-700{transition-delay:.7s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:bg-\[\#DA291C\]:is(:where(.group):hover *){background-color:#da291c}.group-hover\:text-\[\#DA291C\]:is(:where(.group):hover *){color:#da291c}.group-hover\:text-white:is(:where(.group):hover *){color:var(--color-white)}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\:scale-\[1\.01\]:hover{scale:1.01}.hover\:bg-\[\#c4121c\]:hover{background-color:#c4121c}.hover\:bg-\[\#ffcf4d\]:hover{background-color:#ffcf4d}.hover\:bg-black\/40:hover{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/40:hover{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:bg-white\/50:hover{background-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/50:hover{background-color:color-mix(in oklab,var(--color-white)50%,transparent)}}.hover\:bg-white\/60:hover{background-color:#fff9}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/60:hover{background-color:color-mix(in oklab,var(--color-white)60%,transparent)}}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-slate-900:hover{color:var(--color-slate-900)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.active\:scale-\[0\.98\]:active{scale:.98}}:root{--color-background-primary:#fff;--color-text-primary:#1a1a1a;--color-text-secondary:#666;--color-accent:#6366f1;--color-border:#e2e8f0;--font-sans:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--border-radius-md:12px;--shadow-sm:0 1px 2px 0 #0000000d;--shadow-md:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-scroll-snap-strictness{syntax:"*";inherits:false;initial-value:proximity}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}</style>
273
273
  </head>
274
274
 
package/dist/server.js CHANGED
@@ -269,7 +269,7 @@ var MCPClient = class {
269
269
  }
270
270
  //活动日历查询工具
271
271
  async getCampaignCalendar(specifiedDate) {
272
- const result = await this.callTool("campaign-calender", { specifiedDate });
272
+ const result = await this.callTool("campaign-calendar", { specifiedDate });
273
273
  if (result && result.content && Array.isArray(result.content) && result.content[0]?.text) {
274
274
  const text = result.content[0].text;
275
275
  if (typeof text === "string" && text.includes("### \u6D3B\u52A8\u5217\u8868")) {
@@ -310,7 +310,7 @@ var MCPClient = class {
310
310
  }
311
311
  // 我的优惠券查询
312
312
  async getMyCoupons() {
313
- const result = await this.callTool("my-coupons", {});
313
+ const result = await this.callTool("query-my-coupons", {});
314
314
  if (result && result.content && Array.isArray(result.content) && result.content[0]?.text) {
315
315
  const text = result.content[0].text;
316
316
  if (typeof text === "string" && text.includes("# \u60A8\u7684\u4F18\u60E0\u5238\u5217\u8868")) {
@@ -331,11 +331,11 @@ McDonaldsService.setTokenProvider(() => tokenContext.getStore());
331
331
  var __dirname = path.dirname(fileURLToPath(import.meta.url));
332
332
  var server = new McpServer({
333
333
  name: "mcd-mcp-app",
334
- version: "0.0.4"
334
+ version: "0.0.5"
335
335
  });
336
336
  registerAppTool(
337
337
  server,
338
- "campaign-calender",
338
+ "campaign-calendar",
339
339
  {
340
340
  title: "\u6D3B\u52A8\u65E5\u5386\u67E5\u8BE2\u5DE5\u5177",
341
341
  description: `\u67E5\u8BE2\u9EA6\u5F53\u52B3\u4E2D\u56FD\u5F53\u6708\u7684\u8425\u9500\u6D3B\u52A8\u65E5\u5386\uFF0C\u8FD4\u56DE\u8FDB\u884C\u4E2D\u3001\u5F80\u671F\u548C\u672A\u6765\u65E5\u671F\u7684\u6D3B\u52A8\u3002
@@ -414,7 +414,7 @@ registerAppTool(
414
414
  );
415
415
  registerAppTool(
416
416
  server,
417
- "my-coupons",
417
+ "query-my-coupons",
418
418
  {
419
419
  title: "\u6211\u7684\u4F18\u60E0\u5238\u67E5\u8BE2",
420
420
  description: `\u67E5\u8BE2\u6211\u6709\u54EA\u4E9B\u53EF\u7528\u7684\u4F18\u60E0\u5238\u3002\u5C31\u50CF\u6253\u5F00\u9EA6\u5F53\u52B3APP\u7684"\u6211\u7684\u4F18\u60E0\u5238"\u9875\u9762\uFF0C\u80FD\u770B\u5230\u6240\u6709\u53EF\u4EE5\u7528\u6765\u70B9\u9910\u7684\u4F18\u60E0\u5238\u5217\u8868\u3002
@@ -433,7 +433,7 @@ registerAppTool(
433
433
  content: [
434
434
  {
435
435
  type: "text",
436
- text: JSON.stringify({ view: "my-coupons", data: coupons })
436
+ text: JSON.stringify({ view: "query-my-coupons", data: coupons })
437
437
  }
438
438
  ]
439
439
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcd-mcp-app",
3
- "version": "0.0.4",
3
+ "version": "0.0.5",
4
4
  "type": "module",
5
5
  "author": "yongyang599",
6
6
  "license": "MIT",
@@ -13,7 +13,7 @@
13
13
  "model-context-protocol"
14
14
  ],
15
15
  "bin": {
16
- "mcd-mcp-app": "./dist/server.js"
16
+ "mcd-mcp-app": "dist/server.js"
17
17
  },
18
18
  "files": [
19
19
  "dist"