1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3554],{9842:(e,t,r)=>{"use strict";r.d(t,{y:()=>T});var a=r(85047),s=r(77836),i=r(19980),o=r(16635),l=r(75020),d=r(72287),n=r(19726),c=r(17938),u=r(1941),p=r(40975),f=r(33022),m=r(79434),b=r(99307),g=r(61414);let h=[{id:"irr-calculator",title:"IRR è¨ç®æ©",description:"ä¾ä¸è¦åæ¥æç¾éæµè¨ç®å
§é¨å ±é
¬çï¼XIRRï¼ï¼è©ä¼°æè³æå°æ¡å ±é
¬",details:"æ¯æ´ç°¡å試ç®èé²éç¾éæµè¡¨æ ¼ï¼ä»¥ ACT/365 å¹´åï¼çµæå°é½ Excel XIRR",icon:s.A,publicPath:"/tools/irr-calculator",requiresAuth:!1,badge:"æ°åè½",status:"active"},{id:"break-even",title:"æç試ç®",description:"è©¦ç®æç平衡æéæï¼æ¥é·éèçæ¥é¡ï¼è©ä¼°åºå®èè®åææ¬çµæ§",details:"輸å
¥å®å¹ãå®ä½è®åææ¬ãåé
æåºå®è²»ç¨èåææå
¥æ¤é·å¹´æ¸ï¼è¨ç®é¶é·éæè§æãæï¼æ¥æç平衡é·éèçæ¥é¡",icon:i.A,publicPath:"/tools/break-even",requiresAuth:!1,status:"active"},{id:"leverage-calculator",title:"æ§æ¡¿æè³å®å
¨æ°´ä½",description:"ä¼°ç®æ§æ¡¿æè³çç¶æçãæå¤§å¯æ¿åè·å¹
è忬¾ææ¬è¦è",details:"輸å
¥èªå款ã忬¾éé¡ãå©çèé æå ±é
¬ï¼ä¸¦ç¨æ»æ¡¿åææåº¦åæï¼å¿«éææ¡å®å
¨æ°´ä½",icon:o.A,publicPath:"/tools/leverage-calculator",requiresAuth:!1,status:"active"},{id:"dca-calculator",title:"宿å®é¡æè³è©¦ç®",description:"è¨ç®å®æå®é¡æè³çæªä¾å¹å¼åå ±é
¬ï¼å¹«å©æ¨è¦åé·ææè³çç¥",details:"輸å
¥æ¯ææå
¥éé¡ãæè³æéåé æå ±é
¬çï¼å³å¯æ¥çæè³æé·è¶¨å¢åæçµæ¶ç",icon:l.A,publicPath:"/tools/dca-calculator",requiresAuth:!1,status:"active"},{id:"compound",title:"è¤å©è¨ç®æ©",description:"è¨ç®è¤å©æè³çæªä¾å¹å¼ï¼æ¯æ´å¤ç¨®è¨ç®æ¨¡å¼åæ
墿¯è¼",details:"æ¯æ´è¨ç®æªä¾å¹å¼ãæ¬éãå©çææéï¼ä¸¦å¯æ¯è¼ä¸åå©çæ
å¢çæè³çµæ",icon:d.A,publicPath:"/tools/compound",requiresAuth:!1,status:"active"},{id:"labor-insurance",title:"åä¿è©¦ç®",description:"試ç®åä¿è年給ä»ï¼å¯å¸¶å
¥éä¼è¦å",details:"輸å
¥èªè³ãæä¿é¡å¥èå¹´è³ï¼è¨ç®èå¹´å¹´éï¼ä¸æ¬¡éè䏿¬¡è«é ï¼ç»å
¥å¾å¯å¸¶å
¥åä¿æé è³éä¼è¦å",icon:n.A,publicPath:"/tools/labor-insurance",requiresAuth:!1,status:"active"},{id:"labor-pension",title:"åé試ç®",description:"試ç®åéæ°å¶éä¼éï¼å¯å¸¶å
¥éä¼è¦å",details:"輸å
¥æèªãå¹´è³èææ¥æ¢ä»¶ï¼è¨ç®ææç¹³ãå°æ¶é¤é¡èæéï¼ç»å
¥å¾å¯å¸¶å
¥åéæéè³éä¼è¦å",icon:c.A,publicPath:"/tools/labor-pension",requiresAuth:!1,status:"active"},{id:"loan",title:"貸款試ç®å¨",description:"è¨ç®è²¸æ¬¾é款è¨ååç¸½å©æ¯ï¼æ¯æ´å¤ç¨®é款æ¹å¼åé²éåè½",details:"æ¯æ´æ¿è²¸ãè»è²¸ãä¿¡è²¸ï¼æä¾æ¬æ¯å¹³åæ¤é忬é平忤éå
©ç¨®é款æ¹å¼ï¼ä¸¦å¯è¨ç®æå鿬¾åå©çè®å",icon:u.A,publicPath:"/tools/loan",requiresAuth:!1,status:"active"},{id:"credit-cards",title:"ä¿¡ç¨å¡ç®¡ç",description:"ç®¡çæ¨çä¿¡ç¨å¡è³è¨ãåªæ æ´»åå繳款æé",details:"è¨éä¿¡ç¨å¡è³è¨ãè¿½è¹¤åªæ æ´»åï¼ä¸¦è¨å®ç¹³æ¬¾æ¥æéï¼é¿å
å¿è¨ç¹³æ¬¾",icon:p.A,publicPath:"/tools/credit-cards",requiresAuth:!0,status:"active"},{id:"fire-calculator",title:"FIRE 財åèªç±è¨ç®æ©",description:"è¨ç®éå°è²¡åèªç±æéçæéãè³ç¢åå²èè¨å",details:"æ¯æ´ LeanãRegularãFatãCoastãBarista çå種 FIRE é¡å試ç®",icon:f.A,publicPath:"/tools/fire-calculator",requiresAuth:!1,status:"active"},{id:"education-fund",title:"å女æè²åºéè¦å",description:"è¨ç®å女æè²è²»ç¨ï¼è¦åæè²åºéæè³çç¥ï¼æ¯æ´å¤å女ãå¤é段è¦å",details:"æ¯æ´å¤ç¨®è¨ç®æ¨¡å¼ãå¤å女è¦åãéæ®µå¼æè²è²»ç¨è¨å®ï¼ä¸¦å¯å²åçºè²¡åç®æ¨",icon:m.A,publicPath:"/tools/education-fund",requiresAuth:!1,status:"active"},{id:"report",title:"財åå ±åçæ",description:"ééå¯é
ç½®çåè¡¨ãææ¨èæä»¶å¡çï¼å¿«éè¼¸åºææ¼å享ç財åå ±åæªæ¡",details:"鏿å表ãè²¡åææ¨åæä»¶ï¼çæå°æ¥ç財åå ±å PDFï¼æ¹ä¾¿èé¡§åæå®¶äººå享",icon:b.A,publicPath:"/tools/report",requiresAuth:!0,status:"renovating",badge:"ç¿»æ°ä¸"},{id:"budget-planner",title:"é ç®è¦å表",description:"åºæ¼å¹´åº¦ç¸½æ¶å
¥ï¼æºè½è¦ååé
æ¯åºçé ç®åé
åç¾åæ¯",details:"è¨å®å¹´åº¦ç¸½æ¶å
¥å¾ï¼ç³»çµ±èªåè¨ç®ååé¡é ç®çéé¡èç¾åæ¯ï¼ä¸¦ä»¥åé¤
åè¦è¦ºå顯示",icon:g.A,publicPath:"/tools/budget-planner",requiresAuth:!1,status:"active"},{id:"insurance-needs",title:"ä¿ééæ±åæ",description:"ééå¼å°å¼åå·åæé«çè壽éªçä¿éç¼
1ºå£ï¼ç¢åºå»ºè°ä¿é¡",details:"ä¾å¹´é½¡ãå®¶åºèæ¶å
¥çåå·ï¼è¨ç®ä½é¢æ¥é¡ã實æ¯å¯¦ä»ã壽éªç¼ºå£ç建è°ä¿é¡ï¼ç»å
¥å¾å¯å¸¶å
¥æ¶å
¥ä¸¦å°çµæå²åè³ä¿éªè¦å",icon:n.A,publicPath:"/tools/insurance-needs",requiresAuth:!1,badge:"æ°åè½",status:"active"}];var x=r(26052),v=r.n(x),y=r(46377),k=r(31615),A=r(82520),N=r(38187),w=r(41178),j=r(46711);let _=["from-sky-500 to-violet-500","from-violet-500 to-fuchsia-500","from-fuchsia-500 to-rose-500","from-rose-500 to-amber-500","from-amber-500 to-sky-500"];function R({tool:e,isAuthenticated:t,isAdmin:r=!1}){let{toast:s}=(0,w.dj)(),i=(0,y.useRouter)(),o="renovating"===e.status,l=!("active"===e.status||o&&r),d=e.requiresAuth&&!t,n=d?`/auth?redirect=${encodeURIComponent(e.publicPath)}`:e.publicPath,c=(0,k.useMemo)(()=>_[function(e){let t=0;for(let r=0;r<e.length;r++)t+=e.charCodeAt(r);return t%_.length}(e.id)],[e.id]),u=e.icon,p=(0,a.jsxs)(A.Zp,{className:`relative h-full min-h-[9rem] overflow-hidden rounded-2xl border transition-all duration-200 ${l?"cursor-not-allowed border-border opacity-50":"cursor-pointer border-white/[0.08] bg-gradient-to-br from-card/95 to-card/60 shadow-sm backdrop-blur-sm hover:-translate-y-0.5 hover:border-white/15 hover:shadow-xl"}`,children:[(0,a.jsx)("div",{className:`pointer-events-none absolute inset-y-0 left-0 w-1 bg-gradient-to-b ${c} opacity-90`,"aria-hidden":!0}),e.badge&&(0,a.jsx)("div",{className:"absolute right-3 top-3 z-10",children:(0,a.jsx)(N.E,{className:o?"border-zinc-400/30 bg-zinc-500/25 text-zinc-50 text-[11px] font-semibold backdrop-blur-sm dark:border-zinc-400/20 dark:bg-zinc-600/30 dark:text-zinc-100":"border-emerald-400/30 bg-emerald-500/25 text-emerald-50 text-[11px] font-semibold backdrop-blur-sm dark:border-emerald-400/25 dark:bg-emerald-600/20 dark:text-emerald-100",children:e.badge})}),(0,a.jsxs)(A.aR,{className:"flex flex-row items-start gap-4 py-5 pl-5 pr-4 sm:gap-5 sm:py-6 sm:pl-6",children:[(0,a.jsx)("div",{className:`mt-0.5 flex h-12 w-12 shrink-0 items-center justify-center rounded-2xl bg-gradient-to-br ${c} p-[1px] shadow-inner`,"aria-hidden":!0,children:(0,a.jsx)("div",{className:"flex h-full w-full items-center justify-center rounded-[0.9rem] bg-background/85 dark:bg-background/80",children:(0,a.jsx)(u,{className:"h-6 w-6 text-foreground"})})}),(0,a.jsxs)("div",{className:"min-w-0 flex-1 space-y-1.5 pr-2 pt-0.5",children:[(0,a.jsx)(A.ZB,{className:"text-lg font-bold leading-snug tracking-tight text-foreground sm:text-xl sm:leading-tight",children:e.title}),(0,a.jsx)(A.BT,{className:"line-clamp-2 text-xs font-normal leading-relaxed text-muted-foreground/90 sm:text-[0.8125rem] sm:leading-snug",children:e.description})]})]})]});return l?p:(0,a.jsx)(v(),{href:n,onClick:t=>{l?t.preventDefault():((0,j.kC)(e.id,e.title),d&&(t.preventDefault(),i.push(`/auth?redirect=${encodeURIComponent(e.publicPath)}`),s({title:"éè¦ç»å
¥",description:"æ¤å·¥å
·éè¦ç»å
¥å¾æè½ä½¿ç¨ï¼è«å
ç»å
¥æ¨ç帳è",variant:"default"})))},className:"group block rounded-2xl focus:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background",children:p})}function T({isAuthenticated:e,showAuthRequired:t=!0,isAdmin:r=!1}){let s=function(e){let t=[],r=[];for(let a of e)"æ°åè½"===a.badge?t.push(a):r.push(a);return[...t,...r]}(t?h:h.filter(t=>!t.requiresAuth||e));return(0,a.jsx)("div",{className:"grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 md:gap-8",children:s.map(t=>(0,a.jsx)(R,{tool:t,isAuthenticated:e,isAdmin:r},t.id))})}},14985:(e,t,r)=>{Promise.resolve().then(r.bind(r,17231))},17231:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>c});var a=r(85047),s=r(90930),i=r(44251),o=r(9842),l=r(26499),d=r(73521),n=r(39461);function c(){let{user:e}=(0,d.A)(),{isAdmin:t}=(0,n.q)();return(0,a.jsxs)("div",{className:"relative flex min-h-screen flex-col overflow-hidden",children:[(0,a.jsx)(l.J,{}),(0,a.jsxs)("div",{className:"relative z-10 flex flex-1 flex-col",children:[(0,a.jsx)(s.R,{}),(0,a.jsx)("main",{className:"flex-1",children:(0,a.jsx)("div",{className:"container mx-auto py-12 px-4 md:py-16",children:(0,a.jsxs)("div",{className:"space-y-10",children:[(0,a.jsxs)("header",{className:"space-y-2",children:[(0,a.jsx)("h1",{className:"text-3xl font-bold bg-gradient-to-r from-sky-600 via-violet-600 to-rose-600 bg-clip-text text-transparent dark:from-sky-300 dark:via-violet-300 dark:to-rose-300",children:"å·¥å
·"}),(0,a.jsx)("p",{className:"text-muted-foreground",children:"ç財試ç®èè¦åå·¥å
·"}),(0,a.jsx)("div",{className:"h-0.5 w-12 rounded-full bg-gradient-to-r from-sky-500 via-violet-500 to-rose-500","aria-hidden":!0})]}),(0,a.jsx)(o.y,{isAuthenticated:!!e,showAuthRequired:!0,isAdmin:t})]})})}),(0,a.jsx)(i.r,{})]})]})}},26499:(e,t,r)=>{"use strict";r.d(t,{J:()=>i});var a=r(85047),s=r(34961);function i({className:e}){return(0,a.jsxs)("div",{className:(0,s.cn)("absolute inset-0 -z-10",e),children:[(0,a.jsx)("div",{className:"h-full w-full bg-gradient-to-b from-background via-slate-100/30 to-background dark:from-background dark:via-slate-950/45 dark:to-background"}),(0,a.jsx)("div",{className:"absolute -right-44 -top-44 h-[44rem] w-[44rem] rounded-full bg-sky-4
100/20 blur-[120px] dark:bg-sky-500/12"}),(0,a.jsx)("div",{className:"absolute -bottom-52 -left-52 h-[48rem] w-[48rem] rounded-full bg-violet-400/18 blur-[130px] dark:bg-violet-500/12"}),(0,a.jsx)("div",{className:"absolute left-[16%] top-[18%] h-[34rem] w-[34rem] rounded-[5rem] bg-rose-400/14 blur-[110px] dark:bg-rose-500/10"}),(0,a.jsx)("div",{className:"absolute inset-0 opacity-[0.14] dark:opacity-[0.10] bg-[linear-gradient(115deg,transparent_0%,rgba(255,255,255,0.22)_34%,transparent_72%)]"}),(0,a.jsx)("div",{className:"absolute inset-0 opacity-[0.10] dark:opacity-[0.08] bg-[radial-gradient(circle_at_12%_10%,rgba(255,255,255,0.18),transparent_45%),radial-gradient(circle_at_82%_0%,rgba(255,255,255,0.12),transparent_52%),radial-gradient(circle_at_55%_96%,rgba(255,255,255,0.10),transparent_56%)]"}),(0,a.jsx)("div",{className:"absolute inset-0 opacity-[0.10] dark:opacity-[0.07] bg-[repeating-linear-gradient(0deg,rgba(255,255,255,0.08)_0px,rgba(255,255,255,0.08)_1px,transparent_1px,transparent_6px)]"})]})}},38187:(e,t,r)=>{"use strict";r.d(t,{E:()=>d});var a=r(85047),s=r(31615),i=r(63610),o=r(34961);let l=(0,i.F)("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}}),d=s.forwardRef(({className:e,variant:t,...r},s)=>(0,a.jsx)("div",{ref:s,className:(0,o.cn)(l({variant:t}),e),...r}));d.displayName="Badge"},39461:(e,t,r)=>{"use strict";r.d(t,{q:()=>d});var a=r(31615),s=r(73521),i=r(18654),o=r(24571),l=r(76458);function d(){let{user:e,loading:t}=(0,s.A)(),[d,n]=(0,a.useState)(!1),[c,u]=(0,a.useState)(!0),[p,f]=(0,a.useState)(null),m=(0,a.useCallback)(async()=>{if(!e)return n(!1),u(!1),!1;try{u(!0),f(null);try{let t=await (await Promise.resolve().then(r.bind(r,30274))).getIdTokenResult(e,!0),a=(t?.claims||{}).role;if(void 0!==a&&("admin"===a||!0===a))return n(!0),u(!1),!0}catch{}try{await e.getIdToken(!0)}catch{}if(!l.db)throw Error("Firestore æªåå§å");let t=(0,o.doc)(l.db,"users",e.uid),a=await (0,o.getDoc)(t);if(!a.exists()){for(let e=0;e<6&&(await new Promise(e=>setTimeout(e,500)),!(a=await (0,o.getDoc)(t)).exists());e++);if(!a.exists())throw Error("ç¨æ¶è³æä¸åå¨")}let s=a.data(),i=s?.role,d="string"==typeof i?i.toLowerCase().trim():!0===i?"admin":"user",c="admin"===d;return n(c),u(!1),c}catch(e){return(0,i.vV)("檢æ¥ç®¡ç塿¬éé¯èª¤:",e),f(e.message||"æ¬é檢æ¥å¤±æ"),n(!1),u(!1),!1}},[e]);return(0,a.useEffect)(()=>{t||(e?m():(n(!1),u(!1),f(null)))},[e,t,m]),{isAdmin:d,isLoading:c,error:p,checkPermission:m}}},41178:(e,t,r)=>{"use strict";r.d(t,{dj:()=>f});var a=r(31615),s=r(28979),i=r(8958);let o=0,l=new Map,d=e=>{if(l.has(e))return;let t=setTimeout(()=>{l.delete(e),u({type:"REMOVE_TOAST",toastId:e})},3e3);l.set(e,t)},n=[],c={toasts:[]};function u(e){c=((e,t)=>{switch(t.type){case"ADD_TOAST":return{...e,toasts:[t.toast,...e.toasts].slice(0,1)};case"UPDATE_TOAST":return{...e,toasts:e.toasts.map(e=>e.id===t.toast.id?{...e,...t.toast}:e)};case"DISMISS_TOAST":{let{toastId:r}=t;return r?d(r):e.toasts.forEach(e=>{d(e.id)}),{...e,toasts:e.toasts.map(e=>e.id===r||void 0===r?{...e,open:!1}:e)}}case"REMOVE_TOAST":if(void 0===t.toastId)return{...e,toasts:[]};return{...e,toasts:e.toasts.filter(e=>e.id!==t.toastId)}}})(c,e),n.forEach(e=>{e(c)})}function p({...e}){var t;let r,a=(o=(o+1)%Number.MAX_VALUE).toString(),l=()=>u({type:"DISMISS_TOAST",toastId:a});return t=e.variant,r=function(){try{let e=localStorage.getItem(i.RZ);if(e){let t=JSON.parse(e);return{enabled:t.enabled??i.wK.enabled,categories:{alerts:t.categories?.alerts??i.wK.categories.alerts,tasks:t.categories?.tasks??i.wK.categories.tasks},volume:t.volume??i.wK.volume}}}catch(e){}return i.wK}(),"destructive"===t&&s.jY.playSound("ERROR",r).catch(()=>{}),u({type:"ADD_TOAST",toast:{...e,id:a,open:!0,onOpenChange:e=>{e||l()}}}
1),{id:a,dismiss:l,update:e=>u({type:"UPDATE_TOAST",toast:{...e,id:a}})}}function f(){let[e,t]=a.useState(c);return a.useEffect(()=>(n.push(t),()=>{let e=n.indexOf(t);e>-1&&n.splice(e,1)}),[e]),{...e,toast:p,dismiss:e=>u({type:"DISMISS_TOAST",toastId:e})}}},82520:(e,t,r)=>{"use strict";r.d(t,{BT:()=>n,Wu:()=>c,ZB:()=>d,Zp:()=>o,aR:()=>l,wL:()=>u});var a=r(85047),s=r(31615),i=r(34961);let o=s.forwardRef(({className:e,...t},r)=>(0,a.jsx)("div",{ref:r,className:(0,i.cn)("rounded-xl border bg-card text-card-foreground shadow",e),...t}));o.displayName="Card";let l=s.forwardRef(({className:e,...t},r)=>(0,a.jsx)("div",{ref:r,className:(0,i.cn)("flex flex-col space-y-1.5 p-6",e),...t}));l.displayName="CardHeader";let d=s.forwardRef(({className:e,...t},r)=>(0,a.jsx)("h3",{ref:r,className:(0,i.cn)("font-semibold leading-none tracking-tight",e),...t}));d.displayName="CardTitle";let n=s.forwardRef(({className:e,...t},r)=>(0,a.jsx)("p",{ref:r,className:(0,i.cn)("text-sm text-muted-foreground",e),...t}));n.displayName="CardDescription";let c=s.forwardRef(({className:e,...t},r)=>(0,a.jsx)("div",{ref:r,className:(0,i.cn)("p-6 pt-0",e),...t}));c.displayName="CardContent";let u=s.forwardRef(({className:e,...t},r)=>(0,a.jsx)("div",{ref:r,className:(0,i.cn)("flex items-center p-6 pt-0",e),...t}));u.displayName="CardFooter"}},e=>{e.O(0,[6062,8721,2811,6277,274,9291,6052,7629,5418,7355,8133,8594,6821,6620,2931,5120,3787,6162,4498,972,5035,3118,1936,7358],()=>e(e.s=14985)),_N_E=e.O()}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.