From 96f20dc7e53123777e72d54f79378c2f70266f58 Mon Sep 17 00:00:00 2001 From: Caio1w <206350051+Caio1w@users.noreply.github.com> Date: Wed, 29 Oct 2025 22:21:53 -0300 Subject: [PATCH] Corrgi as coisas --- web/assets/index-DvM4Z6IE.css | 1 + web/assets/{index-Bjw0bkiN.js => index-_Uo-jrdC.js} | 2 +- web/assets/index-q99ZrbEv.css | 1 - web/index.html | 4 ++-- 4 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 web/assets/index-DvM4Z6IE.css rename web/assets/{index-Bjw0bkiN.js => index-_Uo-jrdC.js} (73%) delete mode 100644 web/assets/index-q99ZrbEv.css diff --git a/web/assets/index-DvM4Z6IE.css b/web/assets/index-DvM4Z6IE.css new file mode 100644 index 0000000..dd988ca --- /dev/null +++ b/web/assets/index-DvM4Z6IE.css @@ -0,0 +1 @@ +.bg-especial[data-v-b6bce1a4]{background-color:#1a3b5e}.btn-success[data-v-b6bce1a4]{background-color:#2ecc71;border-color:#2ecc71}.btn-success[data-v-b6bce1a4]:hover{background-color:#26a95f;border-color:#26a95f}.text-primary[data-v-b6bce1a4]{color:#1a3b5e!important}.bg-dark-footer[data-v-7ea2c5b6]{background-color:#1a3b5e}.text-white-footer[data-v-7ea2c5b6]{color:#fff!important}.text-secondary-footer[data-v-7ea2c5b6]{color:#c0ccda!important;transition:color .2s}.text-success-footer[data-v-7ea2c5b6]{color:#2ecc71!important}.text-secondary-footer[data-v-7ea2c5b6]:hover{color:#fff!important}.text-success-footer[data-v-7ea2c5b6]:hover{color:#34d399!important}.border-secondary-footer[data-v-7ea2c5b6]{border-color:#ffffff1a!important}.main-no-gap[data-v-ab903d66]{margin-top:0;padding-top:0}.bg-especial[data-v-ab903d66]{background-color:#122942}.btn-success[data-v-ab903d66]{background-color:#2ecc71;border-color:#2ecc71}.btn-success[data-v-ab903d66]:hover{background-color:#26a95f;border-color:#26a95f}.text-secondary[data-v-ab903d66]{color:#d1d5db!important}.text-primary-dark[data-v-ab903d66]{color:#1a3b5e!important}.text-success-feature[data-v-ab903d66]{color:#2ecc71!important}.text-dark-feature[data-v-ab903d66]{color:#343a40!important}.text-secondary-feature[data-v-ab903d66]{color:#6c757d!important}.bg-primary-dark[data-v-cb189098]{background-color:#1a3b5e!important}.text-primary-dark[data-v-cb189098]{color:#1a3b5e!important}.text-success-feature[data-v-cb189098],.hover-success-feature[data-v-cb189098]:hover{color:#2ecc71!important}.navbar-brand[data-v-cb189098]{display:flex;align-items:center}.logo-align[data-v-cb189098]{vertical-align:middle}@media(max-width:767.98px){.navbar-collapse[data-v-cb189098]{padding-bottom:1rem}.btn-outline-light[data-v-cb189098]{margin-top:.5rem;border-color:#ffffff80;color:#fffc}.btn-outline-light[data-v-cb189098]:hover{background-color:#ffffff1a;color:#fff}}.position-relative .bg-danger[data-v-cb189098]{font-size:.6rem;min-width:18px;height:18px;display:flex;align-items:center;justify-content:center}.bg-primary-dark[data-v-e51a257a]{background-color:#1a3b5e!important}.text-primary-dark[data-v-e51a257a]{color:#1a3b5e!important}.bg-success-feature[data-v-e51a257a]{background-color:#2ecc71!important}.text-success-feature[data-v-e51a257a]{color:#2ecc71!important}.max-w-7xl[data-v-e51a257a]{max-width:80rem}.mx-auto[data-v-e51a257a]{margin-left:auto!important;margin-right:auto!important}.btn-outline-primary.active[data-v-e51a257a]{background-color:#1a3b5e;border-color:#1a3b5e;color:#fff}.transaction-info[data-v-e51a257a]{flex:1;text-align:left}.chart-container[data-v-e51a257a]{background-color:#fff;border:1px solid #e9ecef}.border-dashed[data-v-e51a257a]{border-style:dashed!important}.text-primary-dark[data-v-4211987f]{color:#1a3b5e!important}.text-secondary-dark[data-v-4211987f]{color:#6c757d!important}.login-container[data-v-4211987f]{background-color:#f8f9fa}.login-card[data-v-4211987f]{max-width:420px;width:100%}.btn-primary-feature[data-v-4211987f]{background-color:#1a3b5e;border-color:#1a3b5e;color:#fff;transition:background-color .2s}.btn-primary-feature[data-v-4211987f]:hover:not(:disabled){background-color:#29517b;border-color:#29517b}.btn-primary-feature[data-v-4211987f]:disabled{opacity:.6}.form-control[data-v-4211987f]:focus{border-color:#1a3b5e;box-shadow:0 0 0 .25rem #1a3b5e40}.input-group-text[data-v-4211987f]{background-color:#e9ecef;border-right:none;color:#1a3b5e}.hover-link[data-v-4211987f]:hover{text-decoration:underline!important}.text-primary-dark[data-v-4c8cc0c5]{color:#1a3b5e!important}.text-secondary-dark[data-v-4c8cc0c5]{color:#6c757d!important}.cadastro-container[data-v-4c8cc0c5]{background-color:#f8f9fa}.cadastro-card[data-v-4c8cc0c5]{max-width:450px;width:100%}.btn-primary-feature[data-v-4c8cc0c5]{background-color:#1a3b5e;border-color:#1a3b5e;color:#fff;transition:background-color .2s}.btn-primary-feature[data-v-4c8cc0c5]:hover:not(:disabled){background-color:#29517b;border-color:#29517b}.btn-primary-feature[data-v-4c8cc0c5]:disabled{opacity:.6}.form-control[data-v-4c8cc0c5]:focus{border-color:#1a3b5e;box-shadow:0 0 0 .25rem #1a3b5e40}.input-group-text[data-v-4c8cc0c5]{background-color:#e9ecef;border-right:none;color:#1a3b5e}.bg-primary-dark[data-v-be477c64]{background-color:#1a3b5e!important}.text-primary-dark[data-v-be477c64]{color:#1a3b5e!important}.bg-success-feature[data-v-be477c64]{background-color:#2ecc71!important}.text-success-feature[data-v-be477c64]{color:#2ecc71!important}.btn-outline-success-feature[data-v-be477c64]{--bs-btn-color: #2ECC71;--bs-btn-border-color: #2ECC71;--bs-btn-hover-bg: #2ECC71;--bs-btn-hover-border-color: #2ECC71;--bs-btn-active-bg: #2ECC71;--bs-btn-active-border-color: #2ECC71;--bs-btn-active-color: white}.btn-primary-dark-feature[data-v-be477c64]{background-color:#1a3b5e;color:#fff;border-color:#1a3b5e}.btn-primary-dark-feature[data-v-be477c64]:hover:not(:disabled){background-color:#122841;border-color:#122841;color:#fff}.btn-primary-dark-feature[data-v-be477c64]:disabled{opacity:.6;cursor:not-allowed}.max-w-7xl[data-v-be477c64]{max-width:80rem}.mx-auto[data-v-be477c64]{margin-left:auto!important;margin-right:auto!important}.modal-overlay[data-v-be477c64]{position:fixed;inset:0;background-color:#00000080;display:flex;justify-content:center;align-items:center;z-index:1000}.modal-container[data-v-be477c64]{width:100%;max-width:500px;margin:20px}.modal-content[data-v-be477c64]{background:#fff;border-radius:8px;box-shadow:0 10px 30px #0000004d;animation:modalAppear-be477c64 .3s ease-out}@keyframes modalAppear-be477c64{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}.modal-header[data-v-be477c64]{border-bottom:1px solid #dee2e6;padding:1rem 1.5rem}.modal-body[data-v-be477c64]{padding:1.5rem;max-height:70vh;overflow-y:auto}.modal-footer[data-v-be477c64]{border-top:1px solid #dee2e6;padding:1rem 1.5rem}.btn-group .btn.active[data-v-be477c64]{background-color:inherit;border-color:inherit;color:inherit}.btn-outline-success-feature.active[data-v-be477c64]{background-color:#2ecc71;color:#fff}.btn-outline-danger.active[data-v-be477c64]{background-color:#dc3545;color:#fff}.badge[data-v-be477c64]{font-size:.75em;padding:.35em .65em}.btn-outline-danger[data-v-be477c64]{border-color:#dc3545;color:#dc3545}.btn-outline-danger[data-v-be477c64]:hover{background-color:#dc3545;color:#fff}.bg-primary-dark[data-v-c3d65fed]{background-color:#1a3b5e!important}.text-primary-dark[data-v-c3d65fed]{color:#1a3b5e!important}.btn-primary-feature[data-v-c3d65fed]{background-color:#1a3b5e!important;border-color:#1a3b5e!important;color:#fff}.btn-primary-feature[data-v-c3d65fed]:disabled{opacity:.6;cursor:not-allowed}.btn-success-feature[data-v-c3d65fed]{background-color:#2ecc71!important;border-color:#2ecc71!important;color:#fff}.active-feature[data-v-c3d65fed]{background-color:#1a3b5e!important;color:#fff!important}.max-w-7xl[data-v-c3d65fed]{max-width:80rem}.mx-auto[data-v-c3d65fed]{margin-left:auto!important;margin-right:auto!important}.modal-backdrop[data-v-c3d65fed]{opacity:.5}.form-control[data-v-c3d65fed]:focus{border-color:#1a3b5e;box-shadow:0 0 0 .25rem #1a3b5e40}.list-group-item[data-v-c3d65fed]{border:1px solid #dee2e6;margin-bottom:5px}.form-control-color[data-v-c3d65fed]{width:50px;height:38px}.bg-primary-dark[data-v-ce95d114]{background-color:#1a3b5e!important}.text-primary-dark[data-v-ce95d114]{color:#1a3b5e!important}.text-success-feature[data-v-ce95d114]{color:#2ecc71!important}.btn-success-feature[data-v-ce95d114]{background-color:#2ecc71!important;border-color:#2ecc71!important;color:#fff}.max-w-7xl[data-v-ce95d114]{max-width:80rem}.mx-auto[data-v-ce95d114]{margin-left:auto!important;margin-right:auto!important}.bg-primary-dark[data-v-eacca1cc]{background-color:#1a3b5e!important}.text-primary-dark[data-v-eacca1cc]{color:#1a3b5e!important}.text-success-feature[data-v-eacca1cc]{color:#2ecc71!important}.btn-success-feature[data-v-eacca1cc]{background-color:#2ecc71!important;border-color:#2ecc71!important;color:#fff}.max-w-7xl[data-v-eacca1cc]{max-width:80rem}.mx-auto[data-v-eacca1cc]{margin-left:auto!important;margin-right:auto!important}.accordion-button[data-v-eacca1cc]:not(.collapsed){color:#fff!important;background-color:#1a3b5e!important;box-shadow:none}.accordion-button[data-v-eacca1cc]:focus{box-shadow:none;border-color:#1a3b5e} diff --git a/web/assets/index-Bjw0bkiN.js b/web/assets/index-_Uo-jrdC.js similarity index 73% rename from web/assets/index-Bjw0bkiN.js rename to web/assets/index-_Uo-jrdC.js index da02fa9..95bde2d 100644 --- a/web/assets/index-Bjw0bkiN.js +++ b/web/assets/index-_Uo-jrdC.js @@ -22,4 +22,4 @@ * vue-router v4.6.3 * (c) 2025 Eduardo San Martin Morote * @license MIT - */let Ac=()=>location.protocol+"//"+location.host;function hi(e,t){const{pathname:s,search:n,hash:o}=t,r=e.indexOf("#");if(r>-1){let i=o.includes(e.slice(r))?e.slice(r).length:1,l=o.slice(i);return l[0]!=="/"&&(l="/"+l),Lo(l,"")}return Lo(s,e)+n+o}function Rc(e,t,s,n){let o=[],r=[],i=null;const l=({state:g})=>{const v=hi(e,location),E=s.value,x=t.value;let $=0;if(g){if(s.value=v,t.value=g,i&&i===E){i=null;return}$=x?g.position-x.position:0}else n(v);o.forEach(O=>{O(s.value,E,{delta:$,type:Nn.pop,direction:$?$>0?bn.forward:bn.back:bn.unknown})})};function a(){i=s.value}function u(g){o.push(g);const v=()=>{const E=o.indexOf(g);E>-1&&o.splice(E,1)};return r.push(v),v}function d(){if(document.visibilityState==="hidden"){const{history:g}=window;if(!g.state)return;g.replaceState(ie({},g.state,{scroll:on()}),"")}}function p(){for(const g of r)g();r=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",d),document.removeEventListener("visibilitychange",d)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",d),document.addEventListener("visibilitychange",d),{pauseListeners:a,listen:u,destroy:p}}function Go(e,t,s,n=!1,o=!1){return{back:e,current:t,forward:s,replaced:n,position:window.history.length,scroll:o?on():null}}function Tc(e){const{history:t,location:s}=window,n={value:hi(e,s)},o={value:t.state};o.value||r(n.value,{back:null,current:n.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function r(a,u,d){const p=e.indexOf("#"),g=p>-1?(s.host&&document.querySelector("base")?e:e.slice(p))+a:Ac()+e+a;try{t[d?"replaceState":"pushState"](u,"",g),o.value=u}catch(v){console.error(v),s[d?"replace":"assign"](g)}}function i(a,u){r(a,ie({},t.state,Go(o.value.back,a,o.value.forward,!0),u,{position:o.value.position}),!0),n.value=a}function l(a,u){const d=ie({},o.value,t.state,{forward:a,scroll:on()});r(d.current,d,!0),r(a,ie({},Go(n.value,a,null),{position:d.position+1},u),!1),n.value=a}return{location:n,state:o,push:l,replace:i}}function Oc(e){e=fc(e);const t=Tc(e),s=Rc(e,t.state,t.location,t.replace);function n(r,i=!0){i||s.pauseListeners(),history.go(r)}const o=ie({location:"",base:e,go:n,createHref:mc.bind(null,e)},t,s);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}let It=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var xe=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(xe||{});const Pc={type:It.Static,value:""},Ic=/[a-zA-Z0-9_]/;function Nc(e){if(!e)return[[]];if(e==="/")return[[Pc]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(v){throw new Error(`ERR (${s})/"${u}": ${v}`)}let s=xe.Static,n=s;const o=[];let r;function i(){r&&o.push(r),r=[]}let l=0,a,u="",d="";function p(){u&&(s===xe.Static?r.push({type:It.Static,value:u}):s===xe.Param||s===xe.ParamRegExp||s===xe.ParamRegExpEnd?(r.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),r.push({type:It.Param,value:u,regexp:d,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),u="")}function g(){u+=a}for(;lt.length?t.length===1&&t[0]===Ie.Static+Ie.Segment?1:-1:0}function gi(e,t){let s=0;const n=e.score,o=t.score;for(;s0&&t[t.length-1]<0}const Vc={strict:!1,end:!0,sensitive:!1};function jc(e,t,s){const n=Dc(Nc(e.path),s),o=ie(n,{record:e,parent:t,children:[],alias:[]});return t&&!o.record.aliasOf==!t.record.aliasOf&&t.children.push(o),o}function Fc(e,t){const s=[],n=new Map;t=Fo(Vc,t);function o(p){return n.get(p)}function r(p,g,v){const E=!v,x=zo(p);x.aliasOf=v&&v.record;const $=Fo(t,p),O=[x];if("alias"in p){const V=typeof p.alias=="string"?[p.alias]:p.alias;for(const se of V)O.push(zo(ie({},x,{components:v?v.record.components:x.components,path:se,aliasOf:v?v.record:x})))}let I,L;for(const V of O){const{path:se}=V;if(g&&se[0]!=="/"){const K=g.record.path,S=K[K.length-1]==="/"?"":"/";V.path=g.record.path+(se&&S+se)}if(I=jc(V,g,$),v?v.alias.push(I):(L=L||I,L!==I&&L.alias.push(I),E&&p.name&&!Xo(I)&&i(p.name)),vi(I)&&a(I),x.children){const K=x.children;for(let S=0;S{i(L)}:ps}function i(p){if(pi(p)){const g=n.get(p);g&&(n.delete(p),s.splice(s.indexOf(g),1),g.children.forEach(i),g.alias.forEach(i))}else{const g=s.indexOf(p);g>-1&&(s.splice(g,1),p.record.name&&n.delete(p.record.name),p.children.forEach(i),p.alias.forEach(i))}}function l(){return s}function a(p){const g=Hc(p,s);s.splice(g,0,p),p.record.name&&!Xo(p)&&n.set(p.record.name,p)}function u(p,g){let v,E={},x,$;if("name"in p&&p.name){if(v=n.get(p.name),!v)throw Yt(be.MATCHER_NOT_FOUND,{location:p});$=v.record.name,E=ie(Jo(g.params,v.keys.filter(L=>!L.optional).concat(v.parent?v.parent.keys.filter(L=>L.optional):[]).map(L=>L.name)),p.params&&Jo(p.params,v.keys.map(L=>L.name))),x=v.stringify(E)}else if(p.path!=null)x=p.path,v=s.find(L=>L.re.test(x)),v&&(E=v.parse(x),$=v.record.name);else{if(v=g.name?n.get(g.name):s.find(L=>L.re.test(g.path)),!v)throw Yt(be.MATCHER_NOT_FOUND,{location:p,currentLocation:g});$=v.record.name,E=ie({},g.params,p.params),x=v.stringify(E)}const O=[];let I=v;for(;I;)O.unshift(I.record),I=I.parent;return{name:$,path:x,params:E,matched:O,meta:Uc(O)}}e.forEach(p=>r(p));function d(){s.length=0,n.clear()}return{addRoute:r,resolve:u,removeRoute:i,clearRoutes:d,getRoutes:l,getRecordMatcher:o}}function Jo(e,t){const s={};for(const n of t)n in e&&(s[n]=e[n]);return s}function zo(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Lc(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Lc(e){const t={},s=e.props||!1;if("component"in e)t.default=s;else for(const n in e.components)t[n]=typeof s=="object"?s[n]:s;return t}function Xo(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Uc(e){return e.reduce((t,s)=>ie(t,s.meta),{})}function Hc(e,t){let s=0,n=t.length;for(;s!==n;){const r=s+n>>1;gi(e,t[r])<0?n=r:s=r+1}const o=Bc(e);return o&&(n=t.lastIndexOf(o,n-1)),n}function Bc(e){let t=e;for(;t=t.parent;)if(vi(t)&&gi(e,t)===0)return t}function vi({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Qo(e){const t=We(rn),s=We(Zn),n=Ve(()=>{const a=ft(e.to);return t.resolve(a)}),o=Ve(()=>{const{matched:a}=n.value,{length:u}=a,d=a[u-1],p=s.matched;if(!d||!p.length)return-1;const g=p.findIndex(Qt.bind(null,d));if(g>-1)return g;const v=Yo(a[u-2]);return u>1&&Yo(d)===v&&p[p.length-1].path!==v?p.findIndex(Qt.bind(null,a[u-2])):g}),r=Ve(()=>o.value>-1&&Jc(s.params,n.value.params)),i=Ve(()=>o.value>-1&&o.value===s.matched.length-1&&fi(s.params,n.value.params));function l(a={}){if(Wc(a)){const u=t[ft(e.replace)?"replace":"push"](ft(e.to)).catch(ps);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>u),u}return Promise.resolve()}return{route:n,href:Ve(()=>n.value.href),isActive:r,isExactActive:i,navigate:l}}function qc(e){return e.length===1?e[0]:e}const Gc=Ir({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Qo,setup(e,{slots:t}){const s=Qs(Qo(e)),{options:n}=We(rn),o=Ve(()=>({[Zo(e.activeClass,n.linkActiveClass,"router-link-active")]:s.isActive,[Zo(e.exactActiveClass,n.linkExactActiveClass,"router-link-exact-active")]:s.isExactActive}));return()=>{const r=t.default&&qc(t.default(s));return e.custom?r:oi("a",{"aria-current":s.isExactActive?e.ariaCurrentValue:null,href:s.href,onClick:s.navigate,class:o.value},r)}}}),Kc=Gc;function Wc(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Jc(e,t){for(const s in t){const n=t[s],o=e[s];if(typeof n=="string"){if(n!==o)return!1}else if(!Je(o)||o.length!==n.length||n.some((r,i)=>r!==o[i]))return!1}return!0}function Yo(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Zo=(e,t,s)=>e??t??s,zc=Ir({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:s}){const n=We($n),o=Ve(()=>e.route||n.value),r=We(qo,0),i=Ve(()=>{let u=ft(r);const{matched:d}=o.value;let p;for(;(p=d[u])&&!p.components;)u++;return u}),l=Ve(()=>o.value.matched[i.value]);Ps(qo,Ve(()=>i.value+1)),Ps(Sc,l),Ps($n,o);const a=Q();return ds(()=>[a.value,l.value,e.name],([u,d,p],[g,v,E])=>{d&&(d.instances[p]=u,v&&v!==d&&u&&u===g&&(d.leaveGuards.size||(d.leaveGuards=v.leaveGuards),d.updateGuards.size||(d.updateGuards=v.updateGuards))),u&&d&&(!v||!Qt(d,v)||!g)&&(d.enterCallbacks[p]||[]).forEach(x=>x(u))},{flush:"post"}),()=>{const u=o.value,d=e.name,p=l.value,g=p&&p.components[d];if(!g)return er(s.default,{Component:g,route:u});const v=p.props[d],E=v?v===!0?u.params:typeof v=="function"?v(u):v:null,$=oi(g,ie({},E,t,{onVnodeUnmounted:O=>{O.component.isUnmounted&&(p.instances[d]=null)},ref:a}));return er(s.default,{Component:$,route:u})||$}}});function er(e,t){if(!e)return null;const s=e(t);return s.length===1?s[0]:s}const Xc=zc;function Qc(e){const t=Fc(e.routes,e),s=e.parseQuery||wc,n=e.stringifyQuery||Bo,o=e.history,r=ns(),i=ns(),l=ns(),a=Zi(bt);let u=bt;Lt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=gn.bind(null,w=>""+w),p=gn.bind(null,rc),g=gn.bind(null,_s);function v(w,M){let N,H;return pi(w)?(N=t.getRecordMatcher(w),H=M):H=w,t.addRoute(H,N)}function E(w){const M=t.getRecordMatcher(w);M&&t.removeRoute(M)}function x(){return t.getRoutes().map(w=>w.record)}function $(w){return!!t.getRecordMatcher(w)}function O(w,M){if(M=ie({},M||a.value),typeof w=="string"){const h=vn(s,w,M.path),_=t.resolve({path:h.path},M),C=o.createHref(h.fullPath);return ie(h,_,{params:g(_.params),hash:_s(h.hash),redirectedFrom:void 0,href:C})}let N;if(w.path!=null)N=ie({},w,{path:vn(s,w.path,M.path).path});else{const h=ie({},w.params);for(const _ in h)h[_]==null&&delete h[_];N=ie({},w,{params:p(h)}),M.params=p(M.params)}const H=t.resolve(N,M),ee=w.hash||"";H.params=d(g(H.params));const f=ac(n,ie({},w,{hash:sc(ee),path:H.path})),m=o.createHref(f);return ie({fullPath:f,hash:ee,query:n===Bo?Cc(w.query):w.query||{}},H,{redirectedFrom:void 0,href:m})}function I(w){return typeof w=="string"?vn(s,w,a.value.path):ie({},w)}function L(w,M){if(u!==w)return Yt(be.NAVIGATION_CANCELLED,{from:M,to:w})}function V(w){return S(w)}function se(w){return V(ie(I(w),{replace:!0}))}function K(w,M){const N=w.matched[w.matched.length-1];if(N&&N.redirect){const{redirect:H}=N;let ee=typeof H=="function"?H(w,M):H;return typeof ee=="string"&&(ee=ee.includes("?")||ee.includes("#")?ee=I(ee):{path:ee},ee.params={}),ie({query:w.query,hash:w.hash,params:ee.path!=null?{}:w.params},ee)}}function S(w,M){const N=u=O(w),H=a.value,ee=w.state,f=w.force,m=w.replace===!0,h=K(N,H);if(h)return S(ie(I(h),{state:typeof h=="object"?ie({},ee,h.state):ee,force:f,replace:m}),M||N);const _=N;_.redirectedFrom=M;let C;return!f&&cc(n,H,N)&&(C=Yt(be.NAVIGATION_DUPLICATED,{to:_,from:H}),ze(H,H,!0,!1)),(C?Promise.resolve(C):ne(_,H)).catch(y=>lt(y)?lt(y,be.NAVIGATION_GUARD_REDIRECT)?y:vt(y):re(y,_,H)).then(y=>{if(y){if(lt(y,be.NAVIGATION_GUARD_REDIRECT))return S(ie({replace:m},I(y.to),{state:typeof y.to=="object"?ie({},ee,y.to.state):ee,force:f}),M||_)}else y=b(_,H,!0,m,ee);return X(_,H,y),y})}function D(w,M){const N=L(w,M);return N?Promise.reject(N):Promise.resolve()}function oe(w){const M=Vt.values().next().value;return M&&typeof M.runWithContext=="function"?M.runWithContext(w):w()}function ne(w,M){let N;const[H,ee,f]=Ec(w,M);N=yn(H.reverse(),"beforeRouteLeave",w,M);for(const h of H)h.leaveGuards.forEach(_=>{N.push(xt(_,w,M))});const m=D.bind(null,w,M);return N.push(m),He(N).then(()=>{N=[];for(const h of r.list())N.push(xt(h,w,M));return N.push(m),He(N)}).then(()=>{N=yn(ee,"beforeRouteUpdate",w,M);for(const h of ee)h.updateGuards.forEach(_=>{N.push(xt(_,w,M))});return N.push(m),He(N)}).then(()=>{N=[];for(const h of f)if(h.beforeEnter)if(Je(h.beforeEnter))for(const _ of h.beforeEnter)N.push(xt(_,w,M));else N.push(xt(h.beforeEnter,w,M));return N.push(m),He(N)}).then(()=>(w.matched.forEach(h=>h.enterCallbacks={}),N=yn(f,"beforeRouteEnter",w,M,oe),N.push(m),He(N))).then(()=>{N=[];for(const h of i.list())N.push(xt(h,w,M));return N.push(m),He(N)}).catch(h=>lt(h,be.NAVIGATION_CANCELLED)?h:Promise.reject(h))}function X(w,M,N){l.list().forEach(H=>oe(()=>H(w,M,N)))}function b(w,M,N,H,ee){const f=L(w,M);if(f)return f;const m=M===bt,h=Lt?history.state:{};N&&(H||m?o.replace(w.fullPath,ie({scroll:m&&h&&h.scroll},ee)):o.push(w.fullPath,ee)),a.value=w,ze(w,M,N,m),vt()}let j;function At(){j||(j=o.listen((w,M,N)=>{if(!Rt.listening)return;const H=O(w),ee=K(H,Rt.currentRoute.value);if(ee){S(ie(ee,{replace:!0,force:!0}),H).catch(ps);return}u=H;const f=a.value;Lt&&vc(Ho(f.fullPath,N.delta),on()),ne(H,f).catch(m=>lt(m,be.NAVIGATION_ABORTED|be.NAVIGATION_CANCELLED)?m:lt(m,be.NAVIGATION_GUARD_REDIRECT)?(S(ie(I(m.to),{force:!0}),H).then(h=>{lt(h,be.NAVIGATION_ABORTED|be.NAVIGATION_DUPLICATED)&&!N.delta&&N.type===Nn.pop&&o.go(-1,!1)}).catch(ps),Promise.reject()):(N.delta&&o.go(-N.delta,!1),re(m,H,f))).then(m=>{m=m||b(H,f,!1),m&&(N.delta&&!lt(m,be.NAVIGATION_CANCELLED)?o.go(-N.delta,!1):N.type===Nn.pop&<(m,be.NAVIGATION_ABORTED|be.NAVIGATION_DUPLICATED)&&o.go(-1,!1)),X(H,f,m)}).catch(ps)}))}let Dt=ns(),we=ns(),ue;function re(w,M,N){vt(w);const H=we.list();return H.length?H.forEach(ee=>ee(w,M,N)):console.error(w),Promise.reject(w)}function rt(){return ue&&a.value!==bt?Promise.resolve():new Promise((w,M)=>{Dt.add([w,M])})}function vt(w){return ue||(ue=!w,At(),Dt.list().forEach(([M,N])=>w?N(w):M()),Dt.reset()),w}function ze(w,M,N,H){const{scrollBehavior:ee}=e;if(!Lt||!ee)return Promise.resolve();const f=!N&&bc(Ho(w.fullPath,0))||(H||!N)&&history.state&&history.state.scroll||null;return Kn().then(()=>ee(w,M,f)).then(m=>m&&gc(m)).catch(m=>re(m,w,M))}const ke=w=>o.go(w);let Mt;const Vt=new Set,Rt={currentRoute:a,listening:!0,addRoute:v,removeRoute:E,clearRoutes:t.clearRoutes,hasRoute:$,getRoutes:x,resolve:O,options:e,push:V,replace:se,go:ke,back:()=>ke(-1),forward:()=>ke(1),beforeEach:r.add,beforeResolve:i.add,afterEach:l.add,onError:we.add,isReady:rt,install(w){w.component("RouterLink",Kc),w.component("RouterView",Xc),w.config.globalProperties.$router=Rt,Object.defineProperty(w.config.globalProperties,"$route",{enumerable:!0,get:()=>ft(a)}),Lt&&!Mt&&a.value===bt&&(Mt=!0,V(o.location).catch(H=>{}));const M={};for(const H in bt)Object.defineProperty(M,H,{get:()=>a.value[H],enumerable:!0});w.provide(rn,Rt),w.provide(Zn,Cr(M)),w.provide($n,a);const N=w.unmount;Vt.add(w),w.unmount=function(){Vt.delete(w),Vt.size<1&&(u=bt,j&&j(),j=null,a.value=bt,Mt=!1,ue=!1),N()}}};function He(w){return w.reduce((M,N)=>M.then(()=>oe(N)),Promise.resolve())}return Rt}function Zt(){return We(rn)}function Yc(e){return We(Zn)}const Zc="/assets/Hero-C0gOcyj1.png",eo="/assets/CtrlCash-white-CJM1Egrh.png",eu={},tu={class:"container-fluid"},su={class:"collapse navbar-collapse",id:"navbarNav"},nu={class:"navbar-nav ms-auto align-items-center"};function ou(e,t,s,n,o,r){const i=$t("router-link");return F(),U("header",null,[c("nav",{class:ge(["navbar navbar-expand-lg px-3",["bg-especial","navbar-dark"]])},[c("div",tu,[z(i,{class:"navbar-brand p-0",to:"/"},{default:Ee(()=>[...t[0]||(t[0]=[c("img",{src:eo,alt:"CtrlCash Logo",width:"140",height:"40"},null,-1)])]),_:1}),t[5]||(t[5]=c("button",{class:"navbar-toggler",type:"button","data-bs-toggle":"collapse","data-bs-target":"#navbarNav","aria-controls":"navbarNav","aria-expanded":"false","aria-label":"Toggle navigation"},[c("span",{class:"navbar-toggler-icon"})],-1)),c("div",su,[c("div",nu,[z(i,{to:"/about",class:"nav-link"},{default:Ee(()=>[...t[1]||(t[1]=[Z("Sobre nós",-1)])]),_:1}),z(i,{to:"/help",class:"nav-link me-3"},{default:Ee(()=>[...t[2]||(t[2]=[Z("Ajuda",-1)])]),_:1}),z(i,{to:"/cadastro",class:"btn btn-success me-2"},{default:Ee(()=>[...t[3]||(t[3]=[Z("Abrir Conta",-1)])]),_:1}),z(i,{to:"/login",class:"btn btn-light text-primary"},{default:Ee(()=>[...t[4]||(t[4]=[Z("Login",-1)])]),_:1})])])])])])}const Es=Ge(eu,[["render",ou],["__scopeId","data-v-b6bce1a4"]]),ru={},iu={class:"bg-dark-footer text-white pt-5 pb-3"},lu={class:"container"},au={class:"row g-4"},cu={class:"col-md-2 col-6"},uu={class:"list-unstyled"},du={class:"mb-2"},fu={class:"mb-2"},pu={class:"mb-2"};function mu(e,t){const s=$t("router-link");return F(),U("footer",iu,[c("div",lu,[c("div",au,[t[4]||(t[4]=c("div",{class:"col-md-4 col-12"},[c("img",{src:eo,alt:"CtrlCash Logo",width:"120",height:"35",class:"mb-3"}),c("p",{class:"text-secondary-footer mt-2"}," Seu dinheiro. Seu controle total. "),c("p",{class:"text-secondary-footer small"}," Um projeto acadêmico de finanças inovadoras. ")],-1)),c("div",cu,[t[3]||(t[3]=c("h5",{class:"fw-bold text-white-footer mb-3"},"Navegue",-1)),c("ul",uu,[c("li",du,[z(s,{to:"/",class:"text-secondary-footer text-decoration-none"},{default:Ee(()=>[...t[0]||(t[0]=[Z("Início",-1)])]),_:1})]),c("li",fu,[z(s,{to:"/about",class:"text-secondary-footer text-decoration-none"},{default:Ee(()=>[...t[1]||(t[1]=[Z("Sobre Nós",-1)])]),_:1})]),c("li",pu,[z(s,{to:"/help",class:"text-secondary-footer text-decoration-none"},{default:Ee(()=>[...t[2]||(t[2]=[Z("Ajuda",-1)])]),_:1})])])]),t[5]||(t[5]=sn('
',2))]),t[6]||(t[6]=c("hr",{class:"my-4 border-secondary-footer"},null,-1)),t[7]||(t[7]=c("div",{class:"text-center"},[c("p",{class:"text-secondary-footer small mb-0"}," © 2025 CtrlCash - Todos os direitos reservados. Protótipo desenvolvido para fins acadêmicos. ")],-1))])])}const to=Ge(ru,[["render",mu],["__scopeId","data-v-7ea2c5b6"]]),hu={class:"main-no-gap"},gu={class:"bg-especial"},vu={class:"container p-3 row align-items-center m-auto"},bu={class:"col-md-6 col-12 py-5"},yu={__name:"HomeView",setup(e){return(t,s)=>{const n=$t("router-link");return F(),U(Ce,null,[z(Es),c("main",hu,[c("div",gu,[c("section",vu,[c("div",bu,[s[2]||(s[2]=c("h1",{class:"text-white display-10 text fw-bold text-break"},[Z("Seu dinheiro. "),c("br"),Z(" Seu controle total.")],-1)),s[3]||(s[3]=c("p",{class:"text-secondary fs-5"},"Organize, invista e alcance seus objetivos financeiros com segurança e facilidade. ",-1)),z(n,{to:"/register",class:"btn btn-success btn-lg mt-3 fw-bold me-3"},{default:Ee(()=>[...s[0]||(s[0]=[Z("Abra sua conta",-1)])]),_:1}),z(n,{to:"/features",class:"btn btn-outline-light btn-lg mt-3"},{default:Ee(()=>[...s[1]||(s[1]=[Z("Conheça os recursos",-1)])]),_:1})]),s[4]||(s[4]=c("div",{class:"col-md-6 col-12 d-flex justify-content-center py-5"},[c("img",{src:Zc,alt:"Ilustração de controle financeiro do CtrlCash",class:"img-fluid"})],-1))])]),s[5]||(s[5]=sn('

Concentre-se no que importa. Nós cuidamos do resto.

Descubra as funcionalidades que dão o controle total da sua vida financeira na palma da sua mão.

Orçamento Inteligente

Crie orçamentos por categoria, receba alertas e visualize seus gastos em tempo real, evitando surpresas no fim do mês.

Metas e Investimentos

Defina seus objetivos (viagem, casa, carro) e o CtrlCash te ajuda a poupar, investir e acompanhar seu progresso.

PIX e Pagamentos Rápidos

Envie e receba dinheiro em segundos. Pague contas e boletos com agilidade, tudo em um só lugar.

Histórico Automático

Chega de planilhas. O app registra todas as transações, categoriza e gera relatórios visuais inteligentes para você.

Segurança e Alertas

Monitoramento 24h e notificações em tempo real. Sua segurança é prioridade máxima com tecnologia de ponta.

Central de Cartões

Controle seus limites, bloqueie e desbloqueie cartões virtuais e físicos diretamente pelo app, com total autonomia.

',1))]),z(to)],64)}}},_u=Ge(yu,[["__scopeId","data-v-ab903d66"]]),xu={class:"navbar navbar-expand-lg navbar-dark bg-primary-dark shadow-lg sticky-top"},wu={class:"container-fluid max-w-7xl mx-auto px-4"},Cu={class:"collapse navbar-collapse",id:"navbarNav"},Su={class:"navbar-nav me-auto mb-2 mb-lg-0"},Eu={class:"nav-item"},Au={class:"nav-item"},Ru={class:"nav-item"},Tu={class:"d-flex align-items-center ms-auto"},Ou={class:"btn btn-link text-white me-3 p-0",title:"Notificações"},Pu={class:"bi bi-bell-fill fs-5 position-relative"},Iu={key:0,class:"position-absolute top-0 start-100 translate-middle p-1 bg-danger border border-light rounded-circle"},Nu={class:"d-flex align-items-center me-3"},ku=["src","alt"],$u={class:"ms-2 d-none d-md-inline text-sm text-white"},Du={__name:"HeaderApp",setup(e){const t=Zt(),s=Yc(),n=Q("Usuário"),o=Q("https://placehold.co/36x36/1A3B5E/FFFFFF?text=U"),r=Q(0),i=()=>{try{const a=localStorage.getItem("user");if(a){const u=JSON.parse(a);if(n.value=u.name||"Usuário",u.name){const d=u.name.split(" ").map(p=>p[0]).join("").toUpperCase().substring(0,2);o.value=`https://placehold.co/36x36/1A3B5E/FFFFFF?text=${d}`}}}catch(a){console.error("Erro ao carregar dados do usuário:",a)}},l=()=>{console.log("Usuário desconectado. Redirecionando para o login."),localStorage.removeItem("user"),localStorage.removeItem("isAuthenticated"),localStorage.removeItem("token"),t.push("/login")};return ds(s,()=>{i()}),Cs(()=>{i();const a=localStorage.getItem("isAuthenticated"),u=localStorage.getItem("user");(!a||!u)&&t.push("/login")}),(a,u)=>{const d=$t("router-link");return F(),U("nav",xu,[c("div",wu,[z(d,{to:"/dashboard",class:"navbar-brand d-flex align-items-center me-4"},{default:Ee(()=>[...u[0]||(u[0]=[c("img",{src:eo,alt:"CtrlCash Logo",width:"120",class:"d-inline-block logo-align"},null,-1)])]),_:1}),u[6]||(u[6]=c("button",{class:"navbar-toggler",type:"button","data-bs-toggle":"collapse","data-bs-target":"#navbarNav","aria-controls":"navbarNav","aria-expanded":"false","aria-label":"Toggle navigation"},[c("span",{class:"navbar-toggler-icon"})],-1)),c("div",Cu,[c("ul",Su,[c("li",Eu,[z(d,{to:"/dashboard",class:ge(["nav-link",ft(s).path==="/dashboard"?"active fw-bold text-white":"text-white-50","hover-success-feature"])},{default:Ee(()=>[...u[1]||(u[1]=[Z("Dashboard",-1)])]),_:1},8,["class"])]),c("li",Au,[z(d,{to:"/transacoes",class:ge(["nav-link",ft(s).path==="/transacoes"?"active fw-bold text-white":"text-white-50","hover-success-feature"])},{default:Ee(()=>[...u[2]||(u[2]=[Z("Transações",-1)])]),_:1},8,["class"])]),c("li",Ru,[z(d,{to:"/configuracoes",class:ge(["nav-link",ft(s).path==="/configuracoes"?"active fw-bold text-white":"text-white-50","hover-success-feature"])},{default:Ee(()=>[...u[3]||(u[3]=[Z("Configurações",-1)])]),_:1},8,["class"])])]),c("div",Tu,[c("button",Ou,[c("i",Pu,[r.value>0?(F(),U("span",Iu,[c("small",null,Y(r.value>9?"9+":r.value),1)])):ve("",!0)])]),c("div",Nu,[c("img",{class:"rounded-circle border border-white",src:o.value,alt:`Avatar de ${n.value}`,style:{width:"36px",height:"36px","object-fit":"cover"}},null,8,ku),c("span",$u,Y(n.value),1)]),c("button",{onClick:l,class:"btn btn-outline-light btn-sm d-none d-md-inline-flex align-items-center",title:"Sair"},[...u[4]||(u[4]=[c("i",{class:"bi bi-box-arrow-right me-1"},null,-1),Z(" Sair ",-1)])]),c("div",{class:"d-md-none"},[c("button",{onClick:l,class:"btn btn-outline-light btn-sm w-100 mt-2 d-flex align-items-center justify-content-center"},[...u[5]||(u[5]=[c("i",{class:"bi bi-box-arrow-right me-2"},null,-1),Z(" Sair ",-1)])])])])])])])}}},so=Ge(Du,[["__scopeId","data-v-cb189098"]]),Mu={class:"dashboard-page bg-light min-vh-100"},Vu={class:"container-fluid py-4 max-w-7xl mx-auto px-4"},ju={class:"row g-4 mb-5"},Fu={class:"col-lg-4 col-md-6 col-sm-12"},Lu={class:"card shadow-sm border-0 h-100 p-3"},Uu={class:"card-body"},Hu={class:"d-flex justify-content-between align-items-center"},Bu={class:"card-text fs-3 fw-bold text-primary-dark"},qu={class:"col-lg-4 col-md-6 col-sm-12"},Gu={class:"card shadow-sm border-0 h-100 p-3"},Ku={class:"card-body"},Wu={class:"d-flex justify-content-between align-items-center"},Ju={class:"card-text fs-3 fw-bold text-success-feature"},zu={class:"text-muted"},Xu={class:"col-lg-4 col-md-12 col-sm-12"},Qu={class:"card shadow-sm border-0 h-100 p-3"},Yu={class:"card-body"},Zu={class:"d-flex justify-content-between align-items-center"},ed={class:"card-text fs-3 fw-bold text-danger"},td={class:"text-muted"},sd={class:"row g-4"},nd={class:"col-lg-8"},od={class:"card shadow-sm border-0 h-100 p-4"},rd={class:"d-flex justify-content-between align-items-center mb-3"},id={class:"btn-group btn-group-sm"},ld={key:0,class:"chart-container rounded-3 text-center"},ad=["src"],cd={key:1,class:"matplotlib-placeholder bg-light-subtle rounded-3 border border-dashed p-5 text-center d-flex flex-column align-items-center justify-content-center",style:{"min-height":"400px"}},ud={key:0,class:"spinner-border text-primary-dark mb-3",role:"status"},dd={class:"text-primary-dark opacity-50 mb-0"},fd={class:"col-lg-4"},pd={class:"card shadow-sm border-0 h-100 p-4"},md={key:0,class:"text-center py-4"},hd={key:1,class:"list-group list-group-flush"},gd={class:"transaction-info"},vd={class:"fw-medium"},bd={class:"text-muted"},yd={key:0,class:"list-group-item text-center text-muted py-4"},_d={class:"list-group-item text-center pt-3 border-0"},xd={__name:"UserDashboardView",setup(e){const t=Zt(),s=Q({total_income:0,total_expenses:0,balance:0,recent_transactions:[]}),n=Q(""),o=Q("monthly"),r=Q(!1),i=Q(!1),l=async()=>{i.value=!0;try{const E=JSON.parse(localStorage.getItem("user"));if(!E){t.push("/login");return}const x=await fetch(`http://localhost:5000/api/dashboard/summary?user_id=${E.id}`);if(x.ok){const $=await x.json();s.value=$}}catch(E){console.error("Erro ao carregar dashboard:",E)}finally{i.value=!1}},a=async(E="monthly")=>{r.value=!0,o.value=E;try{const x=JSON.parse(localStorage.getItem("user")),$=await fetch(`http://localhost:5000/api/dashboard/chart?user_id=${x.id}&type=${E}`);if($.ok){const O=await $.json();n.value=O.chart}}catch(x){console.error("Erro ao carregar gráfico:",x)}finally{r.value=!1}},u=E=>new Intl.NumberFormat("pt-BR",{style:"currency",currency:"BRL"}).format(E||0),d=E=>{if(!E)return"-";if(E.match(/^\d{4}-\d{2}-\d{2}$/)){const[x,$,O]=E.split("-");return`${O.padStart(2,"0")}/${$.padStart(2,"0")}/${x}`}return E},p=()=>{const E=s.value.balance;return E>0?"Saldo positivo":E<0?"Saldo negativo":"Saldo zerado"},g=()=>{const E=s.value.total_income;if(E===0)return"Sem receitas este mês";const $=E/5e3*100;return`Meta: ${Math.min($,100).toFixed(0)}%`},v=()=>{const $=2500-s.value.total_expenses;return $>=0?`Limite restante: ${u($)}`:`Excedido: ${u(Math.abs($))}`};return Cs(()=>{l(),setTimeout(()=>a("monthly"),500)}),(E,x)=>{const $=$t("router-link");return F(),U("div",Mu,[z(so),c("div",Vu,[x[14]||(x[14]=c("h1",{class:"h3 fw-bold text-primary-dark mb-4"},"Visão Geral",-1)),c("div",ju,[c("div",Fu,[c("div",Lu,[c("div",Uu,[x[3]||(x[3]=c("h5",{class:"card-title text-muted mb-3"},"Saldo Total",-1)),c("div",Hu,[c("p",Bu,Y(u(s.value.balance)),1),x[2]||(x[2]=c("i",{class:"bi bi-wallet2 fs-2 text-primary-dark opacity-75"},null,-1))]),c("small",{class:ge([s.value.balance>=0?"text-success-feature":"text-danger","fw-medium"])},Y(p()),3)])])]),c("div",qu,[c("div",Gu,[c("div",Ku,[x[5]||(x[5]=c("h5",{class:"card-title text-muted mb-3"},"Receitas do Mês",-1)),c("div",Wu,[c("p",Ju,Y(u(s.value.total_income)),1),x[4]||(x[4]=c("i",{class:"bi bi-arrow-up-circle-fill fs-2 text-success-feature opacity-75"},null,-1))]),c("small",zu,Y(g()),1)])])]),c("div",Xu,[c("div",Qu,[c("div",Yu,[x[7]||(x[7]=c("h5",{class:"card-title text-muted mb-3"},"Despesas do Mês",-1)),c("div",Zu,[c("p",ed,Y(u(s.value.total_expenses)),1),x[6]||(x[6]=c("i",{class:"bi bi-arrow-down-circle-fill fs-2 text-danger opacity-75"},null,-1))]),c("small",td,Y(v()),1)])])])]),c("div",sd,[c("div",nd,[c("div",od,[c("div",rd,[x[8]||(x[8]=c("h4",{class:"fw-bold text-primary-dark mb-0"},"Evolução Financeira",-1)),c("div",id,[c("button",{onClick:x[0]||(x[0]=O=>a("monthly")),class:ge(["btn btn-outline-primary",{active:o.value==="monthly"}])}," Mensal ",2),c("button",{onClick:x[1]||(x[1]=O=>a("categories")),class:ge(["btn btn-outline-primary",{active:o.value==="categories"}])}," Categorias ",2)])]),n.value?(F(),U("div",ld,[c("img",{src:n.value,alt:"Gráfico Financeiro",class:"img-fluid rounded",style:{"max-height":"400px"}},null,8,ad)])):(F(),U("div",cd,[r.value?(F(),U("div",ud)):ve("",!0),x[9]||(x[9]=c("i",{class:"bi bi-bar-chart-fill fs-1 text-primary-dark opacity-25 mb-2"},null,-1)),c("p",dd,Y(r.value?"Carregando visualização...":"Selecione um tipo de gráfico"),1)]))])]),c("div",fd,[c("div",pd,[x[13]||(x[13]=c("h4",{class:"fw-bold text-primary-dark mb-3"},"Atividade Recente",-1)),i.value?(F(),U("div",md,[...x[10]||(x[10]=[c("div",{class:"spinner-border text-primary-dark",role:"status"},null,-1)])])):(F(),U("ul",hd,[(F(!0),U(Ce,null,Gt(s.value.recent_transactions,O=>(F(),U("li",{key:O.id,class:"list-group-item d-flex justify-content-between align-items-center"},[c("div",gd,[c("div",vd,Y(O.description),1),c("small",bd,Y(d(O.date))+" • "+Y(O.category),1)]),c("span",{class:ge(O.type==="income"?"badge bg-success-feature":"badge bg-danger")},Y(O.type==="income"?"+":"-")+Y(u(O.amount)),3)]))),128)),s.value.recent_transactions&&s.value.recent_transactions.length===0?(F(),U("li",yd,[...x[11]||(x[11]=[c("i",{class:"bi bi-receipt fs-4 opacity-50 d-block mb-2"},null,-1),Z(" Nenhuma transação recente ",-1)])])):ve("",!0),c("li",_d,[z($,{to:"/transacoes",class:"btn btn-link btn-sm text-primary-dark fw-medium"},{default:Ee(()=>[...x[12]||(x[12]=[Z(" Ver todas as transações ",-1)])]),_:1})])]))])])])])])}}},wd=Ge(xd,[["__scopeId","data-v-d86dd8ef"]]),bi="/assets/CtrlCash-blue-DUaQbcwD.png",Cd={class:"login-container d-flex align-items-center justify-content-center min-vh-100 p-3"},Sd={class:"login-card p-5 shadow-lg rounded-4 bg-white"},Ed={class:"mb-3"},Ad={class:"input-group"},Rd={class:"mb-4"},Td={class:"input-group"},Od={key:0,class:"alert alert-danger"},Pd=["disabled"],Id={key:0,class:"spinner-border spinner-border-sm me-2"},Nd={__name:"LoginView",setup(e){const t=Zt(),s=Q(!1),n=Q(""),o=Q({email:"",password:""}),r=async()=>{s.value=!0,n.value="";try{const i=await fetch("http://localhost:5000/api/auth/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o.value)}),l=await i.json();i.ok?(localStorage.setItem("user",JSON.stringify(l.user)),localStorage.setItem("isAuthenticated","true"),t.push("/dashboard")):n.value=l.error||"Erro ao fazer login"}catch(i){console.error("Erro:",i),n.value="Erro de conexão com o servidor"}finally{s.value=!1}};return(i,l)=>(F(),U(Ce,null,[z(Es),c("div",Cd,[c("div",Sd,[l[7]||(l[7]=c("div",{class:"text-center mb-4"},[c("img",{src:bi,alt:"CtrlCash Logo",width:"150",class:"mb-3"}),c("h2",{class:"fw-bold text-primary-dark"},"Login"),c("p",{class:"text-secondary-dark"},"Insira seus dados para continuar o controle.")],-1)),c("form",{onSubmit:ct(r,["prevent"])},[c("div",Ed,[l[3]||(l[3]=c("label",{for:"email",class:"form-label fw-medium text-primary-dark"},"E-mail",-1)),c("div",Ad,[l[2]||(l[2]=c("span",{class:"input-group-text"},[c("i",{class:"bi bi-envelope-fill"})],-1)),he(c("input",{type:"email",class:"form-control",id:"email","onUpdate:modelValue":l[0]||(l[0]=a=>o.value.email=a),required:"",placeholder:"seu.email@exemplo.com"},null,512),[[ye,o.value.email]])])]),c("div",Rd,[l[5]||(l[5]=c("label",{for:"password",class:"form-label fw-medium text-primary-dark"},"Senha",-1)),c("div",Td,[l[4]||(l[4]=c("span",{class:"input-group-text"},[c("i",{class:"bi bi-lock-fill"})],-1)),he(c("input",{type:"password",class:"form-control",id:"password","onUpdate:modelValue":l[1]||(l[1]=a=>o.value.password=a),required:"",placeholder:"********"},null,512),[[ye,o.value.password]])]),l[6]||(l[6]=c("div",{class:"text-end mt-2"},null,-1))]),n.value?(F(),U("div",Od,Y(n.value),1)):ve("",!0),c("button",{type:"submit",class:"btn btn-primary-feature w-100 fw-bold py-2 shadow-sm",disabled:s.value},[s.value?(F(),U("span",Id)):ve("",!0),Z(" "+Y(s.value?"Entrando...":"Acessar Minha Conta"),1)],8,Pd)],32)])])],64))}},kd=Ge(Nd,[["__scopeId","data-v-3bda6902"]]),$d={class:"cadastro-container d-flex align-items-center justify-content-center min-vh-100 p-3"},Dd={class:"cadastro-card p-5 shadow-lg rounded-4 bg-white"},Md={class:"mb-3"},Vd={class:"input-group"},jd={class:"mb-3"},Fd={class:"input-group"},Ld={class:"mb-3"},Ud={class:"input-group"},Hd={class:"mb-4"},Bd={class:"input-group"},qd={key:0,class:"alert alert-danger"},Gd={key:1,class:"alert alert-success"},Kd=["disabled"],Wd={key:0,class:"spinner-border spinner-border-sm me-2"},Jd={__name:"CadastroView",setup(e){const t=Zt(),s=Q(!1),n=Q(""),o=Q(""),r=Q({name:"",email:"",password:""}),i=Q(""),l=async()=>{if(s.value=!0,n.value="",o.value="",r.value.password!==i.value){n.value="As senhas não coincidem!",s.value=!1;return}if(r.value.password.length<6){n.value="A senha deve ter pelo menos 6 caracteres",s.value=!1;return}try{const a=await fetch("http://localhost:5000/api/auth/register",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r.value)}),u=await a.json();a.ok?(o.value="Cadastro realizado com sucesso! Redirecionando...",setTimeout(()=>{localStorage.setItem("user",JSON.stringify(u.user)),localStorage.setItem("isAuthenticated","true"),t.push("/dashboard")},2e3)):n.value=u.error||"Erro ao cadastrar"}catch(a){console.error("Erro:",a),n.value="Erro de conexão com o servidor"}finally{s.value=!1}};return(a,u)=>(F(),U(Ce,null,[z(Es),c("div",$d,[c("div",Dd,[u[12]||(u[12]=c("div",{class:"text-center mb-4"},[c("img",{src:bi,alt:"CtrlCash Logo",width:"150",class:"mb-3"}),c("h2",{class:"fw-bold text-primary-dark"},"Abra Sua Conta"),c("p",{class:"text-secondary-dark"},"Preencha os campos para iniciar seu controle financeiro.")],-1)),c("form",{onSubmit:ct(l,["prevent"])},[c("div",Md,[u[5]||(u[5]=c("label",{for:"nome",class:"form-label fw-medium text-primary-dark"},"Nome Completo",-1)),c("div",Vd,[u[4]||(u[4]=c("span",{class:"input-group-text"},[c("i",{class:"bi bi-person-fill"})],-1)),he(c("input",{type:"text",class:"form-control",id:"nome","onUpdate:modelValue":u[0]||(u[0]=d=>r.value.name=d),required:"",placeholder:"Seu nome"},null,512),[[ye,r.value.name]])])]),c("div",jd,[u[7]||(u[7]=c("label",{for:"email",class:"form-label fw-medium text-primary-dark"},"E-mail",-1)),c("div",Fd,[u[6]||(u[6]=c("span",{class:"input-group-text"},[c("i",{class:"bi bi-envelope-fill"})],-1)),he(c("input",{type:"email",class:"form-control",id:"email","onUpdate:modelValue":u[1]||(u[1]=d=>r.value.email=d),required:"",placeholder:"seu.email@exemplo.com"},null,512),[[ye,r.value.email]])])]),c("div",Ld,[u[9]||(u[9]=c("label",{for:"password",class:"form-label fw-medium text-primary-dark"},"Crie Sua Senha",-1)),c("div",Ud,[u[8]||(u[8]=c("span",{class:"input-group-text"},[c("i",{class:"bi bi-lock-fill"})],-1)),he(c("input",{type:"password",class:"form-control",id:"password","onUpdate:modelValue":u[2]||(u[2]=d=>r.value.password=d),required:"",placeholder:"Mínimo 6 caracteres"},null,512),[[ye,r.value.password]])])]),c("div",Hd,[u[11]||(u[11]=c("label",{for:"confirmPassword",class:"form-label fw-medium text-primary-dark"},"Confirmar Senha",-1)),c("div",Bd,[u[10]||(u[10]=c("span",{class:"input-group-text"},[c("i",{class:"bi bi-lock-fill"})],-1)),he(c("input",{type:"password",class:"form-control",id:"confirmPassword","onUpdate:modelValue":u[3]||(u[3]=d=>i.value=d),required:"",placeholder:"Repita a senha"},null,512),[[ye,i.value]])])]),n.value?(F(),U("div",qd,Y(n.value),1)):ve("",!0),o.value?(F(),U("div",Gd,Y(o.value),1)):ve("",!0),c("button",{type:"submit",class:"btn btn-primary-feature w-100 fw-bold py-2 shadow-sm",disabled:s.value},[s.value?(F(),U("span",Wd)):ve("",!0),Z(" "+Y(s.value?"Cadastrando...":"Criar Minha Conta CtrlCash"),1)],8,Kd)],32)])])],64))}},zd=Ge(Jd,[["__scopeId","data-v-483528ca"]]),Xd={class:"transacoes-page bg-light min-vh-100"},Qd={class:"container-fluid py-4 max-w-7xl mx-auto px-4"},Yd={class:"card shadow-sm border-0 mb-4 p-3"},Zd={class:"row g-3 align-items-center"},ef={class:"col-md-3"},tf={class:"col-md-4"},sf=["value"],nf={class:"col-md-5"},of={class:"input-group"},rf={class:"card shadow-sm border-0"},lf={class:"card-body p-0"},af={key:0,class:"text-center py-5"},cf={key:1,class:"table-responsive"},uf={class:"table table-hover mb-0"},df={class:"text-center"},ff={class:"text-center"},pf=["onClick"],mf={key:0},hf={key:0,class:"card-footer bg-white text-center"},gf={class:"text-muted"},vf={key:0,class:"modal-overlay"},bf={class:"modal-container"},yf={class:"modal-content"},_f={class:"modal-body"},xf={class:"mb-3"},wf={class:"btn-group w-100",role:"group"},Cf={class:"mb-3"},Sf={class:"row"},Ef={class:"col-md-6 mb-3"},Af={class:"col-md-6 mb-3"},Rf={class:"mb-3"},Tf=["value"],Of={class:"modal-footer"},Pf=["disabled"],If={key:0,class:"spinner-border spinner-border-sm me-2"},Nf={__name:"TransacoesView",setup(e){const t=Zt(),s=Q([]),n=Q([]),o=Q(!1),r=Q(!1),i=Q(!1),l=Q({type:"",category:"",startDate:"",endDate:""}),a=Q({type:"expense",description:"",amount:"",category:"",date:new Date().toISOString().split("T")[0]}),u=Q(null),d=Ve(()=>n.value.filter(K=>K.type===a.value.type)),p=async()=>{o.value=!0;try{const K=JSON.parse(localStorage.getItem("user"));if(!K){t.push("/login");return}const S=await fetch(`http://localhost:5000/api/transactions?user_id=${K.id}`),D=await S.json();if(S.ok){let oe=D.transactions;l.value.type&&(oe=oe.filter(ne=>ne.type===l.value.type)),l.value.category&&(oe=oe.filter(ne=>ne.category===l.value.category)),l.value.startDate&&(oe=oe.filter(ne=>ne.date>=l.value.startDate)),l.value.endDate&&(oe=oe.filter(ne=>ne.date<=l.value.endDate)),s.value=oe}}catch(K){console.error("Erro ao carregar transações:",K),I("Erro ao carregar transações","error")}finally{o.value=!1}},g=async()=>{try{const K=JSON.parse(localStorage.getItem("user")),S=await fetch(`http://localhost:5000/api/categories?user_id=${K.id}`),D=await S.json();S.ok&&(n.value=D.categories)}catch(K){console.error("Erro ao carregar categorias:",K)}},v=async()=>{if(r.value=!0,u.value=null,!a.value.description.trim()){I("Descrição é obrigatória","error"),r.value=!1;return}if(!a.value.amount||parseFloat(a.value.amount)<=0){I("Valor deve ser maior que zero","error"),r.value=!1;return}if(!a.value.category){I("Selecione uma categoria","error"),r.value=!1;return}try{const S={user_id:JSON.parse(localStorage.getItem("user")).id,amount:parseFloat(a.value.amount),description:a.value.description.trim(),category:a.value.category,type:a.value.type,date:a.value.date},D=await fetch("http://localhost:5000/api/transactions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(S)}),oe=await D.json();D.ok?(I("Transação salva com sucesso!","success"),$(),p()):I(oe.error||"Erro ao salvar transação","error")}catch(K){console.error("Erro:",K),I("Erro de conexão com o servidor","error")}finally{r.value=!1}},E=async K=>{if(confirm("Tem certeza que deseja excluir esta transação?"))try{const S=JSON.parse(localStorage.getItem("user")),D=await fetch(`http://localhost:5000/api/transactions/${K}?user_id=${S.id}`,{method:"DELETE"});if(D.ok)I("Transação excluída com sucesso!","success"),p();else{const oe=await D.json();I(oe.error||"Erro ao excluir transação","error")}}catch(S){console.error("Erro:",S),I("Erro de conexão com o servidor","error")}},x=()=>{i.value=!0,O(),u.value=null},$=()=>{i.value=!1,O(),u.value=null},O=()=>{a.value={type:"expense",description:"",amount:"",category:"",date:new Date().toISOString().split("T")[0]}},I=(K,S)=>{u.value={text:K,type:S},setTimeout(()=>{u.value=null},5e3)},L=K=>new Intl.NumberFormat("pt-BR",{style:"currency",currency:"BRL"}).format(K||0),V=K=>{if(!K)return"-";if(K.match(/^\d{4}-\d{2}-\d{2}$/)){const[S,D,oe]=K.split("-");return`${oe.padStart(2,"0")}/${D.padStart(2,"0")}/${S}`}return K},se=K=>{const S=n.value.find(D=>D.name===K);return S?S.color:"#6c757d"};return Cs(()=>{p(),g()}),(K,S)=>(F(),U("div",Xd,[z(so),c("div",Qd,[c("div",{class:"d-flex justify-content-between align-items-center mb-4"},[S[11]||(S[11]=c("h1",{class:"h3 fw-bold text-primary-dark"},"Minhas Transações",-1)),c("button",{type:"button",class:"btn btn-success-feature fw-bold shadow-sm d-flex align-items-center",onClick:x},[...S[10]||(S[10]=[c("i",{class:"bi bi-plus-circle-fill me-2"},null,-1),Z(" Nova Transação ",-1)])])]),c("div",Yd,[c("div",Zd,[c("div",ef,[S[13]||(S[13]=c("label",{for:"filtroTipo",class:"form-label small text-muted"},"Tipo",-1)),he(c("select",{id:"filtroTipo","onUpdate:modelValue":S[0]||(S[0]=D=>l.value.type=D),class:"form-select",onChange:p},[...S[12]||(S[12]=[c("option",{value:""},"Todos",-1),c("option",{value:"income"},"Receitas",-1),c("option",{value:"expense"},"Despesas",-1)])],544),[[$s,l.value.type]])]),c("div",tf,[S[15]||(S[15]=c("label",{for:"filtroCategoria",class:"form-label small text-muted"},"Categoria",-1)),he(c("select",{id:"filtroCategoria","onUpdate:modelValue":S[1]||(S[1]=D=>l.value.category=D),class:"form-select",onChange:p},[S[14]||(S[14]=c("option",{value:""},"Todas as categorias",-1)),(F(!0),U(Ce,null,Gt(n.value,D=>(F(),U("option",{key:D.id,value:D.name},Y(D.name),9,sf))),128))],544),[[$s,l.value.category]])]),c("div",nf,[S[17]||(S[17]=c("label",{for:"filtroPeriodo",class:"form-label small text-muted"},"Período",-1)),c("div",of,[he(c("input",{type:"date","onUpdate:modelValue":S[2]||(S[2]=D=>l.value.startDate=D),class:"form-control",onChange:p},null,544),[[ye,l.value.startDate]]),S[16]||(S[16]=c("span",{class:"input-group-text"},"a",-1)),he(c("input",{type:"date","onUpdate:modelValue":S[3]||(S[3]=D=>l.value.endDate=D),class:"form-control",onChange:p},null,544),[[ye,l.value.endDate]])])])])]),c("div",rf,[c("div",lf,[o.value?(F(),U("div",af,[...S[18]||(S[18]=[c("div",{class:"spinner-border text-primary-dark",role:"status"},[c("span",{class:"visually-hidden"},"Carregando...")],-1),c("p",{class:"text-muted mt-2"},"Carregando transações...",-1)])])):(F(),U("div",cf,[c("table",uf,[S[21]||(S[21]=c("thead",{class:"bg-light"},[c("tr",null,[c("th",{scope:"col",class:"text-primary-dark fw-bold"},"Descrição"),c("th",{scope:"col",class:"text-primary-dark fw-bold"},"Categoria"),c("th",{scope:"col",class:"text-primary-dark fw-bold text-center"},"Tipo"),c("th",{scope:"col",class:"text-primary-dark fw-bold text-end"},"Valor"),c("th",{scope:"col",class:"text-primary-dark fw-bold"},"Data"),c("th",{scope:"col",class:"text-primary-dark fw-bold text-center"},"Ações")])],-1)),c("tbody",null,[(F(!0),U(Ce,null,Gt(s.value,D=>(F(),U("tr",{key:D.id},[c("td",null,Y(D.description),1),c("td",null,[c("span",{class:"badge",style:Wt({backgroundColor:se(D.category),color:"white"})},Y(D.category),5)]),c("td",df,[c("span",{class:ge(["badge",D.type==="income"?"bg-success-feature":"bg-danger"])},[c("i",{class:ge(D.type==="income"?"bi bi-arrow-up":"bi bi-arrow-down")},null,2),Z(" "+Y(D.type==="income"?"Receita":"Despesa"),1)],2)]),c("td",{class:ge(["text-end fw-bold",D.type==="income"?"text-success-feature":"text-danger"])},Y(L(D.amount)),3),c("td",null,Y(V(D.date)),1),c("td",ff,[c("button",{class:"btn btn-sm btn-outline-danger",title:"Excluir transação",onClick:oe=>E(D.id)},[...S[19]||(S[19]=[c("i",{class:"bi bi-trash"},null,-1)])],8,pf)])]))),128)),s.value.length===0&&!o.value?(F(),U("tr",mf,[...S[20]||(S[20]=[c("td",{colspan:"6",class:"text-center py-5 text-muted"},[c("i",{class:"bi bi-receipt fs-1 opacity-50 d-block mb-2"}),Z(" Nenhuma transação encontrada "),c("br"),c("small",null,'Clique em "Nova Transação" para adicionar sua primeira transação')],-1)])])):ve("",!0)])])]))]),s.value.length>0?(F(),U("div",hf,[c("small",gf,"Exibindo "+Y(s.value.length)+" transações",1)])):ve("",!0)])]),i.value?(F(),U("div",vf,[c("div",bf,[c("div",yf,[c("div",{class:"modal-header bg-primary-dark text-white"},[S[22]||(S[22]=c("h5",{class:"modal-title fw-bold"}," Adicionar Nova Transação ",-1)),c("button",{type:"button",class:"btn-close btn-close-white",onClick:$})]),c("div",_f,[c("form",{onSubmit:ct(v,["prevent"])},[c("div",xf,[S[23]||(S[23]=c("label",{class:"form-label fw-medium text-primary-dark"},"Tipo",-1)),c("div",wf,[he(c("input",{type:"radio",class:"btn-check","onUpdate:modelValue":S[4]||(S[4]=D=>a.value.type=D),id:"tipoReceita",value:"income"},null,512),[[Mo,a.value.type]]),c("label",{class:ge(["btn btn-outline-success-feature fw-bold",{active:a.value.type==="income"}]),for:"tipoReceita"}," Receita ",2),he(c("input",{type:"radio",class:"btn-check","onUpdate:modelValue":S[5]||(S[5]=D=>a.value.type=D),id:"tipoDespesa",value:"expense"},null,512),[[Mo,a.value.type]]),c("label",{class:ge(["btn btn-outline-danger fw-bold",{active:a.value.type==="expense"}]),for:"tipoDespesa"}," Despesa ",2)])]),c("div",Cf,[S[24]||(S[24]=c("label",{for:"descricao",class:"form-label fw-medium text-primary-dark"},"Descrição",-1)),he(c("input",{type:"text",class:"form-control",id:"descricao","onUpdate:modelValue":S[6]||(S[6]=D=>a.value.description=D),placeholder:"Ex: Salário, Aluguel, Supermercado",required:""},null,512),[[ye,a.value.description]])]),c("div",Sf,[c("div",Ef,[S[25]||(S[25]=c("label",{for:"valor",class:"form-label fw-medium text-primary-dark"},"Valor (R$)",-1)),he(c("input",{type:"number",step:"0.01",min:"0.01",class:"form-control",id:"valor","onUpdate:modelValue":S[7]||(S[7]=D=>a.value.amount=D),placeholder:"0.00",required:""},null,512),[[ye,a.value.amount]])]),c("div",Af,[S[26]||(S[26]=c("label",{for:"data",class:"form-label fw-medium text-primary-dark"},"Data",-1)),he(c("input",{type:"date",class:"form-control",id:"data","onUpdate:modelValue":S[8]||(S[8]=D=>a.value.date=D),required:""},null,512),[[ye,a.value.date]])])]),c("div",Rf,[S[28]||(S[28]=c("label",{for:"categoria",class:"form-label fw-medium text-primary-dark"},"Categoria",-1)),he(c("select",{id:"categoria",class:"form-select","onUpdate:modelValue":S[9]||(S[9]=D=>a.value.category=D),required:""},[S[27]||(S[27]=c("option",{value:""},"Selecione uma categoria...",-1)),(F(!0),U(Ce,null,Gt(d.value,D=>(F(),U("option",{key:D.id,value:D.name},Y(D.name),9,Tf))),128))],512),[[$s,a.value.category]])]),u.value?(F(),U("div",{key:0,class:ge(["alert",u.value.type==="success"?"alert-success":"alert-danger"])},Y(u.value.text),3)):ve("",!0)],32)]),c("div",Of,[c("button",{type:"button",class:"btn btn-secondary",onClick:$},"Cancelar"),c("button",{type:"button",class:"btn btn-primary-dark-feature fw-bold",onClick:v,disabled:r.value},[r.value?(F(),U("span",If)):ve("",!0),Z(" "+Y(r.value?"Salvando...":"Salvar Transação"),1)],8,Pf)])])])])):ve("",!0)]))}},kf=Ge(Nf,[["__scopeId","data-v-ded21139"]]),$f={class:"config-page bg-light min-vh-100"},Df={class:"container-fluid py-4 max-w-7xl mx-auto px-4"},Mf={class:"row g-4"},Vf={class:"col-lg-3"},jf={class:"list-group shadow-sm border-0 rounded-3"},Ff={class:"col-lg-9"},Lf={class:"card shadow-sm border-0 p-4 h-100"},Uf={key:0},Hf={class:"row"},Bf={class:"col-md-6 mb-3"},qf={class:"col-md-6 mb-3"},Gf={class:"row"},Kf={class:"col-md-6 mb-3"},Wf={class:"col-md-6 mb-3"},Jf=["disabled"],zf={key:0,class:"spinner-border spinner-border-sm me-2"},Xf={key:1},Qf={class:"d-flex justify-content-between align-items-center mb-3"},Yf={key:0,class:"text-center py-4"},Zf={key:1,class:"row"},ep={class:"col-md-6"},tp={class:"list-group mb-4"},sp={class:"d-flex align-items-center"},np={class:"col-md-6"},op={class:"list-group"},rp={class:"d-flex align-items-center"},ip={key:2},lp={class:"mb-3"},ap={class:"mb-3"},cp={class:"mb-3"},up=["disabled"],dp={key:0,class:"spinner-border spinner-border-sm me-2"},fp={class:"modal-dialog modal-dialog-centered"},pp={class:"modal-content"},mp={class:"modal-body"},hp={class:"mb-3"},gp={class:"mb-3"},vp={class:"mb-3"},bp={class:"d-flex align-items-center"},yp={class:"modal-footer"},_p=["disabled"],xp={key:0,class:"spinner-border spinner-border-sm me-2"},wp={__name:"ConfiguracoesView",setup(e){const t=Zt(),s=Q("perfil"),n=Q(!1),o=Q(!1),r=Q(!1),i=Q(!1),l=Q(!1),a=Q({name:"",email:"",profile:{monthly_income_goal:5e3,monthly_expense_limit:2500,currency:"BRL"}}),u=Q([]),d=Q({name:"",email:"",profile:{monthly_income_goal:5e3,monthly_expense_limit:2500,currency:"BRL"}}),p=Q({currentPassword:"",newPassword:"",confirmPassword:""}),g=Q({name:"",type:"expense",color:"#6c757d"}),v=Q(null),E=Q(null),x=Q(null),$=Q(null),O=Ve(()=>u.value.filter(X=>X.type==="income")),I=Ve(()=>u.value.filter(X=>X.type==="expense")),L=X=>{s.value=X},V=async()=>{try{const X=JSON.parse(localStorage.getItem("user"));if(!X){t.push("/login");return}const b=await fetch(`http://localhost:5000/api/user/profile?user_id=${X.id}`);if(b.ok){const j=await b.json();a.value=j.user,d.value={...j.user},localStorage.setItem("user",JSON.stringify(j.user))}}catch(X){console.error("Erro ao carregar perfil:",X),ne(v,"Erro ao carregar perfil","error")}},se=async()=>{n.value=!0;try{const X=JSON.parse(localStorage.getItem("user")),b=await fetch(`http://localhost:5000/api/categories?user_id=${X.id}`),j=await b.json();b.ok&&(u.value=j.categories)}catch(X){console.error("Erro ao carregar categorias:",X),ne(x,"Erro ao carregar categorias","error")}finally{n.value=!1}},K=async()=>{o.value=!0,v.value=null;try{const X=JSON.parse(localStorage.getItem("user")),b=await fetch("http://localhost:5000/api/user/profile",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({user_id:X.id,name:d.value.name,email:d.value.email,profile:d.value.profile})}),j=await b.json();if(b.ok){const At={...X,name:j.user.name,email:j.user.email,profile:j.user.profile};localStorage.setItem("user",JSON.stringify(At)),ne(v,"Perfil atualizado com sucesso!","success")}else ne(v,j.error||"Erro ao atualizar perfil","error")}catch(X){console.error("Erro:",X),ne(v,"Erro de conexão com o servidor","error")}finally{o.value=!1}},S=async()=>{if(r.value=!0,E.value=null,p.value.newPassword!==p.value.confirmPassword){ne(E,"As senhas não coincidem","error"),r.value=!1;return}if(p.value.newPassword.length<6){ne(E,"A senha deve ter pelo menos 6 caracteres","error"),r.value=!1;return}try{const X=JSON.parse(localStorage.getItem("user")),b=await fetch("http://localhost:5000/api/user/change-password",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({user_id:X.id,current_password:p.value.currentPassword,new_password:p.value.newPassword})}),j=await b.json();b.ok?(ne(E,"Senha alterada com sucesso!","success"),p.value={currentPassword:"",newPassword:"",confirmPassword:""}):ne(E,j.error||"Erro ao alterar senha","error")}catch(X){console.error("Erro:",X),ne(E,"Erro de conexão com o servidor","error")}finally{r.value=!1}},D=async()=>{i.value=!0,$.value=null;try{const X=JSON.parse(localStorage.getItem("user")),b=await fetch("http://localhost:5000/api/categories",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user_id:X.id,name:g.value.name,type:g.value.type,color:g.value.color})}),j=await b.json();b.ok?(ne($,"Categoria adicionada com sucesso!","success"),oe(),se()):ne($,j.error||"Erro ao adicionar categoria","error")}catch(X){console.error("Erro:",X),ne($,"Erro de conexão com o servidor","error")}finally{i.value=!1}},oe=()=>{l.value=!1,g.value={name:"",type:"expense",color:"#6c757d"},$.value=null},ne=(X,b,j)=>{X.value={text:b,type:j},setTimeout(()=>{X.value=null},5e3)};return Cs(()=>{V(),se()}),(X,b)=>(F(),U("div",$f,[z(so),c("div",Df,[b[37]||(b[37]=c("h1",{class:"h3 fw-bold text-primary-dark mb-4"},"Configurações e Gestão da Conta",-1)),c("div",Mf,[c("div",Vf,[c("div",jf,[c("a",{href:"#",onClick:b[0]||(b[0]=ct(j=>L("perfil"),["prevent"])),class:ge(["list-group-item list-group-item-action",{"active-feature":s.value==="perfil"}])},[...b[14]||(b[14]=[c("i",{class:"bi bi-person-circle me-2"},null,-1),Z(" Perfil e Dados Pessoais ",-1)])],2),c("a",{href:"#",onClick:b[1]||(b[1]=ct(j=>L("categorias"),["prevent"])),class:ge(["list-group-item list-group-item-action",{"active-feature":s.value==="categorias"}])},[...b[15]||(b[15]=[c("i",{class:"bi bi-tags-fill me-2"},null,-1),Z(" Gestão de Categorias ",-1)])],2),c("a",{href:"#",onClick:b[2]||(b[2]=ct(j=>L("seguranca"),["prevent"])),class:ge(["list-group-item list-group-item-action",{"active-feature":s.value==="seguranca"}])},[...b[16]||(b[16]=[c("i",{class:"bi bi-lock-fill me-2"},null,-1),Z(" Segurança e Senha ",-1)])],2)])]),c("div",Ff,[c("div",Lf,[s.value==="perfil"?(F(),U("div",Uf,[b[21]||(b[21]=c("h2",{class:"h4 fw-bold text-primary-dark mb-3"},"Meu Perfil",-1)),b[22]||(b[22]=c("p",{class:"text-muted"},"Gerencie seu nome, e-mail e outras informações de contato.",-1)),c("form",{onSubmit:ct(K,["prevent"])},[c("div",Hf,[c("div",Bf,[b[17]||(b[17]=c("label",{class:"form-label fw-medium"},"Nome Completo",-1)),he(c("input",{type:"text",class:"form-control","onUpdate:modelValue":b[3]||(b[3]=j=>d.value.name=j),required:""},null,512),[[ye,d.value.name]])]),c("div",qf,[b[18]||(b[18]=c("label",{class:"form-label fw-medium"},"E-mail",-1)),he(c("input",{type:"email",class:"form-control","onUpdate:modelValue":b[4]||(b[4]=j=>d.value.email=j),required:""},null,512),[[ye,d.value.email]])])]),c("div",Gf,[c("div",Kf,[b[19]||(b[19]=c("label",{class:"form-label fw-medium"},"Meta de Receita Mensal (R$)",-1)),he(c("input",{type:"number",class:"form-control","onUpdate:modelValue":b[5]||(b[5]=j=>d.value.profile.monthly_income_goal=j),step:"0.01",min:"0"},null,512),[[ye,d.value.profile.monthly_income_goal]])]),c("div",Wf,[b[20]||(b[20]=c("label",{class:"form-label fw-medium"},"Limite de Despesas Mensal (R$)",-1)),he(c("input",{type:"number",class:"form-control","onUpdate:modelValue":b[6]||(b[6]=j=>d.value.profile.monthly_expense_limit=j),step:"0.01",min:"0"},null,512),[[ye,d.value.profile.monthly_expense_limit]])])]),v.value?(F(),U("div",{key:0,class:ge(["alert",v.value.type==="success"?"alert-success":"alert-danger"])},Y(v.value.text),3)):ve("",!0),c("button",{class:"btn btn-primary-feature mt-2",disabled:o.value},[o.value?(F(),U("span",zf)):ve("",!0),Z(" "+Y(o.value?"Salvando...":"Salvar Alterações"),1)],8,Jf)],32)])):ve("",!0),s.value==="categorias"?(F(),U("div",Xf,[c("div",Qf,[b[24]||(b[24]=c("h2",{class:"h4 fw-bold text-primary-dark mb-0"},"Categorias Financeiras",-1)),c("button",{class:"btn btn-success-feature",onClick:b[7]||(b[7]=j=>l.value=!0)},[...b[23]||(b[23]=[c("i",{class:"bi bi-plus-circle me-2"},null,-1),Z(" Nova Categoria ",-1)])])]),b[30]||(b[30]=c("p",{class:"text-muted"},"Crie, edite ou remova categorias de receitas e despesas.",-1)),n.value?(F(),U("div",Yf,[...b[25]||(b[25]=[c("div",{class:"spinner-border text-primary-dark",role:"status"},null,-1),c("p",{class:"text-muted mt-2"},"Carregando categorias...",-1)])])):(F(),U("div",Zf,[c("div",ep,[b[27]||(b[27]=c("h5",{class:"fw-bold text-success mb-3"},"📈 Receitas",-1)),c("div",tp,[(F(!0),U(Ce,null,Gt(O.value,j=>(F(),U("div",{key:j.id,class:"list-group-item d-flex justify-content-between align-items-center"},[c("div",sp,[c("span",{class:"badge me-2",style:Wt({backgroundColor:j.color,width:"15px",height:"15px",display:"inline-block"})},null,4),Z(" "+Y(j.name),1)]),b[26]||(b[26]=c("span",{class:"badge bg-success"},"Receita",-1))]))),128))])]),c("div",np,[b[29]||(b[29]=c("h5",{class:"fw-bold text-danger mb-3"},"📉 Despesas",-1)),c("div",op,[(F(!0),U(Ce,null,Gt(I.value,j=>(F(),U("div",{key:j.id,class:"list-group-item d-flex justify-content-between align-items-center"},[c("div",rp,[c("span",{class:"badge me-2",style:Wt({backgroundColor:j.color,width:"15px",height:"15px",display:"inline-block"})},null,4),Z(" "+Y(j.name),1)]),b[28]||(b[28]=c("span",{class:"badge bg-danger"},"Despesa",-1))]))),128))])])])),x.value?(F(),U("div",{key:2,class:ge(["alert",x.value.type==="success"?"alert-success":"alert-danger"])},Y(x.value.text),3)):ve("",!0)])):ve("",!0),s.value==="seguranca"?(F(),U("div",ip,[b[35]||(b[35]=c("h2",{class:"h4 fw-bold text-primary-dark mb-3"},"Segurança da Conta",-1)),b[36]||(b[36]=c("p",{class:"text-muted"},"Altere sua senha para manter sua conta segura.",-1)),c("form",{onSubmit:ct(S,["prevent"])},[c("div",lp,[b[31]||(b[31]=c("label",{class:"form-label fw-medium"},"Senha Atual",-1)),he(c("input",{type:"password",class:"form-control","onUpdate:modelValue":b[8]||(b[8]=j=>p.value.currentPassword=j),required:""},null,512),[[ye,p.value.currentPassword]])]),c("div",ap,[b[32]||(b[32]=c("label",{class:"form-label fw-medium"},"Nova Senha",-1)),he(c("input",{type:"password",class:"form-control","onUpdate:modelValue":b[9]||(b[9]=j=>p.value.newPassword=j),required:"",minlength:"6"},null,512),[[ye,p.value.newPassword]]),b[33]||(b[33]=c("small",{class:"text-muted"},"Mínimo 6 caracteres",-1))]),c("div",cp,[b[34]||(b[34]=c("label",{class:"form-label fw-medium"},"Confirmar Nova Senha",-1)),he(c("input",{type:"password",class:"form-control","onUpdate:modelValue":b[10]||(b[10]=j=>p.value.confirmPassword=j),required:""},null,512),[[ye,p.value.confirmPassword]])]),E.value?(F(),U("div",{key:0,class:ge(["alert",E.value.type==="success"?"alert-success":"alert-danger"])},Y(E.value.text),3)):ve("",!0),c("button",{class:"btn btn-warning text-white mt-2",disabled:r.value},[r.value?(F(),U("span",dp)):ve("",!0),Z(" "+Y(r.value?"Alterando...":"Alterar Senha"),1)],8,up)],32)])):ve("",!0)])])])]),l.value?(F(),U("div",{key:0,class:ge(["modal fade",{"show d-block":l.value}]),tabindex:"-1"},[c("div",fp,[c("div",pp,[c("div",{class:"modal-header bg-primary-dark text-white"},[b[38]||(b[38]=c("h5",{class:"modal-title fw-bold"},"Nova Categoria",-1)),c("button",{type:"button",class:"btn-close btn-close-white",onClick:oe})]),c("div",mp,[c("form",{onSubmit:ct(D,["prevent"])},[c("div",hp,[b[39]||(b[39]=c("label",{class:"form-label fw-medium"},"Nome da Categoria",-1)),he(c("input",{type:"text",class:"form-control","onUpdate:modelValue":b[11]||(b[11]=j=>g.value.name=j),placeholder:"Ex: Investimentos, Lazer, Educação...",required:""},null,512),[[ye,g.value.name]])]),c("div",gp,[b[41]||(b[41]=c("label",{class:"form-label fw-medium"},"Tipo",-1)),he(c("select",{"onUpdate:modelValue":b[12]||(b[12]=j=>g.value.type=j),class:"form-select",required:""},[...b[40]||(b[40]=[c("option",{value:"income"},"Receita",-1),c("option",{value:"expense"},"Despesa",-1)])],512),[[$s,g.value.type]])]),c("div",vp,[b[43]||(b[43]=c("label",{class:"form-label fw-medium"},"Cor",-1)),c("div",bp,[he(c("input",{type:"color",class:"form-control form-control-color","onUpdate:modelValue":b[13]||(b[13]=j=>g.value.color=j),required:""},null,512),[[ye,g.value.color]]),b[42]||(b[42]=c("span",{class:"ms-2 small text-muted"},"Escolha uma cor para identificar",-1))])]),$.value?(F(),U("div",{key:0,class:ge(["alert",$.value.type==="success"?"alert-success":"alert-danger"])},Y($.value.text),3)):ve("",!0)],32)]),c("div",yp,[c("button",{type:"button",class:"btn btn-secondary",onClick:oe},"Cancelar"),c("button",{type:"button",class:"btn btn-primary-dark-feature fw-bold",onClick:D,disabled:i.value},[i.value?(F(),U("span",xp)):ve("",!0),Z(" "+Y(i.value?"Adicionando...":"Adicionar Categoria"),1)],8,_p)])])]),c("div",{class:"modal-backdrop fade show",onClick:oe})],2)):ve("",!0)]))}},Cp=Ge(wp,[["__scopeId","data-v-eaccba4a"]]),Sp={class:"sobre-nos-page bg-light min-vh-100"},Ep={class:"container-fluid py-5 max-w-7xl mx-auto px-4"},Ap={class:"row g-5 align-items-center"},Rp={class:"col-lg-6"},Tp={__name:"SobreNosView",setup(e){return(t,s)=>{const n=$t("router-link");return F(),U("div",Sp,[z(Es),c("div",Ep,[c("div",Ap,[c("div",Rp,[s[1]||(s[1]=c("h1",{class:"display-5 fw-bold text-primary-dark mb-4"},[Z(" Nossa Missão: "),c("span",{class:"text-success-feature"},"Empoderar"),Z(" Suas Finanças. ")],-1)),s[2]||(s[2]=c("p",{class:"lead text-muted"}," O CtrlCash nasceu da necessidade de simplificar a gestão financeira pessoal. Acreditamos que controlar suas finanças não deve ser um fardo, mas uma ferramenta para alcançar seus objetivos. ",-1)),s[3]||(s[3]=c("p",{class:"text-muted"}," Nosso sistema oferece uma visão clara e organizada de onde seu dinheiro está indo, permitindo que você tome decisões informadas. Não se trata apenas de registrar gastos, mas de planejar o futuro. ",-1)),z(n,{to:"/cadastro",class:"btn btn-lg btn-success-feature shadow-lg mt-4"},{default:Ee(()=>[...s[0]||(s[0]=[Z(" Comece a Controlar Sua Vida Financeira Hoje ",-1)])]),_:1})]),s[4]||(s[4]=sn('

Controle Financeiro Descomplicado

A plataforma ideal para quem busca clareza e inteligência nos gastos diários.

',1))])]),z(to)])}}},Op=Ge(Tp,[["__scopeId","data-v-ce95d114"]]),Pp={class:"ajuda-page bg-light min-vh-100"},Ip={__name:"AjudaView",setup(e){return(t,s)=>(F(),U("div",Pp,[z(Es),s[0]||(s[0]=sn('

Central de Ajuda e FAQ

Encontre respostas rápidas para suas dúvidas mais comuns ou envie seu feedback.

No seu Dashboard, clique em "Transações" na barra de navegação. Na View de Transações, use o botão "Nova Transação" (verde) para adicionar Receitas ou Despesas. Certifique-se de categorizar corretamente para as análises futuras.

Sim! Vá para a View "Configurações" e selecione a aba "Gestão de Categorias". Lá você pode criar, editar ou remover categorias personalizadas para se adequar ao seu estilo de vida financeiro.
',1)),z(to)]))}},Np=Ge(Ip,[["__scopeId","data-v-eacca1cc"]]),kp=Qc({history:Oc("/"),routes:[{path:"/",name:"home",component:_u},{path:"/dashboard",name:"dashboard",component:wd},{path:"/login",name:"login",component:kd},{path:"/cadastro",name:"cadastro",component:zd},{path:"/transacoes",name:"transacoes",component:kf},{path:"/configuracoes",name:"configuracoes",component:Cp},{path:"/about",name:"about",component:Op},{path:"/help",name:"help",component:Np}]}),yi=La(Ga);yi.use(kp);yi.mount("#app"); + */let Ac=()=>location.protocol+"//"+location.host;function hi(e,t){const{pathname:s,search:n,hash:o}=t,r=e.indexOf("#");if(r>-1){let i=o.includes(e.slice(r))?e.slice(r).length:1,l=o.slice(i);return l[0]!=="/"&&(l="/"+l),Lo(l,"")}return Lo(s,e)+n+o}function Rc(e,t,s,n){let o=[],r=[],i=null;const l=({state:g})=>{const v=hi(e,location),E=s.value,x=t.value;let $=0;if(g){if(s.value=v,t.value=g,i&&i===E){i=null;return}$=x?g.position-x.position:0}else n(v);o.forEach(O=>{O(s.value,E,{delta:$,type:Nn.pop,direction:$?$>0?bn.forward:bn.back:bn.unknown})})};function a(){i=s.value}function u(g){o.push(g);const v=()=>{const E=o.indexOf(g);E>-1&&o.splice(E,1)};return r.push(v),v}function d(){if(document.visibilityState==="hidden"){const{history:g}=window;if(!g.state)return;g.replaceState(ie({},g.state,{scroll:on()}),"")}}function p(){for(const g of r)g();r=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",d),document.removeEventListener("visibilitychange",d)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",d),document.addEventListener("visibilitychange",d),{pauseListeners:a,listen:u,destroy:p}}function Go(e,t,s,n=!1,o=!1){return{back:e,current:t,forward:s,replaced:n,position:window.history.length,scroll:o?on():null}}function Tc(e){const{history:t,location:s}=window,n={value:hi(e,s)},o={value:t.state};o.value||r(n.value,{back:null,current:n.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function r(a,u,d){const p=e.indexOf("#"),g=p>-1?(s.host&&document.querySelector("base")?e:e.slice(p))+a:Ac()+e+a;try{t[d?"replaceState":"pushState"](u,"",g),o.value=u}catch(v){console.error(v),s[d?"replace":"assign"](g)}}function i(a,u){r(a,ie({},t.state,Go(o.value.back,a,o.value.forward,!0),u,{position:o.value.position}),!0),n.value=a}function l(a,u){const d=ie({},o.value,t.state,{forward:a,scroll:on()});r(d.current,d,!0),r(a,ie({},Go(n.value,a,null),{position:d.position+1},u),!1),n.value=a}return{location:n,state:o,push:l,replace:i}}function Oc(e){e=fc(e);const t=Tc(e),s=Rc(e,t.state,t.location,t.replace);function n(r,i=!0){i||s.pauseListeners(),history.go(r)}const o=ie({location:"",base:e,go:n,createHref:mc.bind(null,e)},t,s);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}let It=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var xe=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(xe||{});const Pc={type:It.Static,value:""},Ic=/[a-zA-Z0-9_]/;function Nc(e){if(!e)return[[]];if(e==="/")return[[Pc]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(v){throw new Error(`ERR (${s})/"${u}": ${v}`)}let s=xe.Static,n=s;const o=[];let r;function i(){r&&o.push(r),r=[]}let l=0,a,u="",d="";function p(){u&&(s===xe.Static?r.push({type:It.Static,value:u}):s===xe.Param||s===xe.ParamRegExp||s===xe.ParamRegExpEnd?(r.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),r.push({type:It.Param,value:u,regexp:d,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),u="")}function g(){u+=a}for(;lt.length?t.length===1&&t[0]===Ie.Static+Ie.Segment?1:-1:0}function gi(e,t){let s=0;const n=e.score,o=t.score;for(;s0&&t[t.length-1]<0}const Vc={strict:!1,end:!0,sensitive:!1};function jc(e,t,s){const n=Dc(Nc(e.path),s),o=ie(n,{record:e,parent:t,children:[],alias:[]});return t&&!o.record.aliasOf==!t.record.aliasOf&&t.children.push(o),o}function Fc(e,t){const s=[],n=new Map;t=Fo(Vc,t);function o(p){return n.get(p)}function r(p,g,v){const E=!v,x=zo(p);x.aliasOf=v&&v.record;const $=Fo(t,p),O=[x];if("alias"in p){const V=typeof p.alias=="string"?[p.alias]:p.alias;for(const se of V)O.push(zo(ie({},x,{components:v?v.record.components:x.components,path:se,aliasOf:v?v.record:x})))}let I,L;for(const V of O){const{path:se}=V;if(g&&se[0]!=="/"){const K=g.record.path,S=K[K.length-1]==="/"?"":"/";V.path=g.record.path+(se&&S+se)}if(I=jc(V,g,$),v?v.alias.push(I):(L=L||I,L!==I&&L.alias.push(I),E&&p.name&&!Xo(I)&&i(p.name)),vi(I)&&a(I),x.children){const K=x.children;for(let S=0;S{i(L)}:ps}function i(p){if(pi(p)){const g=n.get(p);g&&(n.delete(p),s.splice(s.indexOf(g),1),g.children.forEach(i),g.alias.forEach(i))}else{const g=s.indexOf(p);g>-1&&(s.splice(g,1),p.record.name&&n.delete(p.record.name),p.children.forEach(i),p.alias.forEach(i))}}function l(){return s}function a(p){const g=Hc(p,s);s.splice(g,0,p),p.record.name&&!Xo(p)&&n.set(p.record.name,p)}function u(p,g){let v,E={},x,$;if("name"in p&&p.name){if(v=n.get(p.name),!v)throw Yt(be.MATCHER_NOT_FOUND,{location:p});$=v.record.name,E=ie(Jo(g.params,v.keys.filter(L=>!L.optional).concat(v.parent?v.parent.keys.filter(L=>L.optional):[]).map(L=>L.name)),p.params&&Jo(p.params,v.keys.map(L=>L.name))),x=v.stringify(E)}else if(p.path!=null)x=p.path,v=s.find(L=>L.re.test(x)),v&&(E=v.parse(x),$=v.record.name);else{if(v=g.name?n.get(g.name):s.find(L=>L.re.test(g.path)),!v)throw Yt(be.MATCHER_NOT_FOUND,{location:p,currentLocation:g});$=v.record.name,E=ie({},g.params,p.params),x=v.stringify(E)}const O=[];let I=v;for(;I;)O.unshift(I.record),I=I.parent;return{name:$,path:x,params:E,matched:O,meta:Uc(O)}}e.forEach(p=>r(p));function d(){s.length=0,n.clear()}return{addRoute:r,resolve:u,removeRoute:i,clearRoutes:d,getRoutes:l,getRecordMatcher:o}}function Jo(e,t){const s={};for(const n of t)n in e&&(s[n]=e[n]);return s}function zo(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Lc(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Lc(e){const t={},s=e.props||!1;if("component"in e)t.default=s;else for(const n in e.components)t[n]=typeof s=="object"?s[n]:s;return t}function Xo(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Uc(e){return e.reduce((t,s)=>ie(t,s.meta),{})}function Hc(e,t){let s=0,n=t.length;for(;s!==n;){const r=s+n>>1;gi(e,t[r])<0?n=r:s=r+1}const o=Bc(e);return o&&(n=t.lastIndexOf(o,n-1)),n}function Bc(e){let t=e;for(;t=t.parent;)if(vi(t)&&gi(e,t)===0)return t}function vi({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Qo(e){const t=We(rn),s=We(Zn),n=Ve(()=>{const a=ft(e.to);return t.resolve(a)}),o=Ve(()=>{const{matched:a}=n.value,{length:u}=a,d=a[u-1],p=s.matched;if(!d||!p.length)return-1;const g=p.findIndex(Qt.bind(null,d));if(g>-1)return g;const v=Yo(a[u-2]);return u>1&&Yo(d)===v&&p[p.length-1].path!==v?p.findIndex(Qt.bind(null,a[u-2])):g}),r=Ve(()=>o.value>-1&&Jc(s.params,n.value.params)),i=Ve(()=>o.value>-1&&o.value===s.matched.length-1&&fi(s.params,n.value.params));function l(a={}){if(Wc(a)){const u=t[ft(e.replace)?"replace":"push"](ft(e.to)).catch(ps);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>u),u}return Promise.resolve()}return{route:n,href:Ve(()=>n.value.href),isActive:r,isExactActive:i,navigate:l}}function qc(e){return e.length===1?e[0]:e}const Gc=Ir({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Qo,setup(e,{slots:t}){const s=Qs(Qo(e)),{options:n}=We(rn),o=Ve(()=>({[Zo(e.activeClass,n.linkActiveClass,"router-link-active")]:s.isActive,[Zo(e.exactActiveClass,n.linkExactActiveClass,"router-link-exact-active")]:s.isExactActive}));return()=>{const r=t.default&&qc(t.default(s));return e.custom?r:oi("a",{"aria-current":s.isExactActive?e.ariaCurrentValue:null,href:s.href,onClick:s.navigate,class:o.value},r)}}}),Kc=Gc;function Wc(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Jc(e,t){for(const s in t){const n=t[s],o=e[s];if(typeof n=="string"){if(n!==o)return!1}else if(!Je(o)||o.length!==n.length||n.some((r,i)=>r!==o[i]))return!1}return!0}function Yo(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Zo=(e,t,s)=>e??t??s,zc=Ir({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:s}){const n=We($n),o=Ve(()=>e.route||n.value),r=We(qo,0),i=Ve(()=>{let u=ft(r);const{matched:d}=o.value;let p;for(;(p=d[u])&&!p.components;)u++;return u}),l=Ve(()=>o.value.matched[i.value]);Ps(qo,Ve(()=>i.value+1)),Ps(Sc,l),Ps($n,o);const a=Q();return ds(()=>[a.value,l.value,e.name],([u,d,p],[g,v,E])=>{d&&(d.instances[p]=u,v&&v!==d&&u&&u===g&&(d.leaveGuards.size||(d.leaveGuards=v.leaveGuards),d.updateGuards.size||(d.updateGuards=v.updateGuards))),u&&d&&(!v||!Qt(d,v)||!g)&&(d.enterCallbacks[p]||[]).forEach(x=>x(u))},{flush:"post"}),()=>{const u=o.value,d=e.name,p=l.value,g=p&&p.components[d];if(!g)return er(s.default,{Component:g,route:u});const v=p.props[d],E=v?v===!0?u.params:typeof v=="function"?v(u):v:null,$=oi(g,ie({},E,t,{onVnodeUnmounted:O=>{O.component.isUnmounted&&(p.instances[d]=null)},ref:a}));return er(s.default,{Component:$,route:u})||$}}});function er(e,t){if(!e)return null;const s=e(t);return s.length===1?s[0]:s}const Xc=zc;function Qc(e){const t=Fc(e.routes,e),s=e.parseQuery||wc,n=e.stringifyQuery||Bo,o=e.history,r=ns(),i=ns(),l=ns(),a=Zi(bt);let u=bt;Lt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=gn.bind(null,w=>""+w),p=gn.bind(null,rc),g=gn.bind(null,_s);function v(w,M){let N,H;return pi(w)?(N=t.getRecordMatcher(w),H=M):H=w,t.addRoute(H,N)}function E(w){const M=t.getRecordMatcher(w);M&&t.removeRoute(M)}function x(){return t.getRoutes().map(w=>w.record)}function $(w){return!!t.getRecordMatcher(w)}function O(w,M){if(M=ie({},M||a.value),typeof w=="string"){const h=vn(s,w,M.path),_=t.resolve({path:h.path},M),C=o.createHref(h.fullPath);return ie(h,_,{params:g(_.params),hash:_s(h.hash),redirectedFrom:void 0,href:C})}let N;if(w.path!=null)N=ie({},w,{path:vn(s,w.path,M.path).path});else{const h=ie({},w.params);for(const _ in h)h[_]==null&&delete h[_];N=ie({},w,{params:p(h)}),M.params=p(M.params)}const H=t.resolve(N,M),ee=w.hash||"";H.params=d(g(H.params));const f=ac(n,ie({},w,{hash:sc(ee),path:H.path})),m=o.createHref(f);return ie({fullPath:f,hash:ee,query:n===Bo?Cc(w.query):w.query||{}},H,{redirectedFrom:void 0,href:m})}function I(w){return typeof w=="string"?vn(s,w,a.value.path):ie({},w)}function L(w,M){if(u!==w)return Yt(be.NAVIGATION_CANCELLED,{from:M,to:w})}function V(w){return S(w)}function se(w){return V(ie(I(w),{replace:!0}))}function K(w,M){const N=w.matched[w.matched.length-1];if(N&&N.redirect){const{redirect:H}=N;let ee=typeof H=="function"?H(w,M):H;return typeof ee=="string"&&(ee=ee.includes("?")||ee.includes("#")?ee=I(ee):{path:ee},ee.params={}),ie({query:w.query,hash:w.hash,params:ee.path!=null?{}:w.params},ee)}}function S(w,M){const N=u=O(w),H=a.value,ee=w.state,f=w.force,m=w.replace===!0,h=K(N,H);if(h)return S(ie(I(h),{state:typeof h=="object"?ie({},ee,h.state):ee,force:f,replace:m}),M||N);const _=N;_.redirectedFrom=M;let C;return!f&&cc(n,H,N)&&(C=Yt(be.NAVIGATION_DUPLICATED,{to:_,from:H}),ze(H,H,!0,!1)),(C?Promise.resolve(C):ne(_,H)).catch(y=>lt(y)?lt(y,be.NAVIGATION_GUARD_REDIRECT)?y:vt(y):re(y,_,H)).then(y=>{if(y){if(lt(y,be.NAVIGATION_GUARD_REDIRECT))return S(ie({replace:m},I(y.to),{state:typeof y.to=="object"?ie({},ee,y.to.state):ee,force:f}),M||_)}else y=b(_,H,!0,m,ee);return X(_,H,y),y})}function D(w,M){const N=L(w,M);return N?Promise.reject(N):Promise.resolve()}function oe(w){const M=Vt.values().next().value;return M&&typeof M.runWithContext=="function"?M.runWithContext(w):w()}function ne(w,M){let N;const[H,ee,f]=Ec(w,M);N=yn(H.reverse(),"beforeRouteLeave",w,M);for(const h of H)h.leaveGuards.forEach(_=>{N.push(xt(_,w,M))});const m=D.bind(null,w,M);return N.push(m),He(N).then(()=>{N=[];for(const h of r.list())N.push(xt(h,w,M));return N.push(m),He(N)}).then(()=>{N=yn(ee,"beforeRouteUpdate",w,M);for(const h of ee)h.updateGuards.forEach(_=>{N.push(xt(_,w,M))});return N.push(m),He(N)}).then(()=>{N=[];for(const h of f)if(h.beforeEnter)if(Je(h.beforeEnter))for(const _ of h.beforeEnter)N.push(xt(_,w,M));else N.push(xt(h.beforeEnter,w,M));return N.push(m),He(N)}).then(()=>(w.matched.forEach(h=>h.enterCallbacks={}),N=yn(f,"beforeRouteEnter",w,M,oe),N.push(m),He(N))).then(()=>{N=[];for(const h of i.list())N.push(xt(h,w,M));return N.push(m),He(N)}).catch(h=>lt(h,be.NAVIGATION_CANCELLED)?h:Promise.reject(h))}function X(w,M,N){l.list().forEach(H=>oe(()=>H(w,M,N)))}function b(w,M,N,H,ee){const f=L(w,M);if(f)return f;const m=M===bt,h=Lt?history.state:{};N&&(H||m?o.replace(w.fullPath,ie({scroll:m&&h&&h.scroll},ee)):o.push(w.fullPath,ee)),a.value=w,ze(w,M,N,m),vt()}let j;function At(){j||(j=o.listen((w,M,N)=>{if(!Rt.listening)return;const H=O(w),ee=K(H,Rt.currentRoute.value);if(ee){S(ie(ee,{replace:!0,force:!0}),H).catch(ps);return}u=H;const f=a.value;Lt&&vc(Ho(f.fullPath,N.delta),on()),ne(H,f).catch(m=>lt(m,be.NAVIGATION_ABORTED|be.NAVIGATION_CANCELLED)?m:lt(m,be.NAVIGATION_GUARD_REDIRECT)?(S(ie(I(m.to),{force:!0}),H).then(h=>{lt(h,be.NAVIGATION_ABORTED|be.NAVIGATION_DUPLICATED)&&!N.delta&&N.type===Nn.pop&&o.go(-1,!1)}).catch(ps),Promise.reject()):(N.delta&&o.go(-N.delta,!1),re(m,H,f))).then(m=>{m=m||b(H,f,!1),m&&(N.delta&&!lt(m,be.NAVIGATION_CANCELLED)?o.go(-N.delta,!1):N.type===Nn.pop&<(m,be.NAVIGATION_ABORTED|be.NAVIGATION_DUPLICATED)&&o.go(-1,!1)),X(H,f,m)}).catch(ps)}))}let Dt=ns(),we=ns(),ue;function re(w,M,N){vt(w);const H=we.list();return H.length?H.forEach(ee=>ee(w,M,N)):console.error(w),Promise.reject(w)}function rt(){return ue&&a.value!==bt?Promise.resolve():new Promise((w,M)=>{Dt.add([w,M])})}function vt(w){return ue||(ue=!w,At(),Dt.list().forEach(([M,N])=>w?N(w):M()),Dt.reset()),w}function ze(w,M,N,H){const{scrollBehavior:ee}=e;if(!Lt||!ee)return Promise.resolve();const f=!N&&bc(Ho(w.fullPath,0))||(H||!N)&&history.state&&history.state.scroll||null;return Kn().then(()=>ee(w,M,f)).then(m=>m&&gc(m)).catch(m=>re(m,w,M))}const ke=w=>o.go(w);let Mt;const Vt=new Set,Rt={currentRoute:a,listening:!0,addRoute:v,removeRoute:E,clearRoutes:t.clearRoutes,hasRoute:$,getRoutes:x,resolve:O,options:e,push:V,replace:se,go:ke,back:()=>ke(-1),forward:()=>ke(1),beforeEach:r.add,beforeResolve:i.add,afterEach:l.add,onError:we.add,isReady:rt,install(w){w.component("RouterLink",Kc),w.component("RouterView",Xc),w.config.globalProperties.$router=Rt,Object.defineProperty(w.config.globalProperties,"$route",{enumerable:!0,get:()=>ft(a)}),Lt&&!Mt&&a.value===bt&&(Mt=!0,V(o.location).catch(H=>{}));const M={};for(const H in bt)Object.defineProperty(M,H,{get:()=>a.value[H],enumerable:!0});w.provide(rn,Rt),w.provide(Zn,Cr(M)),w.provide($n,a);const N=w.unmount;Vt.add(w),w.unmount=function(){Vt.delete(w),Vt.size<1&&(u=bt,j&&j(),j=null,a.value=bt,Mt=!1,ue=!1),N()}}};function He(w){return w.reduce((M,N)=>M.then(()=>oe(N)),Promise.resolve())}return Rt}function Zt(){return We(rn)}function Yc(e){return We(Zn)}const Zc="/assets/Hero-C0gOcyj1.png",eo="/assets/CtrlCash-white-CJM1Egrh.png",eu={},tu={class:"container-fluid"},su={class:"collapse navbar-collapse",id:"navbarNav"},nu={class:"navbar-nav ms-auto align-items-center"};function ou(e,t,s,n,o,r){const i=$t("router-link");return F(),U("header",null,[c("nav",{class:ge(["navbar navbar-expand-lg px-3",["bg-especial","navbar-dark"]])},[c("div",tu,[z(i,{class:"navbar-brand p-0",to:"/"},{default:Ee(()=>[...t[0]||(t[0]=[c("img",{src:eo,alt:"CtrlCash Logo",width:"140",height:"40"},null,-1)])]),_:1}),t[5]||(t[5]=c("button",{class:"navbar-toggler",type:"button","data-bs-toggle":"collapse","data-bs-target":"#navbarNav","aria-controls":"navbarNav","aria-expanded":"false","aria-label":"Toggle navigation"},[c("span",{class:"navbar-toggler-icon"})],-1)),c("div",su,[c("div",nu,[z(i,{to:"/about",class:"nav-link"},{default:Ee(()=>[...t[1]||(t[1]=[Z("Sobre nós",-1)])]),_:1}),z(i,{to:"/help",class:"nav-link me-3"},{default:Ee(()=>[...t[2]||(t[2]=[Z("Ajuda",-1)])]),_:1}),z(i,{to:"/cadastro",class:"btn btn-success me-2"},{default:Ee(()=>[...t[3]||(t[3]=[Z("Abrir Conta",-1)])]),_:1}),z(i,{to:"/login",class:"btn btn-light text-primary"},{default:Ee(()=>[...t[4]||(t[4]=[Z("Login",-1)])]),_:1})])])])])])}const Es=Ge(eu,[["render",ou],["__scopeId","data-v-b6bce1a4"]]),ru={},iu={class:"bg-dark-footer text-white pt-5 pb-3"},lu={class:"container"},au={class:"row g-4"},cu={class:"col-md-2 col-6"},uu={class:"list-unstyled"},du={class:"mb-2"},fu={class:"mb-2"},pu={class:"mb-2"};function mu(e,t){const s=$t("router-link");return F(),U("footer",iu,[c("div",lu,[c("div",au,[t[4]||(t[4]=c("div",{class:"col-md-4 col-12"},[c("img",{src:eo,alt:"CtrlCash Logo",width:"120",height:"35",class:"mb-3"}),c("p",{class:"text-secondary-footer mt-2"}," Seu dinheiro. Seu controle total. "),c("p",{class:"text-secondary-footer small"}," Um projeto acadêmico de finanças inovadoras. ")],-1)),c("div",cu,[t[3]||(t[3]=c("h5",{class:"fw-bold text-white-footer mb-3"},"Navegue",-1)),c("ul",uu,[c("li",du,[z(s,{to:"/",class:"text-secondary-footer text-decoration-none"},{default:Ee(()=>[...t[0]||(t[0]=[Z("Início",-1)])]),_:1})]),c("li",fu,[z(s,{to:"/about",class:"text-secondary-footer text-decoration-none"},{default:Ee(()=>[...t[1]||(t[1]=[Z("Sobre Nós",-1)])]),_:1})]),c("li",pu,[z(s,{to:"/help",class:"text-secondary-footer text-decoration-none"},{default:Ee(()=>[...t[2]||(t[2]=[Z("Ajuda",-1)])]),_:1})])])]),t[5]||(t[5]=sn('
',2))]),t[6]||(t[6]=c("hr",{class:"my-4 border-secondary-footer"},null,-1)),t[7]||(t[7]=c("div",{class:"text-center"},[c("p",{class:"text-secondary-footer small mb-0"}," © 2025 CtrlCash - Todos os direitos reservados. Protótipo desenvolvido para fins acadêmicos. ")],-1))])])}const to=Ge(ru,[["render",mu],["__scopeId","data-v-7ea2c5b6"]]),hu={class:"main-no-gap"},gu={class:"bg-especial"},vu={class:"container p-3 row align-items-center m-auto"},bu={class:"col-md-6 col-12 py-5"},yu={__name:"HomeView",setup(e){return(t,s)=>{const n=$t("router-link");return F(),U(Ce,null,[z(Es),c("main",hu,[c("div",gu,[c("section",vu,[c("div",bu,[s[2]||(s[2]=c("h1",{class:"text-white display-10 text fw-bold text-break"},[Z("Seu dinheiro. "),c("br"),Z(" Seu controle total.")],-1)),s[3]||(s[3]=c("p",{class:"text-secondary fs-5"},"Organize, invista e alcance seus objetivos financeiros com segurança e facilidade. ",-1)),z(n,{to:"/register",class:"btn btn-success btn-lg mt-3 fw-bold me-3"},{default:Ee(()=>[...s[0]||(s[0]=[Z("Abra sua conta",-1)])]),_:1}),z(n,{to:"/features",class:"btn btn-outline-light btn-lg mt-3"},{default:Ee(()=>[...s[1]||(s[1]=[Z("Conheça os recursos",-1)])]),_:1})]),s[4]||(s[4]=c("div",{class:"col-md-6 col-12 d-flex justify-content-center py-5"},[c("img",{src:Zc,alt:"Ilustração de controle financeiro do CtrlCash",class:"img-fluid"})],-1))])]),s[5]||(s[5]=sn('

Concentre-se no que importa. Nós cuidamos do resto.

Descubra as funcionalidades que dão o controle total da sua vida financeira na palma da sua mão.

Orçamento Inteligente

Crie orçamentos por categoria, receba alertas e visualize seus gastos em tempo real, evitando surpresas no fim do mês.

Metas e Investimentos

Defina seus objetivos (viagem, casa, carro) e o CtrlCash te ajuda a poupar, investir e acompanhar seu progresso.

PIX e Pagamentos Rápidos

Envie e receba dinheiro em segundos. Pague contas e boletos com agilidade, tudo em um só lugar.

Histórico Automático

Chega de planilhas. O app registra todas as transações, categoriza e gera relatórios visuais inteligentes para você.

Segurança e Alertas

Monitoramento 24h e notificações em tempo real. Sua segurança é prioridade máxima com tecnologia de ponta.

Central de Cartões

Controle seus limites, bloqueie e desbloqueie cartões virtuais e físicos diretamente pelo app, com total autonomia.

',1))]),z(to)],64)}}},_u=Ge(yu,[["__scopeId","data-v-ab903d66"]]),xu={class:"navbar navbar-expand-lg navbar-dark bg-primary-dark shadow-lg sticky-top"},wu={class:"container-fluid max-w-7xl mx-auto px-4"},Cu={class:"collapse navbar-collapse",id:"navbarNav"},Su={class:"navbar-nav me-auto mb-2 mb-lg-0"},Eu={class:"nav-item"},Au={class:"nav-item"},Ru={class:"nav-item"},Tu={class:"d-flex align-items-center ms-auto"},Ou={class:"btn btn-link text-white me-3 p-0",title:"Notificações"},Pu={class:"bi bi-bell-fill fs-5 position-relative"},Iu={key:0,class:"position-absolute top-0 start-100 translate-middle p-1 bg-danger border border-light rounded-circle"},Nu={class:"d-flex align-items-center me-3"},ku=["src","alt"],$u={class:"ms-2 d-none d-md-inline text-sm text-white"},Du={__name:"HeaderApp",setup(e){const t=Zt(),s=Yc(),n=Q("Usuário"),o=Q("https://placehold.co/36x36/1A3B5E/FFFFFF?text=U"),r=Q(0),i=()=>{try{const a=localStorage.getItem("user");if(a){const u=JSON.parse(a);if(n.value=u.name||"Usuário",u.name){const d=u.name.split(" ").map(p=>p[0]).join("").toUpperCase().substring(0,2);o.value=`https://placehold.co/36x36/1A3B5E/FFFFFF?text=${d}`}}}catch(a){console.error("Erro ao carregar dados do usuário:",a)}},l=()=>{console.log("Usuário desconectado. Redirecionando para o login."),localStorage.removeItem("user"),localStorage.removeItem("isAuthenticated"),localStorage.removeItem("token"),t.push("/login")};return ds(s,()=>{i()}),Cs(()=>{i();const a=localStorage.getItem("isAuthenticated"),u=localStorage.getItem("user");(!a||!u)&&t.push("/login")}),(a,u)=>{const d=$t("router-link");return F(),U("nav",xu,[c("div",wu,[z(d,{to:"/dashboard",class:"navbar-brand d-flex align-items-center me-4"},{default:Ee(()=>[...u[0]||(u[0]=[c("img",{src:eo,alt:"CtrlCash Logo",width:"120",class:"d-inline-block logo-align"},null,-1)])]),_:1}),u[6]||(u[6]=c("button",{class:"navbar-toggler",type:"button","data-bs-toggle":"collapse","data-bs-target":"#navbarNav","aria-controls":"navbarNav","aria-expanded":"false","aria-label":"Toggle navigation"},[c("span",{class:"navbar-toggler-icon"})],-1)),c("div",Cu,[c("ul",Su,[c("li",Eu,[z(d,{to:"/dashboard",class:ge(["nav-link",ft(s).path==="/dashboard"?"active fw-bold text-white":"text-white-50","hover-success-feature"])},{default:Ee(()=>[...u[1]||(u[1]=[Z("Dashboard",-1)])]),_:1},8,["class"])]),c("li",Au,[z(d,{to:"/transacoes",class:ge(["nav-link",ft(s).path==="/transacoes"?"active fw-bold text-white":"text-white-50","hover-success-feature"])},{default:Ee(()=>[...u[2]||(u[2]=[Z("Transações",-1)])]),_:1},8,["class"])]),c("li",Ru,[z(d,{to:"/configuracoes",class:ge(["nav-link",ft(s).path==="/configuracoes"?"active fw-bold text-white":"text-white-50","hover-success-feature"])},{default:Ee(()=>[...u[3]||(u[3]=[Z("Configurações",-1)])]),_:1},8,["class"])])]),c("div",Tu,[c("button",Ou,[c("i",Pu,[r.value>0?(F(),U("span",Iu,[c("small",null,Y(r.value>9?"9+":r.value),1)])):ve("",!0)])]),c("div",Nu,[c("img",{class:"rounded-circle border border-white",src:o.value,alt:`Avatar de ${n.value}`,style:{width:"36px",height:"36px","object-fit":"cover"}},null,8,ku),c("span",$u,Y(n.value),1)]),c("button",{onClick:l,class:"btn btn-outline-light btn-sm d-none d-md-inline-flex align-items-center",title:"Sair"},[...u[4]||(u[4]=[c("i",{class:"bi bi-box-arrow-right me-1"},null,-1),Z(" Sair ",-1)])]),c("div",{class:"d-md-none"},[c("button",{onClick:l,class:"btn btn-outline-light btn-sm w-100 mt-2 d-flex align-items-center justify-content-center"},[...u[5]||(u[5]=[c("i",{class:"bi bi-box-arrow-right me-2"},null,-1),Z(" Sair ",-1)])])])])])])])}}},so=Ge(Du,[["__scopeId","data-v-cb189098"]]),Mu={class:"dashboard-page bg-light min-vh-100"},Vu={class:"container-fluid py-4 max-w-7xl mx-auto px-4"},ju={class:"row g-4 mb-5"},Fu={class:"col-lg-4 col-md-6 col-sm-12"},Lu={class:"card shadow-sm border-0 h-100 p-3"},Uu={class:"card-body"},Hu={class:"d-flex justify-content-between align-items-center"},Bu={class:"card-text fs-3 fw-bold text-primary-dark"},qu={class:"col-lg-4 col-md-6 col-sm-12"},Gu={class:"card shadow-sm border-0 h-100 p-3"},Ku={class:"card-body"},Wu={class:"d-flex justify-content-between align-items-center"},Ju={class:"card-text fs-3 fw-bold text-success-feature"},zu={class:"text-muted"},Xu={class:"col-lg-4 col-md-12 col-sm-12"},Qu={class:"card shadow-sm border-0 h-100 p-3"},Yu={class:"card-body"},Zu={class:"d-flex justify-content-between align-items-center"},ed={class:"card-text fs-3 fw-bold text-danger"},td={class:"text-muted"},sd={class:"row g-4"},nd={class:"col-lg-8"},od={class:"card shadow-sm border-0 h-100 p-4"},rd={class:"d-flex justify-content-between align-items-center mb-3"},id={class:"btn-group btn-group-sm"},ld={key:0,class:"chart-container rounded-3 text-center"},ad=["src"],cd={key:1,class:"matplotlib-placeholder bg-light-subtle rounded-3 border border-dashed p-5 text-center d-flex flex-column align-items-center justify-content-center",style:{"min-height":"400px"}},ud={key:0,class:"spinner-border text-primary-dark mb-3",role:"status"},dd={class:"text-primary-dark opacity-50 mb-0"},fd={class:"col-lg-4"},pd={class:"card shadow-sm border-0 h-100 p-4"},md={key:0,class:"text-center py-4"},hd={key:1,class:"list-group list-group-flush"},gd={class:"transaction-info"},vd={class:"fw-medium"},bd={class:"text-muted"},yd={key:0,class:"list-group-item text-center text-muted py-4"},_d={class:"list-group-item text-center pt-3 border-0"},xd={__name:"UserDashboardView",setup(e){const t=Zt(),s=Q({total_income:0,total_expenses:0,balance:0,recent_transactions:[]}),n=Q(""),o=Q("monthly"),r=Q(!1),i=Q(!1),l=async()=>{i.value=!0;try{const E=JSON.parse(localStorage.getItem("user"));if(!E){t.push("/login");return}const x=await fetch(`/api/dashboard/summary?user_id=${E.id}`);if(x.ok){const $=await x.json();s.value=$}}catch(E){console.error("Erro ao carregar dashboard:",E)}finally{i.value=!1}},a=async(E="monthly")=>{r.value=!0,o.value=E;try{const x=JSON.parse(localStorage.getItem("user")),$=await fetch(`/api/dashboard/chart?user_id=${x.id}&type=${E}`);if($.ok){const O=await $.json();n.value=O.chart}}catch(x){console.error("Erro ao carregar gráfico:",x)}finally{r.value=!1}},u=E=>new Intl.NumberFormat("pt-BR",{style:"currency",currency:"BRL"}).format(E||0),d=E=>{if(!E)return"-";if(E.match(/^\d{4}-\d{2}-\d{2}$/)){const[x,$,O]=E.split("-");return`${O.padStart(2,"0")}/${$.padStart(2,"0")}/${x}`}return E},p=()=>{const E=s.value.balance;return E>0?"Saldo positivo":E<0?"Saldo negativo":"Saldo zerado"},g=()=>{const E=s.value.total_income;if(E===0)return"Sem receitas este mês";const $=E/5e3*100;return`Meta: ${Math.min($,100).toFixed(0)}%`},v=()=>{const $=2500-s.value.total_expenses;return $>=0?`Limite restante: ${u($)}`:`Excedido: ${u(Math.abs($))}`};return Cs(()=>{l(),setTimeout(()=>a("monthly"),500)}),(E,x)=>{const $=$t("router-link");return F(),U("div",Mu,[z(so),c("div",Vu,[x[14]||(x[14]=c("h1",{class:"h3 fw-bold text-primary-dark mb-4"},"Visão Geral",-1)),c("div",ju,[c("div",Fu,[c("div",Lu,[c("div",Uu,[x[3]||(x[3]=c("h5",{class:"card-title text-muted mb-3"},"Saldo Total",-1)),c("div",Hu,[c("p",Bu,Y(u(s.value.balance)),1),x[2]||(x[2]=c("i",{class:"bi bi-wallet2 fs-2 text-primary-dark opacity-75"},null,-1))]),c("small",{class:ge([s.value.balance>=0?"text-success-feature":"text-danger","fw-medium"])},Y(p()),3)])])]),c("div",qu,[c("div",Gu,[c("div",Ku,[x[5]||(x[5]=c("h5",{class:"card-title text-muted mb-3"},"Receitas do Mês",-1)),c("div",Wu,[c("p",Ju,Y(u(s.value.total_income)),1),x[4]||(x[4]=c("i",{class:"bi bi-arrow-up-circle-fill fs-2 text-success-feature opacity-75"},null,-1))]),c("small",zu,Y(g()),1)])])]),c("div",Xu,[c("div",Qu,[c("div",Yu,[x[7]||(x[7]=c("h5",{class:"card-title text-muted mb-3"},"Despesas do Mês",-1)),c("div",Zu,[c("p",ed,Y(u(s.value.total_expenses)),1),x[6]||(x[6]=c("i",{class:"bi bi-arrow-down-circle-fill fs-2 text-danger opacity-75"},null,-1))]),c("small",td,Y(v()),1)])])])]),c("div",sd,[c("div",nd,[c("div",od,[c("div",rd,[x[8]||(x[8]=c("h4",{class:"fw-bold text-primary-dark mb-0"},"Evolução Financeira",-1)),c("div",id,[c("button",{onClick:x[0]||(x[0]=O=>a("monthly")),class:ge(["btn btn-outline-primary",{active:o.value==="monthly"}])}," Mensal ",2),c("button",{onClick:x[1]||(x[1]=O=>a("categories")),class:ge(["btn btn-outline-primary",{active:o.value==="categories"}])}," Categorias ",2)])]),n.value?(F(),U("div",ld,[c("img",{src:n.value,alt:"Gráfico Financeiro",class:"img-fluid rounded",style:{"max-height":"400px"}},null,8,ad)])):(F(),U("div",cd,[r.value?(F(),U("div",ud)):ve("",!0),x[9]||(x[9]=c("i",{class:"bi bi-bar-chart-fill fs-1 text-primary-dark opacity-25 mb-2"},null,-1)),c("p",dd,Y(r.value?"Carregando visualização...":"Selecione um tipo de gráfico"),1)]))])]),c("div",fd,[c("div",pd,[x[13]||(x[13]=c("h4",{class:"fw-bold text-primary-dark mb-3"},"Atividade Recente",-1)),i.value?(F(),U("div",md,[...x[10]||(x[10]=[c("div",{class:"spinner-border text-primary-dark",role:"status"},null,-1)])])):(F(),U("ul",hd,[(F(!0),U(Ce,null,Gt(s.value.recent_transactions,O=>(F(),U("li",{key:O.id,class:"list-group-item d-flex justify-content-between align-items-center"},[c("div",gd,[c("div",vd,Y(O.description),1),c("small",bd,Y(d(O.date))+" • "+Y(O.category),1)]),c("span",{class:ge(O.type==="income"?"badge bg-success-feature":"badge bg-danger")},Y(O.type==="income"?"+":"-")+Y(u(O.amount)),3)]))),128)),s.value.recent_transactions&&s.value.recent_transactions.length===0?(F(),U("li",yd,[...x[11]||(x[11]=[c("i",{class:"bi bi-receipt fs-4 opacity-50 d-block mb-2"},null,-1),Z(" Nenhuma transação recente ",-1)])])):ve("",!0),c("li",_d,[z($,{to:"/transacoes",class:"btn btn-link btn-sm text-primary-dark fw-medium"},{default:Ee(()=>[...x[12]||(x[12]=[Z(" Ver todas as transações ",-1)])]),_:1})])]))])])])])])}}},wd=Ge(xd,[["__scopeId","data-v-e51a257a"]]),bi="/assets/CtrlCash-blue-DUaQbcwD.png",Cd={class:"login-container d-flex align-items-center justify-content-center min-vh-100 p-3"},Sd={class:"login-card p-5 shadow-lg rounded-4 bg-white"},Ed={class:"mb-3"},Ad={class:"input-group"},Rd={class:"mb-4"},Td={class:"input-group"},Od={key:0,class:"alert alert-danger"},Pd=["disabled"],Id={key:0,class:"spinner-border spinner-border-sm me-2"},Nd={__name:"LoginView",setup(e){const t=Zt(),s=Q(!1),n=Q(""),o=Q({email:"",password:""}),r=async()=>{s.value=!0,n.value="";try{const i=await fetch("/api/auth/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o.value)}),l=await i.json();i.ok?(localStorage.setItem("user",JSON.stringify(l.user)),localStorage.setItem("isAuthenticated","true"),t.push("/dashboard")):n.value=l.error||"Erro ao fazer login"}catch(i){console.error("Erro:",i),n.value="Erro de conexão com o servidor"}finally{s.value=!1}};return(i,l)=>(F(),U(Ce,null,[z(Es),c("div",Cd,[c("div",Sd,[l[7]||(l[7]=c("div",{class:"text-center mb-4"},[c("img",{src:bi,alt:"CtrlCash Logo",width:"150",class:"mb-3"}),c("h2",{class:"fw-bold text-primary-dark"},"Login"),c("p",{class:"text-secondary-dark"},"Insira seus dados para continuar o controle.")],-1)),c("form",{onSubmit:ct(r,["prevent"])},[c("div",Ed,[l[3]||(l[3]=c("label",{for:"email",class:"form-label fw-medium text-primary-dark"},"E-mail",-1)),c("div",Ad,[l[2]||(l[2]=c("span",{class:"input-group-text"},[c("i",{class:"bi bi-envelope-fill"})],-1)),he(c("input",{type:"email",class:"form-control",id:"email","onUpdate:modelValue":l[0]||(l[0]=a=>o.value.email=a),required:"",placeholder:"seu.email@exemplo.com"},null,512),[[ye,o.value.email]])])]),c("div",Rd,[l[5]||(l[5]=c("label",{for:"password",class:"form-label fw-medium text-primary-dark"},"Senha",-1)),c("div",Td,[l[4]||(l[4]=c("span",{class:"input-group-text"},[c("i",{class:"bi bi-lock-fill"})],-1)),he(c("input",{type:"password",class:"form-control",id:"password","onUpdate:modelValue":l[1]||(l[1]=a=>o.value.password=a),required:"",placeholder:"********"},null,512),[[ye,o.value.password]])]),l[6]||(l[6]=c("div",{class:"text-end mt-2"},null,-1))]),n.value?(F(),U("div",Od,Y(n.value),1)):ve("",!0),c("button",{type:"submit",class:"btn btn-primary-feature w-100 fw-bold py-2 shadow-sm",disabled:s.value},[s.value?(F(),U("span",Id)):ve("",!0),Z(" "+Y(s.value?"Entrando...":"Acessar Minha Conta"),1)],8,Pd)],32)])])],64))}},kd=Ge(Nd,[["__scopeId","data-v-4211987f"]]),$d={class:"cadastro-container d-flex align-items-center justify-content-center min-vh-100 p-3"},Dd={class:"cadastro-card p-5 shadow-lg rounded-4 bg-white"},Md={class:"mb-3"},Vd={class:"input-group"},jd={class:"mb-3"},Fd={class:"input-group"},Ld={class:"mb-3"},Ud={class:"input-group"},Hd={class:"mb-4"},Bd={class:"input-group"},qd={key:0,class:"alert alert-danger"},Gd={key:1,class:"alert alert-success"},Kd=["disabled"],Wd={key:0,class:"spinner-border spinner-border-sm me-2"},Jd={__name:"CadastroView",setup(e){const t=Zt(),s=Q(!1),n=Q(""),o=Q(""),r=Q({name:"",email:"",password:""}),i=Q(""),l=async()=>{if(s.value=!0,n.value="",o.value="",r.value.password!==i.value){n.value="As senhas não coincidem!",s.value=!1;return}if(r.value.password.length<6){n.value="A senha deve ter pelo menos 6 caracteres",s.value=!1;return}try{const a=await fetch("/api/auth/register",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r.value)}),u=await a.json();a.ok?(o.value="Cadastro realizado com sucesso! Redirecionando...",setTimeout(()=>{localStorage.setItem("user",JSON.stringify(u.user)),localStorage.setItem("isAuthenticated","true"),t.push("/dashboard")},2e3)):n.value=u.error||"Erro ao cadastrar"}catch(a){console.error("Erro:",a),n.value="Erro de conexão com o servidor"}finally{s.value=!1}};return(a,u)=>(F(),U(Ce,null,[z(Es),c("div",$d,[c("div",Dd,[u[12]||(u[12]=c("div",{class:"text-center mb-4"},[c("img",{src:bi,alt:"CtrlCash Logo",width:"150",class:"mb-3"}),c("h2",{class:"fw-bold text-primary-dark"},"Abra Sua Conta"),c("p",{class:"text-secondary-dark"},"Preencha os campos para iniciar seu controle financeiro.")],-1)),c("form",{onSubmit:ct(l,["prevent"])},[c("div",Md,[u[5]||(u[5]=c("label",{for:"nome",class:"form-label fw-medium text-primary-dark"},"Nome Completo",-1)),c("div",Vd,[u[4]||(u[4]=c("span",{class:"input-group-text"},[c("i",{class:"bi bi-person-fill"})],-1)),he(c("input",{type:"text",class:"form-control",id:"nome","onUpdate:modelValue":u[0]||(u[0]=d=>r.value.name=d),required:"",placeholder:"Seu nome"},null,512),[[ye,r.value.name]])])]),c("div",jd,[u[7]||(u[7]=c("label",{for:"email",class:"form-label fw-medium text-primary-dark"},"E-mail",-1)),c("div",Fd,[u[6]||(u[6]=c("span",{class:"input-group-text"},[c("i",{class:"bi bi-envelope-fill"})],-1)),he(c("input",{type:"email",class:"form-control",id:"email","onUpdate:modelValue":u[1]||(u[1]=d=>r.value.email=d),required:"",placeholder:"seu.email@exemplo.com"},null,512),[[ye,r.value.email]])])]),c("div",Ld,[u[9]||(u[9]=c("label",{for:"password",class:"form-label fw-medium text-primary-dark"},"Crie Sua Senha",-1)),c("div",Ud,[u[8]||(u[8]=c("span",{class:"input-group-text"},[c("i",{class:"bi bi-lock-fill"})],-1)),he(c("input",{type:"password",class:"form-control",id:"password","onUpdate:modelValue":u[2]||(u[2]=d=>r.value.password=d),required:"",placeholder:"Mínimo 6 caracteres"},null,512),[[ye,r.value.password]])])]),c("div",Hd,[u[11]||(u[11]=c("label",{for:"confirmPassword",class:"form-label fw-medium text-primary-dark"},"Confirmar Senha",-1)),c("div",Bd,[u[10]||(u[10]=c("span",{class:"input-group-text"},[c("i",{class:"bi bi-lock-fill"})],-1)),he(c("input",{type:"password",class:"form-control",id:"confirmPassword","onUpdate:modelValue":u[3]||(u[3]=d=>i.value=d),required:"",placeholder:"Repita a senha"},null,512),[[ye,i.value]])])]),n.value?(F(),U("div",qd,Y(n.value),1)):ve("",!0),o.value?(F(),U("div",Gd,Y(o.value),1)):ve("",!0),c("button",{type:"submit",class:"btn btn-primary-feature w-100 fw-bold py-2 shadow-sm",disabled:s.value},[s.value?(F(),U("span",Wd)):ve("",!0),Z(" "+Y(s.value?"Cadastrando...":"Criar Minha Conta CtrlCash"),1)],8,Kd)],32)])])],64))}},zd=Ge(Jd,[["__scopeId","data-v-4c8cc0c5"]]),Xd={class:"transacoes-page bg-light min-vh-100"},Qd={class:"container-fluid py-4 max-w-7xl mx-auto px-4"},Yd={class:"card shadow-sm border-0 mb-4 p-3"},Zd={class:"row g-3 align-items-center"},ef={class:"col-md-3"},tf={class:"col-md-4"},sf=["value"],nf={class:"col-md-5"},of={class:"input-group"},rf={class:"card shadow-sm border-0"},lf={class:"card-body p-0"},af={key:0,class:"text-center py-5"},cf={key:1,class:"table-responsive"},uf={class:"table table-hover mb-0"},df={class:"text-center"},ff={class:"text-center"},pf=["onClick"],mf={key:0},hf={key:0,class:"card-footer bg-white text-center"},gf={class:"text-muted"},vf={key:0,class:"modal-overlay"},bf={class:"modal-container"},yf={class:"modal-content"},_f={class:"modal-body"},xf={class:"mb-3"},wf={class:"btn-group w-100",role:"group"},Cf={class:"mb-3"},Sf={class:"row"},Ef={class:"col-md-6 mb-3"},Af={class:"col-md-6 mb-3"},Rf={class:"mb-3"},Tf=["value"],Of={class:"modal-footer"},Pf=["disabled"],If={key:0,class:"spinner-border spinner-border-sm me-2"},Nf={__name:"TransacoesView",setup(e){const t=Zt(),s=Q([]),n=Q([]),o=Q(!1),r=Q(!1),i=Q(!1),l=Q({type:"",category:"",startDate:"",endDate:""}),a=Q({type:"expense",description:"",amount:"",category:"",date:new Date().toISOString().split("T")[0]}),u=Q(null),d=Ve(()=>n.value.filter(K=>K.type===a.value.type)),p=async()=>{o.value=!0;try{const K=JSON.parse(localStorage.getItem("user"));if(!K){t.push("/login");return}const S=await fetch(`/api/transactions?user_id=${K.id}`),D=await S.json();if(S.ok){let oe=D.transactions;l.value.type&&(oe=oe.filter(ne=>ne.type===l.value.type)),l.value.category&&(oe=oe.filter(ne=>ne.category===l.value.category)),l.value.startDate&&(oe=oe.filter(ne=>ne.date>=l.value.startDate)),l.value.endDate&&(oe=oe.filter(ne=>ne.date<=l.value.endDate)),s.value=oe}}catch(K){console.error("Erro ao carregar transações:",K),I("Erro ao carregar transações","error")}finally{o.value=!1}},g=async()=>{try{const K=JSON.parse(localStorage.getItem("user")),S=await fetch(`/api/categories?user_id=${K.id}`),D=await S.json();S.ok&&(n.value=D.categories)}catch(K){console.error("Erro ao carregar categorias:",K)}},v=async()=>{if(r.value=!0,u.value=null,!a.value.description.trim()){I("Descrição é obrigatória","error"),r.value=!1;return}if(!a.value.amount||parseFloat(a.value.amount)<=0){I("Valor deve ser maior que zero","error"),r.value=!1;return}if(!a.value.category){I("Selecione uma categoria","error"),r.value=!1;return}try{const S={user_id:JSON.parse(localStorage.getItem("user")).id,amount:parseFloat(a.value.amount),description:a.value.description.trim(),category:a.value.category,type:a.value.type,date:a.value.date},D=await fetch("/api/transactions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(S)}),oe=await D.json();D.ok?(I("Transação salva com sucesso!","success"),$(),p()):I(oe.error||"Erro ao salvar transação","error")}catch(K){console.error("Erro:",K),I("Erro de conexão com o servidor","error")}finally{r.value=!1}},E=async K=>{if(confirm("Tem certeza que deseja excluir esta transação?"))try{const S=JSON.parse(localStorage.getItem("user")),D=await fetch(`/api/transactions/${K}?user_id=${S.id}`,{method:"DELETE"});if(D.ok)I("Transação excluída com sucesso!","success"),p();else{const oe=await D.json();I(oe.error||"Erro ao excluir transação","error")}}catch(S){console.error("Erro:",S),I("Erro de conexão com o servidor","error")}},x=()=>{i.value=!0,O(),u.value=null},$=()=>{i.value=!1,O(),u.value=null},O=()=>{a.value={type:"expense",description:"",amount:"",category:"",date:new Date().toISOString().split("T")[0]}},I=(K,S)=>{u.value={text:K,type:S},setTimeout(()=>{u.value=null},5e3)},L=K=>new Intl.NumberFormat("pt-BR",{style:"currency",currency:"BRL"}).format(K||0),V=K=>{if(!K)return"-";if(K.match(/^\d{4}-\d{2}-\d{2}$/)){const[S,D,oe]=K.split("-");return`${oe.padStart(2,"0")}/${D.padStart(2,"0")}/${S}`}return K},se=K=>{const S=n.value.find(D=>D.name===K);return S?S.color:"#6c757d"};return Cs(()=>{p(),g()}),(K,S)=>(F(),U("div",Xd,[z(so),c("div",Qd,[c("div",{class:"d-flex justify-content-between align-items-center mb-4"},[S[11]||(S[11]=c("h1",{class:"h3 fw-bold text-primary-dark"},"Minhas Transações",-1)),c("button",{type:"button",class:"btn btn-success-feature fw-bold shadow-sm d-flex align-items-center",onClick:x},[...S[10]||(S[10]=[c("i",{class:"bi bi-plus-circle-fill me-2"},null,-1),Z(" Nova Transação ",-1)])])]),c("div",Yd,[c("div",Zd,[c("div",ef,[S[13]||(S[13]=c("label",{for:"filtroTipo",class:"form-label small text-muted"},"Tipo",-1)),he(c("select",{id:"filtroTipo","onUpdate:modelValue":S[0]||(S[0]=D=>l.value.type=D),class:"form-select",onChange:p},[...S[12]||(S[12]=[c("option",{value:""},"Todos",-1),c("option",{value:"income"},"Receitas",-1),c("option",{value:"expense"},"Despesas",-1)])],544),[[$s,l.value.type]])]),c("div",tf,[S[15]||(S[15]=c("label",{for:"filtroCategoria",class:"form-label small text-muted"},"Categoria",-1)),he(c("select",{id:"filtroCategoria","onUpdate:modelValue":S[1]||(S[1]=D=>l.value.category=D),class:"form-select",onChange:p},[S[14]||(S[14]=c("option",{value:""},"Todas as categorias",-1)),(F(!0),U(Ce,null,Gt(n.value,D=>(F(),U("option",{key:D.id,value:D.name},Y(D.name),9,sf))),128))],544),[[$s,l.value.category]])]),c("div",nf,[S[17]||(S[17]=c("label",{for:"filtroPeriodo",class:"form-label small text-muted"},"Período",-1)),c("div",of,[he(c("input",{type:"date","onUpdate:modelValue":S[2]||(S[2]=D=>l.value.startDate=D),class:"form-control",onChange:p},null,544),[[ye,l.value.startDate]]),S[16]||(S[16]=c("span",{class:"input-group-text"},"a",-1)),he(c("input",{type:"date","onUpdate:modelValue":S[3]||(S[3]=D=>l.value.endDate=D),class:"form-control",onChange:p},null,544),[[ye,l.value.endDate]])])])])]),c("div",rf,[c("div",lf,[o.value?(F(),U("div",af,[...S[18]||(S[18]=[c("div",{class:"spinner-border text-primary-dark",role:"status"},[c("span",{class:"visually-hidden"},"Carregando...")],-1),c("p",{class:"text-muted mt-2"},"Carregando transações...",-1)])])):(F(),U("div",cf,[c("table",uf,[S[21]||(S[21]=c("thead",{class:"bg-light"},[c("tr",null,[c("th",{scope:"col",class:"text-primary-dark fw-bold"},"Descrição"),c("th",{scope:"col",class:"text-primary-dark fw-bold"},"Categoria"),c("th",{scope:"col",class:"text-primary-dark fw-bold text-center"},"Tipo"),c("th",{scope:"col",class:"text-primary-dark fw-bold text-end"},"Valor"),c("th",{scope:"col",class:"text-primary-dark fw-bold"},"Data"),c("th",{scope:"col",class:"text-primary-dark fw-bold text-center"},"Ações")])],-1)),c("tbody",null,[(F(!0),U(Ce,null,Gt(s.value,D=>(F(),U("tr",{key:D.id},[c("td",null,Y(D.description),1),c("td",null,[c("span",{class:"badge",style:Wt({backgroundColor:se(D.category),color:"white"})},Y(D.category),5)]),c("td",df,[c("span",{class:ge(["badge",D.type==="income"?"bg-success-feature":"bg-danger"])},[c("i",{class:ge(D.type==="income"?"bi bi-arrow-up":"bi bi-arrow-down")},null,2),Z(" "+Y(D.type==="income"?"Receita":"Despesa"),1)],2)]),c("td",{class:ge(["text-end fw-bold",D.type==="income"?"text-success-feature":"text-danger"])},Y(L(D.amount)),3),c("td",null,Y(V(D.date)),1),c("td",ff,[c("button",{class:"btn btn-sm btn-outline-danger",title:"Excluir transação",onClick:oe=>E(D.id)},[...S[19]||(S[19]=[c("i",{class:"bi bi-trash"},null,-1)])],8,pf)])]))),128)),s.value.length===0&&!o.value?(F(),U("tr",mf,[...S[20]||(S[20]=[c("td",{colspan:"6",class:"text-center py-5 text-muted"},[c("i",{class:"bi bi-receipt fs-1 opacity-50 d-block mb-2"}),Z(" Nenhuma transação encontrada "),c("br"),c("small",null,'Clique em "Nova Transação" para adicionar sua primeira transação')],-1)])])):ve("",!0)])])]))]),s.value.length>0?(F(),U("div",hf,[c("small",gf,"Exibindo "+Y(s.value.length)+" transações",1)])):ve("",!0)])]),i.value?(F(),U("div",vf,[c("div",bf,[c("div",yf,[c("div",{class:"modal-header bg-primary-dark text-white"},[S[22]||(S[22]=c("h5",{class:"modal-title fw-bold"}," Adicionar Nova Transação ",-1)),c("button",{type:"button",class:"btn-close btn-close-white",onClick:$})]),c("div",_f,[c("form",{onSubmit:ct(v,["prevent"])},[c("div",xf,[S[23]||(S[23]=c("label",{class:"form-label fw-medium text-primary-dark"},"Tipo",-1)),c("div",wf,[he(c("input",{type:"radio",class:"btn-check","onUpdate:modelValue":S[4]||(S[4]=D=>a.value.type=D),id:"tipoReceita",value:"income"},null,512),[[Mo,a.value.type]]),c("label",{class:ge(["btn btn-outline-success-feature fw-bold",{active:a.value.type==="income"}]),for:"tipoReceita"}," Receita ",2),he(c("input",{type:"radio",class:"btn-check","onUpdate:modelValue":S[5]||(S[5]=D=>a.value.type=D),id:"tipoDespesa",value:"expense"},null,512),[[Mo,a.value.type]]),c("label",{class:ge(["btn btn-outline-danger fw-bold",{active:a.value.type==="expense"}]),for:"tipoDespesa"}," Despesa ",2)])]),c("div",Cf,[S[24]||(S[24]=c("label",{for:"descricao",class:"form-label fw-medium text-primary-dark"},"Descrição",-1)),he(c("input",{type:"text",class:"form-control",id:"descricao","onUpdate:modelValue":S[6]||(S[6]=D=>a.value.description=D),placeholder:"Ex: Salário, Aluguel, Supermercado",required:""},null,512),[[ye,a.value.description]])]),c("div",Sf,[c("div",Ef,[S[25]||(S[25]=c("label",{for:"valor",class:"form-label fw-medium text-primary-dark"},"Valor (R$)",-1)),he(c("input",{type:"number",step:"0.01",min:"0.01",class:"form-control",id:"valor","onUpdate:modelValue":S[7]||(S[7]=D=>a.value.amount=D),placeholder:"0.00",required:""},null,512),[[ye,a.value.amount]])]),c("div",Af,[S[26]||(S[26]=c("label",{for:"data",class:"form-label fw-medium text-primary-dark"},"Data",-1)),he(c("input",{type:"date",class:"form-control",id:"data","onUpdate:modelValue":S[8]||(S[8]=D=>a.value.date=D),required:""},null,512),[[ye,a.value.date]])])]),c("div",Rf,[S[28]||(S[28]=c("label",{for:"categoria",class:"form-label fw-medium text-primary-dark"},"Categoria",-1)),he(c("select",{id:"categoria",class:"form-select","onUpdate:modelValue":S[9]||(S[9]=D=>a.value.category=D),required:""},[S[27]||(S[27]=c("option",{value:""},"Selecione uma categoria...",-1)),(F(!0),U(Ce,null,Gt(d.value,D=>(F(),U("option",{key:D.id,value:D.name},Y(D.name),9,Tf))),128))],512),[[$s,a.value.category]])]),u.value?(F(),U("div",{key:0,class:ge(["alert",u.value.type==="success"?"alert-success":"alert-danger"])},Y(u.value.text),3)):ve("",!0)],32)]),c("div",Of,[c("button",{type:"button",class:"btn btn-secondary",onClick:$},"Cancelar"),c("button",{type:"button",class:"btn btn-primary-dark-feature fw-bold",onClick:v,disabled:r.value},[r.value?(F(),U("span",If)):ve("",!0),Z(" "+Y(r.value?"Salvando...":"Salvar Transação"),1)],8,Pf)])])])])):ve("",!0)]))}},kf=Ge(Nf,[["__scopeId","data-v-be477c64"]]),$f={class:"config-page bg-light min-vh-100"},Df={class:"container-fluid py-4 max-w-7xl mx-auto px-4"},Mf={class:"row g-4"},Vf={class:"col-lg-3"},jf={class:"list-group shadow-sm border-0 rounded-3"},Ff={class:"col-lg-9"},Lf={class:"card shadow-sm border-0 p-4 h-100"},Uf={key:0},Hf={class:"row"},Bf={class:"col-md-6 mb-3"},qf={class:"col-md-6 mb-3"},Gf={class:"row"},Kf={class:"col-md-6 mb-3"},Wf={class:"col-md-6 mb-3"},Jf=["disabled"],zf={key:0,class:"spinner-border spinner-border-sm me-2"},Xf={key:1},Qf={class:"d-flex justify-content-between align-items-center mb-3"},Yf={key:0,class:"text-center py-4"},Zf={key:1,class:"row"},ep={class:"col-md-6"},tp={class:"list-group mb-4"},sp={class:"d-flex align-items-center"},np={class:"col-md-6"},op={class:"list-group"},rp={class:"d-flex align-items-center"},ip={key:2},lp={class:"mb-3"},ap={class:"mb-3"},cp={class:"mb-3"},up=["disabled"],dp={key:0,class:"spinner-border spinner-border-sm me-2"},fp={class:"modal-dialog modal-dialog-centered"},pp={class:"modal-content"},mp={class:"modal-body"},hp={class:"mb-3"},gp={class:"mb-3"},vp={class:"mb-3"},bp={class:"d-flex align-items-center"},yp={class:"modal-footer"},_p=["disabled"],xp={key:0,class:"spinner-border spinner-border-sm me-2"},wp={__name:"ConfiguracoesView",setup(e){const t=Zt(),s=Q("perfil"),n=Q(!1),o=Q(!1),r=Q(!1),i=Q(!1),l=Q(!1),a=Q({name:"",email:"",profile:{monthly_income_goal:5e3,monthly_expense_limit:2500,currency:"BRL"}}),u=Q([]),d=Q({name:"",email:"",profile:{monthly_income_goal:5e3,monthly_expense_limit:2500,currency:"BRL"}}),p=Q({currentPassword:"",newPassword:"",confirmPassword:""}),g=Q({name:"",type:"expense",color:"#6c757d"}),v=Q(null),E=Q(null),x=Q(null),$=Q(null),O=Ve(()=>u.value.filter(X=>X.type==="income")),I=Ve(()=>u.value.filter(X=>X.type==="expense")),L=X=>{s.value=X},V=async()=>{try{const X=JSON.parse(localStorage.getItem("user"));if(!X){t.push("/login");return}const b=await fetch(`/api/user/profile?user_id=${X.id}`);if(b.ok){const j=await b.json();a.value=j.user,d.value={...j.user},localStorage.setItem("user",JSON.stringify(j.user))}}catch(X){console.error("Erro ao carregar perfil:",X),ne(v,"Erro ao carregar perfil","error")}},se=async()=>{n.value=!0;try{const X=JSON.parse(localStorage.getItem("user")),b=await fetch(`/api/categories?user_id=${X.id}`),j=await b.json();b.ok&&(u.value=j.categories)}catch(X){console.error("Erro ao carregar categorias:",X),ne(x,"Erro ao carregar categorias","error")}finally{n.value=!1}},K=async()=>{o.value=!0,v.value=null;try{const X=JSON.parse(localStorage.getItem("user")),b=await fetch("/api/user/profile",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({user_id:X.id,name:d.value.name,email:d.value.email,profile:d.value.profile})}),j=await b.json();if(b.ok){const At={...X,name:j.user.name,email:j.user.email,profile:j.user.profile};localStorage.setItem("user",JSON.stringify(At)),ne(v,"Perfil atualizado com sucesso!","success")}else ne(v,j.error||"Erro ao atualizar perfil","error")}catch(X){console.error("Erro:",X),ne(v,"Erro de conexão com o servidor","error")}finally{o.value=!1}},S=async()=>{if(r.value=!0,E.value=null,p.value.newPassword!==p.value.confirmPassword){ne(E,"As senhas não coincidem","error"),r.value=!1;return}if(p.value.newPassword.length<6){ne(E,"A senha deve ter pelo menos 6 caracteres","error"),r.value=!1;return}try{const X=JSON.parse(localStorage.getItem("user")),b=await fetch("/api/user/change-password",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({user_id:X.id,current_password:p.value.currentPassword,new_password:p.value.newPassword})}),j=await b.json();b.ok?(ne(E,"Senha alterada com sucesso!","success"),p.value={currentPassword:"",newPassword:"",confirmPassword:""}):ne(E,j.error||"Erro ao alterar senha","error")}catch(X){console.error("Erro:",X),ne(E,"Erro de conexão com o servidor","error")}finally{r.value=!1}},D=async()=>{i.value=!0,$.value=null;try{const X=JSON.parse(localStorage.getItem("user")),b=await fetch("/api/categories",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user_id:X.id,name:g.value.name,type:g.value.type,color:g.value.color})}),j=await b.json();b.ok?(ne($,"Categoria adicionada com sucesso!","success"),oe(),se()):ne($,j.error||"Erro ao adicionar categoria","error")}catch(X){console.error("Erro:",X),ne($,"Erro de conexão com o servidor","error")}finally{i.value=!1}},oe=()=>{l.value=!1,g.value={name:"",type:"expense",color:"#6c757d"},$.value=null},ne=(X,b,j)=>{X.value={text:b,type:j},setTimeout(()=>{X.value=null},5e3)};return Cs(()=>{V(),se()}),(X,b)=>(F(),U("div",$f,[z(so),c("div",Df,[b[37]||(b[37]=c("h1",{class:"h3 fw-bold text-primary-dark mb-4"},"Configurações e Gestão da Conta",-1)),c("div",Mf,[c("div",Vf,[c("div",jf,[c("a",{href:"#",onClick:b[0]||(b[0]=ct(j=>L("perfil"),["prevent"])),class:ge(["list-group-item list-group-item-action",{"active-feature":s.value==="perfil"}])},[...b[14]||(b[14]=[c("i",{class:"bi bi-person-circle me-2"},null,-1),Z(" Perfil e Dados Pessoais ",-1)])],2),c("a",{href:"#",onClick:b[1]||(b[1]=ct(j=>L("categorias"),["prevent"])),class:ge(["list-group-item list-group-item-action",{"active-feature":s.value==="categorias"}])},[...b[15]||(b[15]=[c("i",{class:"bi bi-tags-fill me-2"},null,-1),Z(" Gestão de Categorias ",-1)])],2),c("a",{href:"#",onClick:b[2]||(b[2]=ct(j=>L("seguranca"),["prevent"])),class:ge(["list-group-item list-group-item-action",{"active-feature":s.value==="seguranca"}])},[...b[16]||(b[16]=[c("i",{class:"bi bi-lock-fill me-2"},null,-1),Z(" Segurança e Senha ",-1)])],2)])]),c("div",Ff,[c("div",Lf,[s.value==="perfil"?(F(),U("div",Uf,[b[21]||(b[21]=c("h2",{class:"h4 fw-bold text-primary-dark mb-3"},"Meu Perfil",-1)),b[22]||(b[22]=c("p",{class:"text-muted"},"Gerencie seu nome, e-mail e outras informações de contato.",-1)),c("form",{onSubmit:ct(K,["prevent"])},[c("div",Hf,[c("div",Bf,[b[17]||(b[17]=c("label",{class:"form-label fw-medium"},"Nome Completo",-1)),he(c("input",{type:"text",class:"form-control","onUpdate:modelValue":b[3]||(b[3]=j=>d.value.name=j),required:""},null,512),[[ye,d.value.name]])]),c("div",qf,[b[18]||(b[18]=c("label",{class:"form-label fw-medium"},"E-mail",-1)),he(c("input",{type:"email",class:"form-control","onUpdate:modelValue":b[4]||(b[4]=j=>d.value.email=j),required:""},null,512),[[ye,d.value.email]])])]),c("div",Gf,[c("div",Kf,[b[19]||(b[19]=c("label",{class:"form-label fw-medium"},"Meta de Receita Mensal (R$)",-1)),he(c("input",{type:"number",class:"form-control","onUpdate:modelValue":b[5]||(b[5]=j=>d.value.profile.monthly_income_goal=j),step:"0.01",min:"0"},null,512),[[ye,d.value.profile.monthly_income_goal]])]),c("div",Wf,[b[20]||(b[20]=c("label",{class:"form-label fw-medium"},"Limite de Despesas Mensal (R$)",-1)),he(c("input",{type:"number",class:"form-control","onUpdate:modelValue":b[6]||(b[6]=j=>d.value.profile.monthly_expense_limit=j),step:"0.01",min:"0"},null,512),[[ye,d.value.profile.monthly_expense_limit]])])]),v.value?(F(),U("div",{key:0,class:ge(["alert",v.value.type==="success"?"alert-success":"alert-danger"])},Y(v.value.text),3)):ve("",!0),c("button",{class:"btn btn-primary-feature mt-2",disabled:o.value},[o.value?(F(),U("span",zf)):ve("",!0),Z(" "+Y(o.value?"Salvando...":"Salvar Alterações"),1)],8,Jf)],32)])):ve("",!0),s.value==="categorias"?(F(),U("div",Xf,[c("div",Qf,[b[24]||(b[24]=c("h2",{class:"h4 fw-bold text-primary-dark mb-0"},"Categorias Financeiras",-1)),c("button",{class:"btn btn-success-feature",onClick:b[7]||(b[7]=j=>l.value=!0)},[...b[23]||(b[23]=[c("i",{class:"bi bi-plus-circle me-2"},null,-1),Z(" Nova Categoria ",-1)])])]),b[30]||(b[30]=c("p",{class:"text-muted"},"Crie, edite ou remova categorias de receitas e despesas.",-1)),n.value?(F(),U("div",Yf,[...b[25]||(b[25]=[c("div",{class:"spinner-border text-primary-dark",role:"status"},null,-1),c("p",{class:"text-muted mt-2"},"Carregando categorias...",-1)])])):(F(),U("div",Zf,[c("div",ep,[b[27]||(b[27]=c("h5",{class:"fw-bold text-success mb-3"},"📈 Receitas",-1)),c("div",tp,[(F(!0),U(Ce,null,Gt(O.value,j=>(F(),U("div",{key:j.id,class:"list-group-item d-flex justify-content-between align-items-center"},[c("div",sp,[c("span",{class:"badge me-2",style:Wt({backgroundColor:j.color,width:"15px",height:"15px",display:"inline-block"})},null,4),Z(" "+Y(j.name),1)]),b[26]||(b[26]=c("span",{class:"badge bg-success"},"Receita",-1))]))),128))])]),c("div",np,[b[29]||(b[29]=c("h5",{class:"fw-bold text-danger mb-3"},"📉 Despesas",-1)),c("div",op,[(F(!0),U(Ce,null,Gt(I.value,j=>(F(),U("div",{key:j.id,class:"list-group-item d-flex justify-content-between align-items-center"},[c("div",rp,[c("span",{class:"badge me-2",style:Wt({backgroundColor:j.color,width:"15px",height:"15px",display:"inline-block"})},null,4),Z(" "+Y(j.name),1)]),b[28]||(b[28]=c("span",{class:"badge bg-danger"},"Despesa",-1))]))),128))])])])),x.value?(F(),U("div",{key:2,class:ge(["alert",x.value.type==="success"?"alert-success":"alert-danger"])},Y(x.value.text),3)):ve("",!0)])):ve("",!0),s.value==="seguranca"?(F(),U("div",ip,[b[35]||(b[35]=c("h2",{class:"h4 fw-bold text-primary-dark mb-3"},"Segurança da Conta",-1)),b[36]||(b[36]=c("p",{class:"text-muted"},"Altere sua senha para manter sua conta segura.",-1)),c("form",{onSubmit:ct(S,["prevent"])},[c("div",lp,[b[31]||(b[31]=c("label",{class:"form-label fw-medium"},"Senha Atual",-1)),he(c("input",{type:"password",class:"form-control","onUpdate:modelValue":b[8]||(b[8]=j=>p.value.currentPassword=j),required:""},null,512),[[ye,p.value.currentPassword]])]),c("div",ap,[b[32]||(b[32]=c("label",{class:"form-label fw-medium"},"Nova Senha",-1)),he(c("input",{type:"password",class:"form-control","onUpdate:modelValue":b[9]||(b[9]=j=>p.value.newPassword=j),required:"",minlength:"6"},null,512),[[ye,p.value.newPassword]]),b[33]||(b[33]=c("small",{class:"text-muted"},"Mínimo 6 caracteres",-1))]),c("div",cp,[b[34]||(b[34]=c("label",{class:"form-label fw-medium"},"Confirmar Nova Senha",-1)),he(c("input",{type:"password",class:"form-control","onUpdate:modelValue":b[10]||(b[10]=j=>p.value.confirmPassword=j),required:""},null,512),[[ye,p.value.confirmPassword]])]),E.value?(F(),U("div",{key:0,class:ge(["alert",E.value.type==="success"?"alert-success":"alert-danger"])},Y(E.value.text),3)):ve("",!0),c("button",{class:"btn btn-warning text-white mt-2",disabled:r.value},[r.value?(F(),U("span",dp)):ve("",!0),Z(" "+Y(r.value?"Alterando...":"Alterar Senha"),1)],8,up)],32)])):ve("",!0)])])])]),l.value?(F(),U("div",{key:0,class:ge(["modal fade",{"show d-block":l.value}]),tabindex:"-1"},[c("div",fp,[c("div",pp,[c("div",{class:"modal-header bg-primary-dark text-white"},[b[38]||(b[38]=c("h5",{class:"modal-title fw-bold"},"Nova Categoria",-1)),c("button",{type:"button",class:"btn-close btn-close-white",onClick:oe})]),c("div",mp,[c("form",{onSubmit:ct(D,["prevent"])},[c("div",hp,[b[39]||(b[39]=c("label",{class:"form-label fw-medium"},"Nome da Categoria",-1)),he(c("input",{type:"text",class:"form-control","onUpdate:modelValue":b[11]||(b[11]=j=>g.value.name=j),placeholder:"Ex: Investimentos, Lazer, Educação...",required:""},null,512),[[ye,g.value.name]])]),c("div",gp,[b[41]||(b[41]=c("label",{class:"form-label fw-medium"},"Tipo",-1)),he(c("select",{"onUpdate:modelValue":b[12]||(b[12]=j=>g.value.type=j),class:"form-select",required:""},[...b[40]||(b[40]=[c("option",{value:"income"},"Receita",-1),c("option",{value:"expense"},"Despesa",-1)])],512),[[$s,g.value.type]])]),c("div",vp,[b[43]||(b[43]=c("label",{class:"form-label fw-medium"},"Cor",-1)),c("div",bp,[he(c("input",{type:"color",class:"form-control form-control-color","onUpdate:modelValue":b[13]||(b[13]=j=>g.value.color=j),required:""},null,512),[[ye,g.value.color]]),b[42]||(b[42]=c("span",{class:"ms-2 small text-muted"},"Escolha uma cor para identificar",-1))])]),$.value?(F(),U("div",{key:0,class:ge(["alert",$.value.type==="success"?"alert-success":"alert-danger"])},Y($.value.text),3)):ve("",!0)],32)]),c("div",yp,[c("button",{type:"button",class:"btn btn-secondary",onClick:oe},"Cancelar"),c("button",{type:"button",class:"btn btn-primary-dark-feature fw-bold",onClick:D,disabled:i.value},[i.value?(F(),U("span",xp)):ve("",!0),Z(" "+Y(i.value?"Adicionando...":"Adicionar Categoria"),1)],8,_p)])])]),c("div",{class:"modal-backdrop fade show",onClick:oe})],2)):ve("",!0)]))}},Cp=Ge(wp,[["__scopeId","data-v-c3d65fed"]]),Sp={class:"sobre-nos-page bg-light min-vh-100"},Ep={class:"container-fluid py-5 max-w-7xl mx-auto px-4"},Ap={class:"row g-5 align-items-center"},Rp={class:"col-lg-6"},Tp={__name:"SobreNosView",setup(e){return(t,s)=>{const n=$t("router-link");return F(),U("div",Sp,[z(Es),c("div",Ep,[c("div",Ap,[c("div",Rp,[s[1]||(s[1]=c("h1",{class:"display-5 fw-bold text-primary-dark mb-4"},[Z(" Nossa Missão: "),c("span",{class:"text-success-feature"},"Empoderar"),Z(" Suas Finanças. ")],-1)),s[2]||(s[2]=c("p",{class:"lead text-muted"}," O CtrlCash nasceu da necessidade de simplificar a gestão financeira pessoal. Acreditamos que controlar suas finanças não deve ser um fardo, mas uma ferramenta para alcançar seus objetivos. ",-1)),s[3]||(s[3]=c("p",{class:"text-muted"}," Nosso sistema oferece uma visão clara e organizada de onde seu dinheiro está indo, permitindo que você tome decisões informadas. Não se trata apenas de registrar gastos, mas de planejar o futuro. ",-1)),z(n,{to:"/cadastro",class:"btn btn-lg btn-success-feature shadow-lg mt-4"},{default:Ee(()=>[...s[0]||(s[0]=[Z(" Comece a Controlar Sua Vida Financeira Hoje ",-1)])]),_:1})]),s[4]||(s[4]=sn('

Controle Financeiro Descomplicado

A plataforma ideal para quem busca clareza e inteligência nos gastos diários.

',1))])]),z(to)])}}},Op=Ge(Tp,[["__scopeId","data-v-ce95d114"]]),Pp={class:"ajuda-page bg-light min-vh-100"},Ip={__name:"AjudaView",setup(e){return(t,s)=>(F(),U("div",Pp,[z(Es),s[0]||(s[0]=sn('

Central de Ajuda e FAQ

Encontre respostas rápidas para suas dúvidas mais comuns ou envie seu feedback.

No seu Dashboard, clique em "Transações" na barra de navegação. Na View de Transações, use o botão "Nova Transação" (verde) para adicionar Receitas ou Despesas. Certifique-se de categorizar corretamente para as análises futuras.

Sim! Vá para a View "Configurações" e selecione a aba "Gestão de Categorias". Lá você pode criar, editar ou remover categorias personalizadas para se adequar ao seu estilo de vida financeiro.
',1)),z(to)]))}},Np=Ge(Ip,[["__scopeId","data-v-eacca1cc"]]),kp=Qc({history:Oc("/"),routes:[{path:"/",name:"home",component:_u},{path:"/dashboard",name:"dashboard",component:wd},{path:"/login",name:"login",component:kd},{path:"/cadastro",name:"cadastro",component:zd},{path:"/transacoes",name:"transacoes",component:kf},{path:"/configuracoes",name:"configuracoes",component:Cp},{path:"/about",name:"about",component:Op},{path:"/help",name:"help",component:Np}]}),yi=La(Ga);yi.use(kp);yi.mount("#app"); diff --git a/web/assets/index-q99ZrbEv.css b/web/assets/index-q99ZrbEv.css deleted file mode 100644 index c3a3d0e..0000000 --- a/web/assets/index-q99ZrbEv.css +++ /dev/null @@ -1 +0,0 @@ -.bg-especial[data-v-b6bce1a4]{background-color:#1a3b5e}.btn-success[data-v-b6bce1a4]{background-color:#2ecc71;border-color:#2ecc71}.btn-success[data-v-b6bce1a4]:hover{background-color:#26a95f;border-color:#26a95f}.text-primary[data-v-b6bce1a4]{color:#1a3b5e!important}.bg-dark-footer[data-v-7ea2c5b6]{background-color:#1a3b5e}.text-white-footer[data-v-7ea2c5b6]{color:#fff!important}.text-secondary-footer[data-v-7ea2c5b6]{color:#c0ccda!important;transition:color .2s}.text-success-footer[data-v-7ea2c5b6]{color:#2ecc71!important}.text-secondary-footer[data-v-7ea2c5b6]:hover{color:#fff!important}.text-success-footer[data-v-7ea2c5b6]:hover{color:#34d399!important}.border-secondary-footer[data-v-7ea2c5b6]{border-color:#ffffff1a!important}.main-no-gap[data-v-ab903d66]{margin-top:0;padding-top:0}.bg-especial[data-v-ab903d66]{background-color:#122942}.btn-success[data-v-ab903d66]{background-color:#2ecc71;border-color:#2ecc71}.btn-success[data-v-ab903d66]:hover{background-color:#26a95f;border-color:#26a95f}.text-secondary[data-v-ab903d66]{color:#d1d5db!important}.text-primary-dark[data-v-ab903d66]{color:#1a3b5e!important}.text-success-feature[data-v-ab903d66]{color:#2ecc71!important}.text-dark-feature[data-v-ab903d66]{color:#343a40!important}.text-secondary-feature[data-v-ab903d66]{color:#6c757d!important}.bg-primary-dark[data-v-cb189098]{background-color:#1a3b5e!important}.text-primary-dark[data-v-cb189098]{color:#1a3b5e!important}.text-success-feature[data-v-cb189098],.hover-success-feature[data-v-cb189098]:hover{color:#2ecc71!important}.navbar-brand[data-v-cb189098]{display:flex;align-items:center}.logo-align[data-v-cb189098]{vertical-align:middle}@media(max-width:767.98px){.navbar-collapse[data-v-cb189098]{padding-bottom:1rem}.btn-outline-light[data-v-cb189098]{margin-top:.5rem;border-color:#ffffff80;color:#fffc}.btn-outline-light[data-v-cb189098]:hover{background-color:#ffffff1a;color:#fff}}.position-relative .bg-danger[data-v-cb189098]{font-size:.6rem;min-width:18px;height:18px;display:flex;align-items:center;justify-content:center}.bg-primary-dark[data-v-d86dd8ef]{background-color:#1a3b5e!important}.text-primary-dark[data-v-d86dd8ef]{color:#1a3b5e!important}.bg-success-feature[data-v-d86dd8ef]{background-color:#2ecc71!important}.text-success-feature[data-v-d86dd8ef]{color:#2ecc71!important}.max-w-7xl[data-v-d86dd8ef]{max-width:80rem}.mx-auto[data-v-d86dd8ef]{margin-left:auto!important;margin-right:auto!important}.btn-outline-primary.active[data-v-d86dd8ef]{background-color:#1a3b5e;border-color:#1a3b5e;color:#fff}.transaction-info[data-v-d86dd8ef]{flex:1;text-align:left}.chart-container[data-v-d86dd8ef]{background-color:#fff;border:1px solid #e9ecef}.border-dashed[data-v-d86dd8ef]{border-style:dashed!important}.text-primary-dark[data-v-3bda6902]{color:#1a3b5e!important}.text-secondary-dark[data-v-3bda6902]{color:#6c757d!important}.login-container[data-v-3bda6902]{background-color:#f8f9fa}.login-card[data-v-3bda6902]{max-width:420px;width:100%}.btn-primary-feature[data-v-3bda6902]{background-color:#1a3b5e;border-color:#1a3b5e;color:#fff;transition:background-color .2s}.btn-primary-feature[data-v-3bda6902]:hover:not(:disabled){background-color:#29517b;border-color:#29517b}.btn-primary-feature[data-v-3bda6902]:disabled{opacity:.6}.form-control[data-v-3bda6902]:focus{border-color:#1a3b5e;box-shadow:0 0 0 .25rem #1a3b5e40}.input-group-text[data-v-3bda6902]{background-color:#e9ecef;border-right:none;color:#1a3b5e}.hover-link[data-v-3bda6902]:hover{text-decoration:underline!important}.text-primary-dark[data-v-483528ca]{color:#1a3b5e!important}.text-secondary-dark[data-v-483528ca]{color:#6c757d!important}.cadastro-container[data-v-483528ca]{background-color:#f8f9fa}.cadastro-card[data-v-483528ca]{max-width:450px;width:100%}.btn-primary-feature[data-v-483528ca]{background-color:#1a3b5e;border-color:#1a3b5e;color:#fff;transition:background-color .2s}.btn-primary-feature[data-v-483528ca]:hover:not(:disabled){background-color:#29517b;border-color:#29517b}.btn-primary-feature[data-v-483528ca]:disabled{opacity:.6}.form-control[data-v-483528ca]:focus{border-color:#1a3b5e;box-shadow:0 0 0 .25rem #1a3b5e40}.input-group-text[data-v-483528ca]{background-color:#e9ecef;border-right:none;color:#1a3b5e}.bg-primary-dark[data-v-ded21139]{background-color:#1a3b5e!important}.text-primary-dark[data-v-ded21139]{color:#1a3b5e!important}.bg-success-feature[data-v-ded21139]{background-color:#2ecc71!important}.text-success-feature[data-v-ded21139]{color:#2ecc71!important}.btn-outline-success-feature[data-v-ded21139]{--bs-btn-color: #2ECC71;--bs-btn-border-color: #2ECC71;--bs-btn-hover-bg: #2ECC71;--bs-btn-hover-border-color: #2ECC71;--bs-btn-active-bg: #2ECC71;--bs-btn-active-border-color: #2ECC71;--bs-btn-active-color: white}.btn-primary-dark-feature[data-v-ded21139]{background-color:#1a3b5e;color:#fff;border-color:#1a3b5e}.btn-primary-dark-feature[data-v-ded21139]:hover:not(:disabled){background-color:#122841;border-color:#122841;color:#fff}.btn-primary-dark-feature[data-v-ded21139]:disabled{opacity:.6;cursor:not-allowed}.max-w-7xl[data-v-ded21139]{max-width:80rem}.mx-auto[data-v-ded21139]{margin-left:auto!important;margin-right:auto!important}.modal-overlay[data-v-ded21139]{position:fixed;inset:0;background-color:#00000080;display:flex;justify-content:center;align-items:center;z-index:1000}.modal-container[data-v-ded21139]{width:100%;max-width:500px;margin:20px}.modal-content[data-v-ded21139]{background:#fff;border-radius:8px;box-shadow:0 10px 30px #0000004d;animation:modalAppear-ded21139 .3s ease-out}@keyframes modalAppear-ded21139{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}.modal-header[data-v-ded21139]{border-bottom:1px solid #dee2e6;padding:1rem 1.5rem}.modal-body[data-v-ded21139]{padding:1.5rem;max-height:70vh;overflow-y:auto}.modal-footer[data-v-ded21139]{border-top:1px solid #dee2e6;padding:1rem 1.5rem}.btn-group .btn.active[data-v-ded21139]{background-color:inherit;border-color:inherit;color:inherit}.btn-outline-success-feature.active[data-v-ded21139]{background-color:#2ecc71;color:#fff}.btn-outline-danger.active[data-v-ded21139]{background-color:#dc3545;color:#fff}.badge[data-v-ded21139]{font-size:.75em;padding:.35em .65em}.btn-outline-danger[data-v-ded21139]{border-color:#dc3545;color:#dc3545}.btn-outline-danger[data-v-ded21139]:hover{background-color:#dc3545;color:#fff}.bg-primary-dark[data-v-eaccba4a]{background-color:#1a3b5e!important}.text-primary-dark[data-v-eaccba4a]{color:#1a3b5e!important}.btn-primary-feature[data-v-eaccba4a]{background-color:#1a3b5e!important;border-color:#1a3b5e!important;color:#fff}.btn-primary-feature[data-v-eaccba4a]:disabled{opacity:.6;cursor:not-allowed}.btn-success-feature[data-v-eaccba4a]{background-color:#2ecc71!important;border-color:#2ecc71!important;color:#fff}.active-feature[data-v-eaccba4a]{background-color:#1a3b5e!important;color:#fff!important}.max-w-7xl[data-v-eaccba4a]{max-width:80rem}.mx-auto[data-v-eaccba4a]{margin-left:auto!important;margin-right:auto!important}.modal-backdrop[data-v-eaccba4a]{opacity:.5}.form-control[data-v-eaccba4a]:focus{border-color:#1a3b5e;box-shadow:0 0 0 .25rem #1a3b5e40}.list-group-item[data-v-eaccba4a]{border:1px solid #dee2e6;margin-bottom:5px}.form-control-color[data-v-eaccba4a]{width:50px;height:38px}.bg-primary-dark[data-v-ce95d114]{background-color:#1a3b5e!important}.text-primary-dark[data-v-ce95d114]{color:#1a3b5e!important}.text-success-feature[data-v-ce95d114]{color:#2ecc71!important}.btn-success-feature[data-v-ce95d114]{background-color:#2ecc71!important;border-color:#2ecc71!important;color:#fff}.max-w-7xl[data-v-ce95d114]{max-width:80rem}.mx-auto[data-v-ce95d114]{margin-left:auto!important;margin-right:auto!important}.bg-primary-dark[data-v-eacca1cc]{background-color:#1a3b5e!important}.text-primary-dark[data-v-eacca1cc]{color:#1a3b5e!important}.text-success-feature[data-v-eacca1cc]{color:#2ecc71!important}.btn-success-feature[data-v-eacca1cc]{background-color:#2ecc71!important;border-color:#2ecc71!important;color:#fff}.max-w-7xl[data-v-eacca1cc]{max-width:80rem}.mx-auto[data-v-eacca1cc]{margin-left:auto!important;margin-right:auto!important}.accordion-button[data-v-eacca1cc]:not(.collapsed){color:#fff!important;background-color:#1a3b5e!important;box-shadow:none}.accordion-button[data-v-eacca1cc]:focus{box-shadow:none;border-color:#1a3b5e} diff --git a/web/index.html b/web/index.html index feba70c..607d08f 100644 --- a/web/index.html +++ b/web/index.html @@ -7,8 +7,8 @@ CtrlCash - - + +