From 76e3053e500a4242f03a94fb2ebef4a7c6d02990 Mon Sep 17 00:00:00 2001 From: Theo Weijmer Date: Wed, 8 Oct 2025 19:48:48 +0200 Subject: [PATCH] Diversen --- .../Controllers/ServiceRequestController.php | 75 ++++++- backend/app/Mail/PickupConfirmation.php | 58 +++++ backend/app/Models/ServiceRequest.php | 6 +- ..._sent_status_to_service_requests_table.php | 74 +++++++ backend/database/seeders/SettingsSeeder.php | 12 ++ backend/public/assets/index-CTOGI7pY.js | 25 --- backend/public/assets/index-DAYhzhBJ.css | 1 + backend/public/assets/index-aYPxxDKl.js | 25 +++ backend/public/assets/index-jfsEyp3I.css | 1 - backend/public/index.html | 4 +- .../emails/pickup-confirmation.blade.php | 201 ++++++++++++++++++ backend/routes/api.php | 1 + frontend/src/views/Admin.vue | 140 +++++++++++- frontend/src/views/Pricelist.vue | 16 +- 14 files changed, 587 insertions(+), 52 deletions(-) create mode 100644 backend/app/Mail/PickupConfirmation.php create mode 100644 backend/database/migrations/2025_10_08_173736_add_mail_sent_status_to_service_requests_table.php delete mode 100644 backend/public/assets/index-CTOGI7pY.js create mode 100644 backend/public/assets/index-DAYhzhBJ.css create mode 100644 backend/public/assets/index-aYPxxDKl.js delete mode 100644 backend/public/assets/index-jfsEyp3I.css create mode 100644 backend/resources/views/emails/pickup-confirmation.blade.php diff --git a/backend/app/Http/Controllers/ServiceRequestController.php b/backend/app/Http/Controllers/ServiceRequestController.php index 1e5df50..be39ceb 100644 --- a/backend/app/Http/Controllers/ServiceRequestController.php +++ b/backend/app/Http/Controllers/ServiceRequestController.php @@ -6,6 +6,7 @@ use App\Models\ServiceRequest; use App\Models\Setting; use App\Models\Communication; use App\Mail\ServiceRequestNotification; +use App\Mail\PickupConfirmation; use Illuminate\Http\Request; use Illuminate\Http\JsonResponse; use Illuminate\Validation\ValidationException; @@ -115,11 +116,11 @@ class ServiceRequestController extends Controller $validated = $request->validate([ 'actual_repair_date' => 'nullable|date|after:today', 'actual_repair_time' => 'nullable|date_format:H:i', - 'status' => 'nullable|in:pending,confirmed,completed,cancelled', + 'status' => 'nullable|in:pending,confirmed,mail_sent,completed,cancelled', ], [ 'actual_repair_date.after' => 'Werkelijke reparatie datum moet in de toekomst liggen', 'actual_repair_time.date_format' => 'Werkelijke reparatie tijd moet een geldig tijdformaat hebben (HH:MM)', - 'status.in' => 'Status moet een van de volgende waarden hebben: in afwachting, bevestigd, voltooid, geannuleerd', + 'status.in' => 'Status moet een van de volgende waarden hebben: in afwachting, bevestigd, bevestigd mail verstuurd, voltooid, geannuleerd', ]); $serviceRequest->update($validated); @@ -252,6 +253,74 @@ class ServiceRequestController extends Controller } } + /** + * Send pickup confirmation email to customer + */ + public function sendPickupConfirmation(ServiceRequest $serviceRequest): JsonResponse + { + try { + if (empty($serviceRequest->email)) { + return response()->json([ + 'message' => 'Geen e-mailadres beschikbaar voor deze service aanvraag' + ], 400); + } + + if (empty($serviceRequest->actual_repair_date) || empty($serviceRequest->actual_repair_time)) { + return response()->json([ + 'message' => 'Werkelijke reparatie datum en tijd zijn vereist' + ], 400); + } + + // Get the custom message from settings + $customMessage = Setting::getValue('pickup_confirmation_email_text', 'Uw fiets is klaar en kan worden opgehaald.'); + + // Format the pickup date and time + $pickupDate = \Carbon\Carbon::parse($serviceRequest->actual_repair_date)->format('d-m-Y'); + $pickupTime = $serviceRequest->actual_repair_time; + + // Send email + Mail::to($serviceRequest->email)->send( + new PickupConfirmation( + $serviceRequest, + $customMessage, + $pickupDate, + $pickupTime + ) + ); + + // Update status to 'mail_sent' + $serviceRequest->update(['status' => 'mail_sent']); + + // Store communication record + $communication = Communication::create([ + 'service_request_id' => $serviceRequest->id, + 'type' => 'email', + 'message' => 'Ophaalbevestiging verzonden - Datum: ' . $pickupDate . ', Tijd: ' . $pickupTime, + 'direction' => 'admin_to_customer', + 'recipient' => $serviceRequest->email, + 'sent_at' => now(), + ]); + + Log::info('Ophaalbevestiging e-mail verzonden naar klant', [ + 'service_request_id' => $serviceRequest->id, + 'email' => $serviceRequest->email, + 'pickup_date' => $pickupDate, + 'pickup_time' => $pickupTime + ]); + + return response()->json([ + 'message' => 'Ophaalbevestiging succesvol verzonden', + 'communication' => $communication, + 'service_request' => $serviceRequest->fresh() + ]); + } catch (\Exception $e) { + return response()->json([ + 'message' => 'Ophaalbevestiging verzenden mislukt', + 'error' => $e->getMessage() + ], 500); + } + } + /** * Get communication history */ @@ -261,7 +330,7 @@ class ServiceRequestController extends Controller $communications = $serviceRequest->communications() ->orderBy('created_at', 'desc') ->get(); - + return response()->json($communications); } catch (\Exception $e) { return response()->json([ diff --git a/backend/app/Mail/PickupConfirmation.php b/backend/app/Mail/PickupConfirmation.php new file mode 100644 index 0000000..f4fac7f --- /dev/null +++ b/backend/app/Mail/PickupConfirmation.php @@ -0,0 +1,58 @@ +serviceRequest->name, + ); + } + + /** + * Get the message content definition. + */ + public function content(): Content + { + return new Content( + view: 'emails.pickup-confirmation', + ); + } + + /** + * Get the attachments for the message. + * + * @return array + */ + public function attachments(): array + { + return []; + } +} diff --git a/backend/app/Models/ServiceRequest.php b/backend/app/Models/ServiceRequest.php index e97a5f6..3999925 100644 --- a/backend/app/Models/ServiceRequest.php +++ b/backend/app/Models/ServiceRequest.php @@ -24,10 +24,8 @@ class ServiceRequest extends Model ]; protected $casts = [ - 'requested_date' => 'date', - 'requested_time' => 'datetime:H:i', - 'actual_repair_date' => 'date', - 'actual_repair_time' => 'datetime:H:i', + 'requested_date' => 'date:Y-m-d', + 'actual_repair_date' => 'date:Y-m-d', ]; public function communications() diff --git a/backend/database/migrations/2025_10_08_173736_add_mail_sent_status_to_service_requests_table.php b/backend/database/migrations/2025_10_08_173736_add_mail_sent_status_to_service_requests_table.php new file mode 100644 index 0000000..c93376d --- /dev/null +++ b/backend/database/migrations/2025_10_08_173736_add_mail_sent_status_to_service_requests_table.php @@ -0,0 +1,74 @@ +id(); + $table->string('name'); + $table->text('address'); + $table->string('place'); + $table->string('email')->nullable(); + $table->string('phone')->nullable(); + $table->text('repair_description'); + $table->date('requested_date'); + $table->time('requested_time'); + $table->date('actual_repair_date')->nullable(); + $table->time('actual_repair_time')->nullable(); + $table->enum('status', ['pending', 'confirmed', 'mail_sent', 'completed', 'cancelled'])->default('pending'); + $table->timestamps(); + }); + + // Copy data from old table to temp table + DB::statement('INSERT INTO service_requests_temp SELECT * FROM service_requests'); + + // Drop the old table + Schema::dropIfExists('service_requests'); + + // Rename temp table to original name + Schema::rename('service_requests_temp', 'service_requests'); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + // Recreate the table with original enum values + Schema::create('service_requests_temp', function (Blueprint $table) { + $table->id(); + $table->string('name'); + $table->text('address'); + $table->string('place'); + $table->string('email')->nullable(); + $table->string('phone')->nullable(); + $table->text('repair_description'); + $table->date('requested_date'); + $table->time('requested_time'); + $table->date('actual_repair_date')->nullable(); + $table->time('actual_repair_time')->nullable(); + $table->enum('status', ['pending', 'confirmed', 'completed', 'cancelled'])->default('pending'); + $table->timestamps(); + }); + + // Copy data, converting 'mail_sent' status to 'confirmed' + DB::statement("INSERT INTO service_requests_temp SELECT id, name, address, place, email, phone, repair_description, requested_date, requested_time, actual_repair_date, actual_repair_time, CASE WHEN status = 'mail_sent' THEN 'confirmed' ELSE status END, created_at, updated_at FROM service_requests"); + + // Drop the current table + Schema::dropIfExists('service_requests'); + + // Rename temp table to original name + Schema::rename('service_requests_temp', 'service_requests'); + } +}; diff --git a/backend/database/seeders/SettingsSeeder.php b/backend/database/seeders/SettingsSeeder.php index 3ab9fe2..be89364 100644 --- a/backend/database/seeders/SettingsSeeder.php +++ b/backend/database/seeders/SettingsSeeder.php @@ -38,6 +38,18 @@ class SettingsSeeder extends Seeder 'key' => 'working_hours', 'value' => 'Maandag-Vrijdag: 08:00 - 18:00, Zaterdag: 09:00 - 16:00', 'description' => 'Bedrijfsopeningstijden' + ], + [ + 'key' => 'pickup_confirmation_email_text', + 'value' => 'Beste klant, + +Uw fiets is klaar en kan worden opgehaald op het onderstaande tijdstip. + +Wij zien u graag tegemoet! + +Met vriendelijke groet, +Fiets Service Centrum', + 'description' => 'Standaard tekst voor ophaalbevestiging e-mail' ] ]; diff --git a/backend/public/assets/index-CTOGI7pY.js b/backend/public/assets/index-CTOGI7pY.js deleted file mode 100644 index 6a73c48..0000000 --- a/backend/public/assets/index-CTOGI7pY.js +++ /dev/null @@ -1,25 +0,0 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))n(o);new MutationObserver(o=>{for(const r of o)if(r.type==="childList")for(const i of r.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&n(i)}).observe(document,{childList:!0,subtree:!0});function s(o){const r={};return o.integrity&&(r.integrity=o.integrity),o.referrerPolicy&&(r.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?r.credentials="include":o.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function n(o){if(o.ep)return;o.ep=!0;const r=s(o);fetch(o.href,r)}})();/** -* @vue/shared v3.5.20 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**//*! #__NO_SIDE_EFFECTS__ */function Is(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const fe={},Nt=[],nt=()=>{},nr=()=>!1,Kn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ds=e=>e.startsWith("onUpdate:"),Me=Object.assign,js=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},Oi=Object.prototype.hasOwnProperty,le=(e,t)=>Oi.call(e,t),U=Array.isArray,Ht=e=>wn(e)==="[object Map]",Jt=e=>wn(e)==="[object Set]",so=e=>wn(e)==="[object Date]",$=e=>typeof e=="function",we=e=>typeof e=="string",st=e=>typeof e=="symbol",pe=e=>e!==null&&typeof e=="object",sr=e=>(pe(e)||$(e))&&$(e.then)&&$(e.catch),or=Object.prototype.toString,wn=e=>or.call(e),Mi=e=>wn(e).slice(8,-1),rr=e=>wn(e)==="[object Object]",Vs=e=>we(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,tn=Is(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Wn=e=>{const t=Object.create(null);return s=>t[s]||(t[s]=e(s))},Ii=/-(\w)/g,Ke=Wn(e=>e.replace(Ii,(t,s)=>s?s.toUpperCase():"")),Di=/\B([A-Z])/g,jt=Wn(e=>e.replace(Di,"-$1").toLowerCase()),Gn=Wn(e=>e.charAt(0).toUpperCase()+e.slice(1)),rs=Wn(e=>e?`on${Gn(e)}`:""),Ct=(e,t)=>!Object.is(e,t),An=(e,...t)=>{for(let s=0;s{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:n,value:s})},Dn=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let oo;const zn=()=>oo||(oo=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Fs(e){if(U(e)){const t={};for(let s=0;s{if(s){const n=s.split(Vi);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function Mt(e){let t="";if(we(e))t=e;else if(U(e))for(let s=0;sSn(s,t))}const ar=e=>!!(e&&e.__v_isRef===!0),F=e=>we(e)?e:e==null?"":U(e)||pe(e)&&(e.toString===or||!$(e.toString))?ar(e)?F(e.value):JSON.stringify(e,cr,2):String(e),cr=(e,t)=>ar(t)?cr(e,t.value):Ht(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[n,o],r)=>(s[is(n,r)+" =>"]=o,s),{})}:Jt(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>is(s))}:st(t)?is(t):pe(t)&&!U(t)&&!rr(t)?String(t):t,is=(e,t="")=>{var s;return st(e)?`Symbol(${(s=e.description)!=null?s:t})`:e};/** -* @vue/reactivity v3.5.20 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let Ae;class ur{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=Ae,!t&&Ae&&(this.index=(Ae.scopes||(Ae.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes)for(t=0,s=this.scopes.length;t0&&--this._on===0&&(Ae=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let s,n;for(s=0,n=this.effects.length;s0)return;if(sn){let t=sn;for(sn=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;nn;){let t=nn;for(nn=void 0;t;){const s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(n){e||(e=n)}t=s}}if(e)throw e}function gr(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function vr(e){let t,s=e.depsTail,n=s;for(;n;){const o=n.prevDep;n.version===-1?(n===s&&(s=o),Hs(n),Ui(n)):t=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=o}e.deps=t,e.depsTail=s}function _s(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(_r(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function _r(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===hn)||(e.globalVersion=hn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!_s(e))))return;e.flags|=2;const t=e.dep,s=he,n=Je;he=e,Je=!0;try{gr(e);const o=e.fn(e._value);(t.version===0||Ct(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{he=s,Je=n,vr(e),e.flags&=-3}}function Hs(e,t=!1){const{dep:s,prevSub:n,nextSub:o}=e;if(n&&(n.nextSub=o,e.prevSub=void 0),o&&(o.prevSub=n,e.nextSub=void 0),s.subs===e&&(s.subs=n,!n&&s.computed)){s.computed.flags&=-5;for(let r=s.computed.deps;r;r=r.nextDep)Hs(r,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function Ui(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let Je=!0;const br=[];function dt(){br.push(Je),Je=!1}function ht(){const e=br.pop();Je=e===void 0?!0:e}function ro(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=he;he=void 0;try{t()}finally{he=s}}}let hn=0;class Ki{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class qs{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!he||!Je||he===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==he)s=this.activeLink=new Ki(he,this),he.deps?(s.prevDep=he.depsTail,he.depsTail.nextDep=s,he.depsTail=s):he.deps=he.depsTail=s,yr(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const n=s.nextDep;n.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=n),s.prevDep=he.depsTail,s.nextDep=void 0,he.depsTail.nextDep=s,he.depsTail=s,he.deps===s&&(he.deps=n)}return s}trigger(t){this.version++,hn++,this.notify(t)}notify(t){Ls();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{Ns()}}}function yr(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let n=t.deps;n;n=n.nextDep)yr(n)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const jn=new WeakMap,It=Symbol(""),bs=Symbol(""),pn=Symbol("");function Te(e,t,s){if(Je&&he){let n=jn.get(e);n||jn.set(e,n=new Map);let o=n.get(s);o||(n.set(s,o=new qs),o.map=n,o.key=s),o.track()}}function ct(e,t,s,n,o,r){const i=jn.get(e);if(!i){hn++;return}const a=u=>{u&&u.trigger()};if(Ls(),t==="clear")i.forEach(a);else{const u=U(e),p=u&&Vs(s);if(u&&s==="length"){const l=Number(n);i.forEach((h,g)=>{(g==="length"||g===pn||!st(g)&&g>=l)&&a(h)})}else switch((s!==void 0||i.has(void 0))&&a(i.get(s)),p&&a(i.get(pn)),t){case"add":u?p&&a(i.get("length")):(a(i.get(It)),Ht(e)&&a(i.get(bs)));break;case"delete":u||(a(i.get(It)),Ht(e)&&a(i.get(bs)));break;case"set":Ht(e)&&a(i.get(It));break}}Ns()}function Wi(e,t){const s=jn.get(e);return s&&s.get(t)}function Vt(e){const t=se(e);return t===e?t:(Te(t,"iterate",pn),Ue(e)?t:t.map(ke))}function Jn(e){return Te(e=se(e),"iterate",pn),e}const Gi={__proto__:null,[Symbol.iterator](){return as(this,Symbol.iterator,ke)},concat(...e){return Vt(this).concat(...e.map(t=>U(t)?Vt(t):t))},entries(){return as(this,"entries",e=>(e[1]=ke(e[1]),e))},every(e,t){return rt(this,"every",e,t,void 0,arguments)},filter(e,t){return rt(this,"filter",e,t,s=>s.map(ke),arguments)},find(e,t){return rt(this,"find",e,t,ke,arguments)},findIndex(e,t){return rt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return rt(this,"findLast",e,t,ke,arguments)},findLastIndex(e,t){return rt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return rt(this,"forEach",e,t,void 0,arguments)},includes(...e){return cs(this,"includes",e)},indexOf(...e){return cs(this,"indexOf",e)},join(e){return Vt(this).join(e)},lastIndexOf(...e){return cs(this,"lastIndexOf",e)},map(e,t){return rt(this,"map",e,t,void 0,arguments)},pop(){return Zt(this,"pop")},push(...e){return Zt(this,"push",e)},reduce(e,...t){return io(this,"reduce",e,t)},reduceRight(e,...t){return io(this,"reduceRight",e,t)},shift(){return Zt(this,"shift")},some(e,t){return rt(this,"some",e,t,void 0,arguments)},splice(...e){return Zt(this,"splice",e)},toReversed(){return Vt(this).toReversed()},toSorted(e){return Vt(this).toSorted(e)},toSpliced(...e){return Vt(this).toSpliced(...e)},unshift(...e){return Zt(this,"unshift",e)},values(){return as(this,"values",ke)}};function as(e,t,s){const n=Jn(e),o=n[t]();return n!==e&&!Ue(e)&&(o._next=o.next,o.next=()=>{const r=o._next();return r.value&&(r.value=s(r.value)),r}),o}const zi=Array.prototype;function rt(e,t,s,n,o,r){const i=Jn(e),a=i!==e&&!Ue(e),u=i[t];if(u!==zi[t]){const h=u.apply(e,r);return a?ke(h):h}let p=s;i!==e&&(a?p=function(h,g){return s.call(this,ke(h),g,e)}:s.length>2&&(p=function(h,g){return s.call(this,h,g,e)}));const l=u.call(i,p,n);return a&&o?o(l):l}function io(e,t,s,n){const o=Jn(e);let r=s;return o!==e&&(Ue(e)?s.length>3&&(r=function(i,a,u){return s.call(this,i,a,u,e)}):r=function(i,a,u){return s.call(this,i,ke(a),u,e)}),o[t](r,...n)}function cs(e,t,s){const n=se(e);Te(n,"iterate",pn);const o=n[t](...s);return(o===-1||o===!1)&&Ws(s[0])?(s[0]=se(s[0]),n[t](...s)):o}function Zt(e,t,s=[]){dt(),Ls();const n=se(e)[t].apply(e,s);return Ns(),ht(),n}const Ji=Is("__proto__,__v_isRef,__isVue"),wr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(st));function Yi(e){st(e)||(e=String(e));const t=se(this);return Te(t,"has",e),t.hasOwnProperty(e)}class Sr{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,n){if(s==="__v_skip")return t.__v_skip;const o=this._isReadonly,r=this._isShallow;if(s==="__v_isReactive")return!o;if(s==="__v_isReadonly")return o;if(s==="__v_isShallow")return r;if(s==="__v_raw")return n===(o?r?rl:Er:r?xr:Cr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const i=U(t);if(!o){let u;if(i&&(u=Gi[s]))return u;if(s==="hasOwnProperty")return Yi}const a=Reflect.get(t,s,ye(t)?t:n);return(st(s)?wr.has(s):Ji(s))||(o||Te(t,"get",s),r)?a:ye(a)?i&&Vs(s)?a:a.value:pe(a)?o?Rr(a):kn(a):a}}class kr extends Sr{constructor(t=!1){super(!1,t)}set(t,s,n,o){let r=t[s];if(!this._isShallow){const u=Et(r);if(!Ue(n)&&!Et(n)&&(r=se(r),n=se(n)),!U(t)&&ye(r)&&!ye(n))return u||(r.value=n),!0}const i=U(t)&&Vs(s)?Number(s)e,En=e=>Reflect.getPrototypeOf(e);function el(e,t,s){return function(...n){const o=this.__v_raw,r=se(o),i=Ht(r),a=e==="entries"||e===Symbol.iterator&&i,u=e==="keys"&&i,p=o[e](...n),l=s?ys:t?Vn:ke;return!t&&Te(r,"iterate",u?bs:It),{next(){const{value:h,done:g}=p.next();return g?{value:h,done:g}:{value:a?[l(h[0]),l(h[1])]:l(h),done:g}},[Symbol.iterator](){return this}}}}function Pn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function tl(e,t){const s={get(o){const r=this.__v_raw,i=se(r),a=se(o);e||(Ct(o,a)&&Te(i,"get",o),Te(i,"get",a));const{has:u}=En(i),p=t?ys:e?Vn:ke;if(u.call(i,o))return p(r.get(o));if(u.call(i,a))return p(r.get(a));r!==i&&r.get(o)},get size(){const o=this.__v_raw;return!e&&Te(se(o),"iterate",It),o.size},has(o){const r=this.__v_raw,i=se(r),a=se(o);return e||(Ct(o,a)&&Te(i,"has",o),Te(i,"has",a)),o===a?r.has(o):r.has(o)||r.has(a)},forEach(o,r){const i=this,a=i.__v_raw,u=se(a),p=t?ys:e?Vn:ke;return!e&&Te(u,"iterate",It),a.forEach((l,h)=>o.call(r,p(l),p(h),i))}};return Me(s,e?{add:Pn("add"),set:Pn("set"),delete:Pn("delete"),clear:Pn("clear")}:{add(o){!t&&!Ue(o)&&!Et(o)&&(o=se(o));const r=se(this);return En(r).has.call(r,o)||(r.add(o),ct(r,"add",o,o)),this},set(o,r){!t&&!Ue(r)&&!Et(r)&&(r=se(r));const i=se(this),{has:a,get:u}=En(i);let p=a.call(i,o);p||(o=se(o),p=a.call(i,o));const l=u.call(i,o);return i.set(o,r),p?Ct(r,l)&&ct(i,"set",o,r):ct(i,"add",o,r),this},delete(o){const r=se(this),{has:i,get:a}=En(r);let u=i.call(r,o);u||(o=se(o),u=i.call(r,o)),a&&a.call(r,o);const p=r.delete(o);return u&&ct(r,"delete",o,void 0),p},clear(){const o=se(this),r=o.size!==0,i=o.clear();return r&&ct(o,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(o=>{s[o]=el(o,e,t)}),s}function Us(e,t){const s=tl(e,t);return(n,o,r)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?n:Reflect.get(le(s,o)&&o in n?s:n,o,r)}const nl={get:Us(!1,!1)},sl={get:Us(!1,!0)},ol={get:Us(!0,!1)};const Cr=new WeakMap,xr=new WeakMap,Er=new WeakMap,rl=new WeakMap;function il(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function ll(e){return e.__v_skip||!Object.isExtensible(e)?0:il(Mi(e))}function kn(e){return Et(e)?e:Ks(e,!1,Zi,nl,Cr)}function Pr(e){return Ks(e,!1,$i,sl,xr)}function Rr(e){return Ks(e,!0,Xi,ol,Er)}function Ks(e,t,s,n,o){if(!pe(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const r=ll(e);if(r===0)return e;const i=o.get(e);if(i)return i;const a=new Proxy(e,r===2?n:s);return o.set(e,a),a}function xt(e){return Et(e)?xt(e.__v_raw):!!(e&&e.__v_isReactive)}function Et(e){return!!(e&&e.__v_isReadonly)}function Ue(e){return!!(e&&e.__v_isShallow)}function Ws(e){return e?!!e.__v_raw:!1}function se(e){const t=e&&e.__v_raw;return t?se(t):e}function Gs(e){return!le(e,"__v_skip")&&Object.isExtensible(e)&&ir(e,"__v_skip",!0),e}const ke=e=>pe(e)?kn(e):e,Vn=e=>pe(e)?Rr(e):e;function ye(e){return e?e.__v_isRef===!0:!1}function Z(e){return Ar(e,!1)}function al(e){return Ar(e,!0)}function Ar(e,t){return ye(e)?e:new cl(e,t)}class cl{constructor(t,s){this.dep=new qs,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:se(t),this._value=s?t:ke(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){const s=this._rawValue,n=this.__v_isShallow||Ue(t)||Et(t);t=n?t:se(t),Ct(t,s)&&(this._rawValue=t,this._value=n?t:ke(t),this.dep.trigger())}}function qt(e){return ye(e)?e.value:e}const ul={get:(e,t,s)=>t==="__v_raw"?e:qt(Reflect.get(e,t,s)),set:(e,t,s,n)=>{const o=e[t];return ye(o)&&!ye(s)?(o.value=s,!0):Reflect.set(e,t,s,n)}};function Tr(e){return xt(e)?e:new Proxy(e,ul)}function fl(e){const t=U(e)?new Array(e.length):{};for(const s in e)t[s]=hl(e,s);return t}class dl{constructor(t,s,n){this._object=t,this._key=s,this._defaultValue=n,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Wi(se(this._object),this._key)}}function hl(e,t,s){const n=e[t];return ye(n)?n:new dl(e,t,s)}class pl{constructor(t,s,n){this.fn=t,this.setter=s,this._value=void 0,this.dep=new qs(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=hn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&he!==this)return mr(this,!0),!0}get value(){const t=this.dep.track();return _r(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function ml(e,t,s=!1){let n,o;return $(e)?n=e:(n=e.get,o=e.set),new pl(n,o,s)}const Rn={},Fn=new WeakMap;let Ot;function gl(e,t=!1,s=Ot){if(s){let n=Fn.get(s);n||Fn.set(s,n=[]),n.push(e)}}function vl(e,t,s=fe){const{immediate:n,deep:o,once:r,scheduler:i,augmentJob:a,call:u}=s,p=j=>o?j:Ue(j)||o===!1||o===0?ut(j,1):ut(j);let l,h,g,v,P=!1,O=!1;if(ye(e)?(h=()=>e.value,P=Ue(e)):xt(e)?(h=()=>p(e),P=!0):U(e)?(O=!0,P=e.some(j=>xt(j)||Ue(j)),h=()=>e.map(j=>{if(ye(j))return j.value;if(xt(j))return p(j);if($(j))return u?u(j,2):j()})):$(e)?t?h=u?()=>u(e,2):e:h=()=>{if(g){dt();try{g()}finally{ht()}}const j=Ot;Ot=l;try{return u?u(e,3,[v]):e(v)}finally{Ot=j}}:h=nt,t&&o){const j=h,x=o===!0?1/0:o;h=()=>ut(j(),x)}const G=dr(),R=()=>{l.stop(),G&&G.active&&js(G.effects,l)};if(r&&t){const j=t;t=(...x)=>{j(...x),R()}}let I=O?new Array(e.length).fill(Rn):Rn;const V=j=>{if(!(!(l.flags&1)||!l.dirty&&!j))if(t){const x=l.run();if(o||P||(O?x.some((ne,z)=>Ct(ne,I[z])):Ct(x,I))){g&&g();const ne=Ot;Ot=l;try{const z=[x,I===Rn?void 0:O&&I[0]===Rn?[]:I,v];I=x,u?u(t,3,z):t(...z)}finally{Ot=ne}}}else l.run()};return a&&a(V),l=new hr(h),l.scheduler=i?()=>i(V,!1):V,v=j=>gl(j,!1,l),g=l.onStop=()=>{const j=Fn.get(l);if(j){if(u)u(j,4);else for(const x of j)x();Fn.delete(l)}},t?n?V(!0):I=l.run():i?i(V.bind(null,!0),!0):l.run(),R.pause=l.pause.bind(l),R.resume=l.resume.bind(l),R.stop=R,R}function ut(e,t=1/0,s){if(t<=0||!pe(e)||e.__v_skip||(s=s||new Set,s.has(e)))return e;if(s.add(e),t--,ye(e))ut(e.value,t,s);else if(U(e))for(let n=0;n{ut(n,t,s)});else if(rr(e)){for(const n in e)ut(e[n],t,s);for(const n of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,n)&&ut(e[n],t,s)}return e}/** -* @vue/runtime-core v3.5.20 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function Cn(e,t,s,n){try{return n?e(...n):e()}catch(o){Yn(o,t,s)}}function ot(e,t,s,n){if($(e)){const o=Cn(e,t,s,n);return o&&sr(o)&&o.catch(r=>{Yn(r,t,s)}),o}if(U(e)){const o=[];for(let r=0;r>>1,o=je[n],r=mn(o);r=mn(s)?je.push(e):je.splice(bl(t),0,e),e.flags|=1,Mr()}}function Mr(){Bn||(Bn=Or.then(Dr))}function yl(e){U(e)?Ut.push(...e):bt&&e.id===-1?bt.splice(Bt+1,0,e):e.flags&1||(Ut.push(e),e.flags|=1),Mr()}function lo(e,t,s=$e+1){for(;smn(s)-mn(n));if(Ut.length=0,bt){bt.push(...t);return}for(bt=t,Bt=0;Bte.id==null?e.flags&2?-1:1/0:e.id;function Dr(e){try{for($e=0;$e{n._d&&_o(-1);const r=Ln(t);let i;try{i=e(...o)}finally{Ln(r),n._d&&_o(1)}return i};return n._n=!0,n._c=!0,n._d=!0,n}function ve(e,t){if(Le===null)return e;const s=es(Le),n=e.dirs||(e.dirs=[]);for(let o=0;oe.__isTeleport,kl=Symbol("_leaveCb");function Js(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Js(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}/*! #__NO_SIDE_EFFECTS__ */function Vr(e,t){return $(e)?Me({name:e.name},t,{setup:e}):e}function Fr(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function on(e,t,s,n,o=!1){if(U(e)){e.forEach((P,O)=>on(P,t&&(U(t)?t[O]:t),s,n,o));return}if(rn(n)&&!o){n.shapeFlag&512&&n.type.__asyncResolved&&n.component.subTree.component&&on(e,t,s,n.component.subTree);return}const r=n.shapeFlag&4?es(n.component):n.el,i=o?null:r,{i:a,r:u}=e,p=t&&t.r,l=a.refs===fe?a.refs={}:a.refs,h=a.setupState,g=se(h),v=h===fe?nr:P=>le(g,P);if(p!=null&&p!==u){if(we(p))l[p]=null,v(p)&&(h[p]=null);else if(ye(p)){p.value=null;const P=t;P.k&&(l[P.k]=null)}}if($(u))Cn(u,a,12,[i,l]);else{const P=we(u),O=ye(u);if(P||O){const G=()=>{if(e.f){const R=P?v(u)?h[u]:l[u]:u.value;if(o)U(R)&&js(R,r);else if(U(R))R.includes(r)||R.push(r);else if(P)l[u]=[r],v(u)&&(h[u]=l[u]);else{const I=[r];u.value=I,e.k&&(l[e.k]=I)}}else P?(l[u]=i,v(u)&&(h[u]=i)):O&&(u.value=i,e.k&&(l[e.k]=i))};i?(G.id=-1,Be(G,s)):G()}}}zn().requestIdleCallback;zn().cancelIdleCallback;const rn=e=>!!e.type.__asyncLoader,Br=e=>e.type.__isKeepAlive;function Cl(e,t){Lr(e,"a",t)}function xl(e,t){Lr(e,"da",t)}function Lr(e,t,s=Oe){const n=e.__wdc||(e.__wdc=()=>{let o=s;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(Zn(t,n,s),s){let o=s.parent;for(;o&&o.parent;)Br(o.parent.vnode)&&El(n,t,s,o),o=o.parent}}function El(e,t,s,n){const o=Zn(t,e,n,!0);Nr(()=>{js(n[t],o)},s)}function Zn(e,t,s=Oe,n=!1){if(s){const o=s[e]||(s[e]=[]),r=t.__weh||(t.__weh=(...i)=>{dt();const a=xn(s),u=ot(t,s,e,i);return a(),ht(),u});return n?o.unshift(r):o.push(r),r}}const pt=e=>(t,s=Oe)=>{(!vn||e==="sp")&&Zn(e,(...n)=>t(...n),s)},Pl=pt("bm"),Yt=pt("m"),Rl=pt("bu"),Al=pt("u"),Tl=pt("bum"),Nr=pt("um"),Ol=pt("sp"),Ml=pt("rtg"),Il=pt("rtc");function Dl(e,t=Oe){Zn("ec",e,t)}const jl="components";function Nn(e,t){return Fl(jl,e,!0,t)||e}const Vl=Symbol.for("v-ndc");function Fl(e,t,s=!0,n=!1){const o=Le||Oe;if(o){const r=o.type;{const a=Ca(r,!1);if(a&&(a===t||a===Ke(t)||a===Gn(Ke(t))))return r}const i=ao(o[e]||r[e],t)||ao(o.appContext[e],t);return!i&&n?r:i}}function ao(e,t){return e&&(e[t]||e[Ke(t)]||e[Gn(Ke(t))])}function St(e,t,s,n){let o;const r=s,i=U(e);if(i||we(e)){const a=i&&xt(e);let u=!1,p=!1;a&&(u=!Ue(e),p=Et(e),e=Jn(e)),o=new Array(e.length);for(let l=0,h=e.length;lt(a,u,void 0,r));else{const a=Object.keys(e);o=new Array(a.length);for(let u=0,p=a.length;ue?li(e)?es(e):ws(e.parent):null,ln=Me(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>ws(e.parent),$root:e=>ws(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>qr(e),$forceUpdate:e=>e.f||(e.f=()=>{zs(e.update)}),$nextTick:e=>e.n||(e.n=Qn.bind(e.proxy)),$watch:e=>ra.bind(e)}),us=(e,t)=>e!==fe&&!e.__isScriptSetup&&le(e,t),Bl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:n,data:o,props:r,accessCache:i,type:a,appContext:u}=e;let p;if(t[0]!=="$"){const v=i[t];if(v!==void 0)switch(v){case 1:return n[t];case 2:return o[t];case 4:return s[t];case 3:return r[t]}else{if(us(n,t))return i[t]=1,n[t];if(o!==fe&&le(o,t))return i[t]=2,o[t];if((p=e.propsOptions[0])&&le(p,t))return i[t]=3,r[t];if(s!==fe&&le(s,t))return i[t]=4,s[t];Ss&&(i[t]=0)}}const l=ln[t];let h,g;if(l)return t==="$attrs"&&Te(e.attrs,"get",""),l(e);if((h=a.__cssModules)&&(h=h[t]))return h;if(s!==fe&&le(s,t))return i[t]=4,s[t];if(g=u.config.globalProperties,le(g,t))return g[t]},set({_:e},t,s){const{data:n,setupState:o,ctx:r}=e;return us(o,t)?(o[t]=s,!0):n!==fe&&le(n,t)?(n[t]=s,!0):le(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(r[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:n,appContext:o,propsOptions:r,type:i}},a){let u,p;return!!(s[a]||e!==fe&&a[0]!=="$"&&le(e,a)||us(t,a)||(u=r[0])&&le(u,a)||le(n,a)||le(ln,a)||le(o.config.globalProperties,a)||(p=i.__cssModules)&&p[a])},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:le(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function co(e){return U(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let Ss=!0;function Ll(e){const t=qr(e),s=e.proxy,n=e.ctx;Ss=!1,t.beforeCreate&&uo(t.beforeCreate,e,"bc");const{data:o,computed:r,methods:i,watch:a,provide:u,inject:p,created:l,beforeMount:h,mounted:g,beforeUpdate:v,updated:P,activated:O,deactivated:G,beforeDestroy:R,beforeUnmount:I,destroyed:V,unmounted:j,render:x,renderTracked:ne,renderTriggered:z,errorCaptured:Q,serverPrefetch:Y,expose:oe,inheritAttrs:me,components:ae,directives:ge,filters:We}=t;if(p&&Nl(p,n,null),i)for(const K in i){const te=i[K];$(te)&&(n[K]=te.bind(s))}if(o){const K=o.call(s,s);pe(K)&&(e.data=kn(K))}if(Ss=!0,r)for(const K in r){const te=r[K],ze=$(te)?te.bind(s,s):$(te.get)?te.get.bind(s,s):nt,He=!$(te)&&$(te.set)?te.set.bind(s):nt,qe=xe({get:ze,set:He});Object.defineProperty(n,K,{enumerable:!0,configurable:!0,get:()=>qe.value,set:Ee=>qe.value=Ee})}if(a)for(const K in a)Hr(a[K],n,s,K);if(u){const K=$(u)?u.call(s):u;Reflect.ownKeys(K).forEach(te=>{Tn(te,K[te])})}l&&uo(l,e,"c");function de(K,te){U(te)?te.forEach(ze=>K(ze.bind(s))):te&&K(te.bind(s))}if(de(Pl,h),de(Yt,g),de(Rl,v),de(Al,P),de(Cl,O),de(xl,G),de(Dl,Q),de(Il,ne),de(Ml,z),de(Tl,I),de(Nr,j),de(Ol,Y),U(oe))if(oe.length){const K=e.exposed||(e.exposed={});oe.forEach(te=>{Object.defineProperty(K,te,{get:()=>s[te],set:ze=>s[te]=ze,enumerable:!0})})}else e.exposed||(e.exposed={});x&&e.render===nt&&(e.render=x),me!=null&&(e.inheritAttrs=me),ae&&(e.components=ae),ge&&(e.directives=ge),Y&&Fr(e)}function Nl(e,t,s=nt){U(e)&&(e=ks(e));for(const n in e){const o=e[n];let r;pe(o)?"default"in o?r=Ye(o.from||n,o.default,!0):r=Ye(o.from||n):r=Ye(o),ye(r)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>r.value,set:i=>r.value=i}):t[n]=r}}function uo(e,t,s){ot(U(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,s)}function Hr(e,t,s,n){let o=n.includes(".")?ti(s,n):()=>s[n];if(we(e)){const r=t[e];$(r)&&an(o,r)}else if($(e))an(o,e.bind(s));else if(pe(e))if(U(e))e.forEach(r=>Hr(r,t,s,n));else{const r=$(e.handler)?e.handler.bind(s):t[e.handler];$(r)&&an(o,r,e)}}function qr(e){const t=e.type,{mixins:s,extends:n}=t,{mixins:o,optionsCache:r,config:{optionMergeStrategies:i}}=e.appContext,a=r.get(t);let u;return a?u=a:!o.length&&!s&&!n?u=t:(u={},o.length&&o.forEach(p=>Hn(u,p,i,!0)),Hn(u,t,i)),pe(t)&&r.set(t,u),u}function Hn(e,t,s,n=!1){const{mixins:o,extends:r}=t;r&&Hn(e,r,s,!0),o&&o.forEach(i=>Hn(e,i,s,!0));for(const i in t)if(!(n&&i==="expose")){const a=Hl[i]||s&&s[i];e[i]=a?a(e[i],t[i]):t[i]}return e}const Hl={data:fo,props:ho,emits:ho,methods:en,computed:en,beforeCreate:De,created:De,beforeMount:De,mounted:De,beforeUpdate:De,updated:De,beforeDestroy:De,beforeUnmount:De,destroyed:De,unmounted:De,activated:De,deactivated:De,errorCaptured:De,serverPrefetch:De,components:en,directives:en,watch:Ul,provide:fo,inject:ql};function fo(e,t){return t?e?function(){return Me($(e)?e.call(this,this):e,$(t)?t.call(this,this):t)}:t:e}function ql(e,t){return en(ks(e),ks(t))}function ks(e){if(U(e)){const t={};for(let s=0;s1)return s&&$(t)?t.call(n&&n.proxy):t}}function Gl(){return!!(ii()||Dt)}const Kr={},Wr=()=>Object.create(Kr),Gr=e=>Object.getPrototypeOf(e)===Kr;function zl(e,t,s,n=!1){const o={},r=Wr();e.propsDefaults=Object.create(null),zr(e,t,o,r);for(const i in e.propsOptions[0])i in o||(o[i]=void 0);s?e.props=n?o:Pr(o):e.type.props?e.props=o:e.props=r,e.attrs=r}function Jl(e,t,s,n){const{props:o,attrs:r,vnode:{patchFlag:i}}=e,a=se(o),[u]=e.propsOptions;let p=!1;if((n||i>0)&&!(i&16)){if(i&8){const l=e.vnode.dynamicProps;for(let h=0;h{u=!0;const[g,v]=Jr(h,t,!0);Me(i,g),v&&a.push(...v)};!s&&t.mixins.length&&t.mixins.forEach(l),e.extends&&l(e.extends),e.mixins&&e.mixins.forEach(l)}if(!r&&!u)return pe(e)&&n.set(e,Nt),Nt;if(U(r))for(let l=0;le==="_"||e==="_ctx"||e==="$stable",Qs=e=>U(e)?e.map(et):[et(e)],Ql=(e,t,s)=>{if(t._n)return t;const n=tt((...o)=>Qs(t(...o)),s);return n._c=!1,n},Yr=(e,t,s)=>{const n=e._ctx;for(const o in e){if(Ys(o))continue;const r=e[o];if($(r))t[o]=Ql(o,r,n);else if(r!=null){const i=Qs(r);t[o]=()=>i}}},Qr=(e,t)=>{const s=Qs(t);e.slots.default=()=>s},Zr=(e,t,s)=>{for(const n in t)(s||!Ys(n))&&(e[n]=t[n])},Zl=(e,t,s)=>{const n=e.slots=Wr();if(e.vnode.shapeFlag&32){const o=t._;o?(Zr(n,t,s),s&&ir(n,"_",o,!0)):Yr(t,n)}else t&&Qr(e,t)},Xl=(e,t,s)=>{const{vnode:n,slots:o}=e;let r=!0,i=fe;if(n.shapeFlag&32){const a=t._;a?s&&a===1?r=!1:Zr(o,t,s):(r=!t.$stable,Yr(t,o)),i=t}else t&&(Qr(e,t),i={default:1});if(r)for(const a in o)!Ys(a)&&i[a]==null&&delete o[a]},Be=da;function $l(e){return ea(e)}function ea(e,t){const s=zn();s.__VUE__=!0;const{insert:n,remove:o,patchProp:r,createElement:i,createText:a,createComment:u,setText:p,setElementText:l,parentNode:h,nextSibling:g,setScopeId:v=nt,insertStaticContent:P}=e,O=(f,d,m,w=null,S=null,b=null,T=void 0,E=null,C=!!d.dynamicChildren)=>{if(f===d)return;f&&!Xt(f,d)&&(w=y(f),Ee(f,S,b,!0),f=null),d.patchFlag===-2&&(C=!1,d.dynamicChildren=null);const{type:k,ref:H,shapeFlag:M}=d;switch(k){case $n:G(f,d,m,w);break;case Pt:R(f,d,m,w);break;case On:f==null&&I(d,m,w,T);break;case Ce:ae(f,d,m,w,S,b,T,E,C);break;default:M&1?x(f,d,m,w,S,b,T,E,C):M&6?ge(f,d,m,w,S,b,T,E,C):(M&64||M&128)&&k.process(f,d,m,w,S,b,T,E,C,B)}H!=null&&S?on(H,f&&f.ref,b,d||f,!d):H==null&&f&&f.ref!=null&&on(f.ref,null,b,f,!0)},G=(f,d,m,w)=>{if(f==null)n(d.el=a(d.children),m,w);else{const S=d.el=f.el;d.children!==f.children&&p(S,d.children)}},R=(f,d,m,w)=>{f==null?n(d.el=u(d.children||""),m,w):d.el=f.el},I=(f,d,m,w)=>{[f.el,f.anchor]=P(f.children,d,m,w,f.el,f.anchor)},V=({el:f,anchor:d},m,w)=>{let S;for(;f&&f!==d;)S=g(f),n(f,m,w),f=S;n(d,m,w)},j=({el:f,anchor:d})=>{let m;for(;f&&f!==d;)m=g(f),o(f),f=m;o(d)},x=(f,d,m,w,S,b,T,E,C)=>{d.type==="svg"?T="svg":d.type==="math"&&(T="mathml"),f==null?ne(d,m,w,S,b,T,E,C):Y(f,d,S,b,T,E,C)},ne=(f,d,m,w,S,b,T,E)=>{let C,k;const{props:H,shapeFlag:M,transition:N,dirs:J}=f;if(C=f.el=i(f.type,b,H&&H.is,H),M&8?l(C,f.children):M&16&&Q(f.children,C,null,w,S,fs(f,b),T,E),J&&At(f,null,w,"created"),z(C,f,f.scopeId,T,w),H){for(const ue in H)ue!=="value"&&!tn(ue)&&r(C,ue,null,H[ue],b,w);"value"in H&&r(C,"value",null,H.value,b),(k=H.onVnodeBeforeMount)&&Xe(k,w,f)}J&&At(f,null,w,"beforeMount");const ee=ta(S,N);ee&&N.beforeEnter(C),n(C,d,m),((k=H&&H.onVnodeMounted)||ee||J)&&Be(()=>{k&&Xe(k,w,f),ee&&N.enter(C),J&&At(f,null,w,"mounted")},S)},z=(f,d,m,w,S)=>{if(m&&v(f,m),w)for(let b=0;b{for(let k=C;k{const E=d.el=f.el;let{patchFlag:C,dynamicChildren:k,dirs:H}=d;C|=f.patchFlag&16;const M=f.props||fe,N=d.props||fe;let J;if(m&&Tt(m,!1),(J=N.onVnodeBeforeUpdate)&&Xe(J,m,d,f),H&&At(d,f,m,"beforeUpdate"),m&&Tt(m,!0),(M.innerHTML&&N.innerHTML==null||M.textContent&&N.textContent==null)&&l(E,""),k?oe(f.dynamicChildren,k,E,m,w,fs(d,S),b):T||te(f,d,E,null,m,w,fs(d,S),b,!1),C>0){if(C&16)me(E,M,N,m,S);else if(C&2&&M.class!==N.class&&r(E,"class",null,N.class,S),C&4&&r(E,"style",M.style,N.style,S),C&8){const ee=d.dynamicProps;for(let ue=0;ue{J&&Xe(J,m,d,f),H&&At(d,f,m,"updated")},w)},oe=(f,d,m,w,S,b,T)=>{for(let E=0;E{if(d!==m){if(d!==fe)for(const b in d)!tn(b)&&!(b in m)&&r(f,b,d[b],null,S,w);for(const b in m){if(tn(b))continue;const T=m[b],E=d[b];T!==E&&b!=="value"&&r(f,b,E,T,S,w)}"value"in m&&r(f,"value",d.value,m.value,S)}},ae=(f,d,m,w,S,b,T,E,C)=>{const k=d.el=f?f.el:a(""),H=d.anchor=f?f.anchor:a("");let{patchFlag:M,dynamicChildren:N,slotScopeIds:J}=d;J&&(E=E?E.concat(J):J),f==null?(n(k,m,w),n(H,m,w),Q(d.children||[],m,H,S,b,T,E,C)):M>0&&M&64&&N&&f.dynamicChildren?(oe(f.dynamicChildren,N,m,S,b,T,E),(d.key!=null||S&&d===S.subTree)&&Xr(f,d,!0)):te(f,d,m,H,S,b,T,E,C)},ge=(f,d,m,w,S,b,T,E,C)=>{d.slotScopeIds=E,f==null?d.shapeFlag&512?S.ctx.activate(d,m,w,T,C):We(d,m,w,S,b,T,C):Ge(f,d,C)},We=(f,d,m,w,S,b,T)=>{const E=f.component=ba(f,w,S);if(Br(f)&&(E.ctx.renderer=B),ya(E,!1,T),E.asyncDep){if(S&&S.registerDep(E,de,T),!f.el){const C=E.subTree=be(Pt);R(null,C,d,m),f.placeholder=C.el}}else de(E,f,d,m,S,b,T)},Ge=(f,d,m)=>{const w=d.component=f.component;if(ua(f,d,m))if(w.asyncDep&&!w.asyncResolved){K(w,d,m);return}else w.next=d,w.update();else d.el=f.el,w.vnode=d},de=(f,d,m,w,S,b,T)=>{const E=()=>{if(f.isMounted){let{next:M,bu:N,u:J,parent:ee,vnode:ue}=f;{const X=$r(f);if(X){M&&(M.el=ue.el,K(f,M,T)),X.asyncDep.then(()=>{f.isUnmounted||E()});return}}let re=M,Pe;Tt(f,!1),M?(M.el=ue.el,K(f,M,T)):M=ue,N&&An(N),(Pe=M.props&&M.props.onVnodeBeforeUpdate)&&Xe(Pe,ee,M,ue),Tt(f,!0);const _=go(f),L=f.subTree;f.subTree=_,O(L,_,h(L.el),y(L),f,S,b),M.el=_.el,re===null&&fa(f,_.el),J&&Be(J,S),(Pe=M.props&&M.props.onVnodeUpdated)&&Be(()=>Xe(Pe,ee,M,ue),S)}else{let M;const{el:N,props:J}=d,{bm:ee,m:ue,parent:re,root:Pe,type:_}=f,L=rn(d);Tt(f,!1),ee&&An(ee),!L&&(M=J&&J.onVnodeBeforeMount)&&Xe(M,re,d),Tt(f,!0);{Pe.ce&&Pe.ce._def.shadowRoot!==!1&&Pe.ce._injectChildStyle(_);const X=f.subTree=go(f);O(null,X,m,w,f,S,b),d.el=X.el}if(ue&&Be(ue,S),!L&&(M=J&&J.onVnodeMounted)){const X=d;Be(()=>Xe(M,re,X),S)}(d.shapeFlag&256||re&&rn(re.vnode)&&re.vnode.shapeFlag&256)&&f.a&&Be(f.a,S),f.isMounted=!0,d=m=w=null}};f.scope.on();const C=f.effect=new hr(E);f.scope.off();const k=f.update=C.run.bind(C),H=f.job=C.runIfDirty.bind(C);H.i=f,H.id=f.uid,C.scheduler=()=>zs(H),Tt(f,!0),k()},K=(f,d,m)=>{d.component=f;const w=f.vnode.props;f.vnode=d,f.next=null,Jl(f,d.props,w,m),Xl(f,d.children,m),dt(),lo(f),ht()},te=(f,d,m,w,S,b,T,E,C=!1)=>{const k=f&&f.children,H=f?f.shapeFlag:0,M=d.children,{patchFlag:N,shapeFlag:J}=d;if(N>0){if(N&128){He(k,M,m,w,S,b,T,E,C);return}else if(N&256){ze(k,M,m,w,S,b,T,E,C);return}}J&8?(H&16&&Ie(k,S,b),M!==k&&l(m,M)):H&16?J&16?He(k,M,m,w,S,b,T,E,C):Ie(k,S,b,!0):(H&8&&l(m,""),J&16&&Q(M,m,w,S,b,T,E,C))},ze=(f,d,m,w,S,b,T,E,C)=>{f=f||Nt,d=d||Nt;const k=f.length,H=d.length,M=Math.min(k,H);let N;for(N=0;NH?Ie(f,S,b,!0,!1,M):Q(d,m,w,S,b,T,E,C,M)},He=(f,d,m,w,S,b,T,E,C)=>{let k=0;const H=d.length;let M=f.length-1,N=H-1;for(;k<=M&&k<=N;){const J=f[k],ee=d[k]=C?yt(d[k]):et(d[k]);if(Xt(J,ee))O(J,ee,m,null,S,b,T,E,C);else break;k++}for(;k<=M&&k<=N;){const J=f[M],ee=d[N]=C?yt(d[N]):et(d[N]);if(Xt(J,ee))O(J,ee,m,null,S,b,T,E,C);else break;M--,N--}if(k>M){if(k<=N){const J=N+1,ee=JN)for(;k<=M;)Ee(f[k],S,b,!0),k++;else{const J=k,ee=k,ue=new Map;for(k=ee;k<=N;k++){const Fe=d[k]=C?yt(d[k]):et(d[k]);Fe.key!=null&&ue.set(Fe.key,k)}let re,Pe=0;const _=N-ee+1;let L=!1,X=0;const Ve=new Array(_);for(k=0;k<_;k++)Ve[k]=0;for(k=J;k<=M;k++){const Fe=f[k];if(Pe>=_){Ee(Fe,S,b,!0);continue}let Ze;if(Fe.key!=null)Ze=ue.get(Fe.key);else for(re=ee;re<=N;re++)if(Ve[re-ee]===0&&Xt(Fe,d[re])){Ze=re;break}Ze===void 0?Ee(Fe,S,b,!0):(Ve[Ze-ee]=k+1,Ze>=X?X=Ze:L=!0,O(Fe,d[Ze],m,null,S,b,T,E,C),Pe++)}const eo=L?na(Ve):Nt;for(re=eo.length-1,k=_-1;k>=0;k--){const Fe=ee+k,Ze=d[Fe],to=d[Fe+1],no=Fe+1{const{el:b,type:T,transition:E,children:C,shapeFlag:k}=f;if(k&6){qe(f.component.subTree,d,m,w);return}if(k&128){f.suspense.move(d,m,w);return}if(k&64){T.move(f,d,m,B);return}if(T===Ce){n(b,d,m);for(let M=0;ME.enter(b),S);else{const{leave:M,delayLeave:N,afterLeave:J}=E,ee=()=>{f.ctx.isUnmounted?o(b):n(b,d,m)},ue=()=>{b._isLeaving&&b[kl](!0),M(b,()=>{ee(),J&&J()})};N?N(b,ee,ue):ue()}else n(b,d,m)},Ee=(f,d,m,w=!1,S=!1)=>{const{type:b,props:T,ref:E,children:C,dynamicChildren:k,shapeFlag:H,patchFlag:M,dirs:N,cacheIndex:J}=f;if(M===-2&&(S=!1),E!=null&&(dt(),on(E,null,m,f,!0),ht()),J!=null&&(d.renderCache[J]=void 0),H&256){d.ctx.deactivate(f);return}const ee=H&1&&N,ue=!rn(f);let re;if(ue&&(re=T&&T.onVnodeBeforeUnmount)&&Xe(re,d,f),H&6)Rt(f.component,m,w);else{if(H&128){f.suspense.unmount(m,w);return}ee&&At(f,null,d,"beforeUnmount"),H&64?f.type.remove(f,d,m,B,w):k&&!k.hasOnce&&(b!==Ce||M>0&&M&64)?Ie(k,d,m,!1,!0):(b===Ce&&M&384||!S&&H&16)&&Ie(C,d,m),w&&mt(f)}(ue&&(re=T&&T.onVnodeUnmounted)||ee)&&Be(()=>{re&&Xe(re,d,f),ee&&At(f,null,d,"unmounted")},m)},mt=f=>{const{type:d,el:m,anchor:w,transition:S}=f;if(d===Ce){gt(m,w);return}if(d===On){j(f);return}const b=()=>{o(m),S&&!S.persisted&&S.afterLeave&&S.afterLeave()};if(f.shapeFlag&1&&S&&!S.persisted){const{leave:T,delayLeave:E}=S,C=()=>T(m,b);E?E(f.el,b,C):C()}else b()},gt=(f,d)=>{let m;for(;f!==d;)m=g(f),o(f),f=m;o(d)},Rt=(f,d,m)=>{const{bum:w,scope:S,job:b,subTree:T,um:E,m:C,a:k}=f;mo(C),mo(k),w&&An(w),S.stop(),b&&(b.flags|=8,Ee(T,f,d,m)),E&&Be(E,d),Be(()=>{f.isUnmounted=!0},d)},Ie=(f,d,m,w=!1,S=!1,b=0)=>{for(let T=b;T{if(f.shapeFlag&6)return y(f.component.subTree);if(f.shapeFlag&128)return f.suspense.next();const d=g(f.anchor||f.el),m=d&&d[wl];return m?g(m):d};let D=!1;const A=(f,d,m)=>{f==null?d._vnode&&Ee(d._vnode,null,null,!0):O(d._vnode||null,f,d,null,null,null,m),d._vnode=f,D||(D=!0,lo(),Ir(),D=!1)},B={p:O,um:Ee,m:qe,r:mt,mt:We,mc:Q,pc:te,pbc:oe,n:y,o:e};return{render:A,hydrate:void 0,createApp:Wl(A)}}function fs({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function Tt({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function ta(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Xr(e,t,s=!1){const n=e.children,o=t.children;if(U(n)&&U(o))for(let r=0;r>1,e[s[a]]0&&(t[n]=s[r-1]),s[r]=n)}}for(r=s.length,i=s[r-1];r-- >0;)s[r]=i,i=t[i];return s}function $r(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:$r(t)}function mo(e){if(e)for(let t=0;tYe(sa);function an(e,t,s){return ei(e,t,s)}function ei(e,t,s=fe){const{immediate:n,deep:o,flush:r,once:i}=s,a=Me({},s),u=t&&n||!t&&r!=="post";let p;if(vn){if(r==="sync"){const v=oa();p=v.__watcherHandles||(v.__watcherHandles=[])}else if(!u){const v=()=>{};return v.stop=nt,v.resume=nt,v.pause=nt,v}}const l=Oe;a.call=(v,P,O)=>ot(v,l,P,O);let h=!1;r==="post"?a.scheduler=v=>{Be(v,l&&l.suspense)}:r!=="sync"&&(h=!0,a.scheduler=(v,P)=>{P?v():zs(v)}),a.augmentJob=v=>{t&&(v.flags|=4),h&&(v.flags|=2,l&&(v.id=l.uid,v.i=l))};const g=vl(e,t,a);return vn&&(p?p.push(g):u&&g()),g}function ra(e,t,s){const n=this.proxy,o=we(e)?e.includes(".")?ti(n,e):()=>n[e]:e.bind(n,n);let r;$(t)?r=t:(r=t.handler,s=t);const i=xn(this),a=ei(o,r.bind(n),s);return i(),a}function ti(e,t){const s=t.split(".");return()=>{let n=e;for(let o=0;ot==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ke(t)}Modifiers`]||e[`${jt(t)}Modifiers`];function la(e,t,...s){if(e.isUnmounted)return;const n=e.vnode.props||fe;let o=s;const r=t.startsWith("update:"),i=r&&ia(n,t.slice(7));i&&(i.trim&&(o=s.map(l=>we(l)?l.trim():l)),i.number&&(o=s.map(Dn)));let a,u=n[a=rs(t)]||n[a=rs(Ke(t))];!u&&r&&(u=n[a=rs(jt(t))]),u&&ot(u,e,6,o);const p=n[a+"Once"];if(p){if(!e.emitted)e.emitted={};else if(e.emitted[a])return;e.emitted[a]=!0,ot(p,e,6,o)}}function ni(e,t,s=!1){const n=t.emitsCache,o=n.get(e);if(o!==void 0)return o;const r=e.emits;let i={},a=!1;if(!$(e)){const u=p=>{const l=ni(p,t,!0);l&&(a=!0,Me(i,l))};!s&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}return!r&&!a?(pe(e)&&n.set(e,null),null):(U(r)?r.forEach(u=>i[u]=null):Me(i,r),pe(e)&&n.set(e,i),i)}function Xn(e,t){return!e||!Kn(t)?!1:(t=t.slice(2).replace(/Once$/,""),le(e,t[0].toLowerCase()+t.slice(1))||le(e,jt(t))||le(e,t))}function go(e){const{type:t,vnode:s,proxy:n,withProxy:o,propsOptions:[r],slots:i,attrs:a,emit:u,render:p,renderCache:l,props:h,data:g,setupState:v,ctx:P,inheritAttrs:O}=e,G=Ln(e);let R,I;try{if(s.shapeFlag&4){const j=o||n,x=j;R=et(p.call(x,j,l,h,v,g,P)),I=a}else{const j=t;R=et(j.length>1?j(h,{attrs:a,slots:i,emit:u}):j(h,null)),I=t.props?a:aa(a)}}catch(j){cn.length=0,Yn(j,e,1),R=be(Pt)}let V=R;if(I&&O!==!1){const j=Object.keys(I),{shapeFlag:x}=V;j.length&&x&7&&(r&&j.some(Ds)&&(I=ca(I,r)),V=Kt(V,I,!1,!0))}return s.dirs&&(V=Kt(V,null,!1,!0),V.dirs=V.dirs?V.dirs.concat(s.dirs):s.dirs),s.transition&&Js(V,s.transition),R=V,Ln(G),R}const aa=e=>{let t;for(const s in e)(s==="class"||s==="style"||Kn(s))&&((t||(t={}))[s]=e[s]);return t},ca=(e,t)=>{const s={};for(const n in e)(!Ds(n)||!(n.slice(9)in t))&&(s[n]=e[n]);return s};function ua(e,t,s){const{props:n,children:o,component:r}=e,{props:i,children:a,patchFlag:u}=t,p=r.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&u>=0){if(u&1024)return!0;if(u&16)return n?vo(n,i,p):!!i;if(u&8){const l=t.dynamicProps;for(let h=0;he.__isSuspense;function da(e,t){t&&t.pendingBranch?U(e)?t.effects.push(...e):t.effects.push(e):yl(e)}const Ce=Symbol.for("v-fgt"),$n=Symbol.for("v-txt"),Pt=Symbol.for("v-cmt"),On=Symbol.for("v-stc"),cn=[];let Ne=null;function q(e=!1){cn.push(Ne=e?null:[])}function ha(){cn.pop(),Ne=cn[cn.length-1]||null}let gn=1;function _o(e,t=!1){gn+=e,e<0&&Ne&&t&&(Ne.hasOnce=!0)}function oi(e){return e.dynamicChildren=gn>0?Ne||Nt:null,ha(),gn>0&&Ne&&Ne.push(e),e}function W(e,t,s,n,o,r){return oi(c(e,t,s,n,o,r,!0))}function xs(e,t,s,n,o){return oi(be(e,t,s,n,o,!0))}function qn(e){return e?e.__v_isVNode===!0:!1}function Xt(e,t){return e.type===t.type&&e.key===t.key}const ri=({key:e})=>e??null,Mn=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?we(e)||ye(e)||$(e)?{i:Le,r:e,k:t,f:!!s}:e:null);function c(e,t=null,s=null,n=0,o=null,r=e===Ce?0:1,i=!1,a=!1){const u={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ri(t),ref:t&&Mn(t),scopeId:jr,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:r,patchFlag:n,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Le};return a?(Zs(u,s),r&128&&e.normalize(u)):s&&(u.shapeFlag|=we(s)?8:16),gn>0&&!i&&Ne&&(u.patchFlag>0||r&6)&&u.patchFlag!==32&&Ne.push(u),u}const be=pa;function pa(e,t=null,s=null,n=0,o=null,r=!1){if((!e||e===Vl)&&(e=Pt),qn(e)){const a=Kt(e,t,!0);return s&&Zs(a,s),gn>0&&!r&&Ne&&(a.shapeFlag&6?Ne[Ne.indexOf(e)]=a:Ne.push(a)),a.patchFlag=-2,a}if(xa(e)&&(e=e.__vccOpts),t){t=ma(t);let{class:a,style:u}=t;a&&!we(a)&&(t.class=Mt(a)),pe(u)&&(Ws(u)&&!U(u)&&(u=Me({},u)),t.style=Fs(u))}const i=we(e)?1:si(e)?128:Sl(e)?64:pe(e)?4:$(e)?2:0;return c(e,t,s,n,o,i,r,!0)}function ma(e){return e?Ws(e)||Gr(e)?Me({},e):e:null}function Kt(e,t,s=!1,n=!1){const{props:o,ref:r,patchFlag:i,children:a,transition:u}=e,p=t?ga(o||{},t):o,l={__v_isVNode:!0,__v_skip:!0,type:e.type,props:p,key:p&&ri(p),ref:t&&t.ref?s&&r?U(r)?r.concat(Mn(t)):[r,Mn(t)]:Mn(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ce?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:u,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Kt(e.ssContent),ssFallback:e.ssFallback&&Kt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return u&&n&&Js(l,u.clone(l)),l}function Se(e=" ",t=0){return be($n,null,e,t)}function bo(e,t){const s=be(On,null,e);return s.staticCount=t,s}function Re(e="",t=!1){return t?(q(),xs(Pt,null,e)):be(Pt,null,e)}function et(e){return e==null||typeof e=="boolean"?be(Pt):U(e)?be(Ce,null,e.slice()):qn(e)?yt(e):be($n,null,String(e))}function yt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Kt(e)}function Zs(e,t){let s=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(U(t))s=16;else if(typeof t=="object")if(n&65){const o=t.default;o&&(o._c&&(o._d=!1),Zs(e,o()),o._c&&(o._d=!0));return}else{s=32;const o=t._;!o&&!Gr(t)?t._ctx=Le:o===3&&Le&&(Le.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else $(t)?(t={default:t,_ctx:Le},s=32):(t=String(t),n&64?(s=16,t=[Se(t)]):s=8);e.children=t,e.shapeFlag|=s}function ga(...e){const t={};for(let s=0;sOe||Le;let Un,Es;{const e=zn(),t=(s,n)=>{let o;return(o=e[s])||(o=e[s]=[]),o.push(n),r=>{o.length>1?o.forEach(i=>i(r)):o[0](r)}};Un=t("__VUE_INSTANCE_SETTERS__",s=>Oe=s),Es=t("__VUE_SSR_SETTERS__",s=>vn=s)}const xn=e=>{const t=Oe;return Un(e),e.scope.on(),()=>{e.scope.off(),Un(t)}},yo=()=>{Oe&&Oe.scope.off(),Un(null)};function li(e){return e.vnode.shapeFlag&4}let vn=!1;function ya(e,t=!1,s=!1){t&&Es(t);const{props:n,children:o}=e.vnode,r=li(e);zl(e,n,r,t),Zl(e,o,s||t);const i=r?wa(e,t):void 0;return t&&Es(!1),i}function wa(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Bl);const{setup:n}=s;if(n){dt();const o=e.setupContext=n.length>1?ka(e):null,r=xn(e),i=Cn(n,e,0,[e.props,o]),a=sr(i);if(ht(),r(),(a||e.sp)&&!rn(e)&&Fr(e),a){if(i.then(yo,yo),t)return i.then(u=>{wo(e,u)}).catch(u=>{Yn(u,e,0)});e.asyncDep=i}else wo(e,i)}else ai(e)}function wo(e,t,s){$(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:pe(t)&&(e.setupState=Tr(t)),ai(e)}function ai(e,t,s){const n=e.type;e.render||(e.render=n.render||nt);{const o=xn(e);dt();try{Ll(e)}finally{ht(),o()}}}const Sa={get(e,t){return Te(e,"get",""),e[t]}};function ka(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,Sa),slots:e.slots,emit:e.emit,expose:t}}function es(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Tr(Gs(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in ln)return ln[s](e)},has(t,s){return s in t||s in ln}})):e.proxy}function Ca(e,t=!0){return $(e)?e.displayName||e.name:e.name||t&&e.__name}function xa(e){return $(e)&&"__vccOpts"in e}const xe=(e,t)=>ml(e,t,vn);function ci(e,t,s){const n=arguments.length;return n===2?pe(t)&&!U(t)?qn(t)?be(e,null,[t]):be(e,t):be(e,null,t):(n>3?s=Array.prototype.slice.call(arguments,2):n===3&&qn(s)&&(s=[s]),be(e,t,s))}const Ea="3.5.20";/** -* @vue/runtime-dom v3.5.20 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let Ps;const So=typeof window<"u"&&window.trustedTypes;if(So)try{Ps=So.createPolicy("vue",{createHTML:e=>e})}catch{}const ui=Ps?e=>Ps.createHTML(e):e=>e,Pa="http://www.w3.org/2000/svg",Ra="http://www.w3.org/1998/Math/MathML",lt=typeof document<"u"?document:null,ko=lt&<.createElement("template"),Aa={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,n)=>{const o=t==="svg"?lt.createElementNS(Pa,e):t==="mathml"?lt.createElementNS(Ra,e):s?lt.createElement(e,{is:s}):lt.createElement(e);return e==="select"&&n&&n.multiple!=null&&o.setAttribute("multiple",n.multiple),o},createText:e=>lt.createTextNode(e),createComment:e=>lt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>lt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,n,o,r){const i=s?s.previousSibling:t.lastChild;if(o&&(o===r||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),s),!(o===r||!(o=o.nextSibling)););else{ko.innerHTML=ui(n==="svg"?`${e}`:n==="mathml"?`${e}`:e);const a=ko.content;if(n==="svg"||n==="mathml"){const u=a.firstChild;for(;u.firstChild;)a.appendChild(u.firstChild);a.removeChild(u)}t.insertBefore(a,s)}return[i?i.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},Ta=Symbol("_vtc");function Oa(e,t,s){const n=e[Ta];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const Co=Symbol("_vod"),Ma=Symbol("_vsh"),Ia=Symbol(""),Da=/(^|;)\s*display\s*:/;function ja(e,t,s){const n=e.style,o=we(s);let r=!1;if(s&&!o){if(t)if(we(t))for(const i of t.split(";")){const a=i.slice(0,i.indexOf(":")).trim();s[a]==null&&In(n,a,"")}else for(const i in t)s[i]==null&&In(n,i,"");for(const i in s)i==="display"&&(r=!0),In(n,i,s[i])}else if(o){if(t!==s){const i=n[Ia];i&&(s+=";"+i),n.cssText=s,r=Da.test(s)}}else t&&e.removeAttribute("style");Co in e&&(e[Co]=r?n.display:"",e[Ma]&&(n.display="none"))}const xo=/\s*!important$/;function In(e,t,s){if(U(s))s.forEach(n=>In(e,t,n));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const n=Va(e,t);xo.test(s)?e.setProperty(jt(n),s.replace(xo,""),"important"):e[n]=s}}const Eo=["Webkit","Moz","ms"],ds={};function Va(e,t){const s=ds[t];if(s)return s;let n=Ke(t);if(n!=="filter"&&n in e)return ds[t]=n;n=Gn(n);for(let o=0;ohs||(Na.then(()=>hs=0),hs=Date.now());function qa(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;ot(Ua(n,s.value),t,5,[n])};return s.value=e,s.attached=Ha(),s}function Ua(e,t){if(U(t)){const s=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{s.call(e),e._stopped=!0},t.map(n=>o=>!o._stopped&&n&&n(o))}else return t}const Mo=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ka=(e,t,s,n,o,r)=>{const i=o==="svg";t==="class"?Oa(e,n,i):t==="style"?ja(e,s,n):Kn(t)?Ds(t)||Ba(e,t,s,n,r):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Wa(e,t,n,i))?(Ao(e,t,n),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Ro(e,t,n,i,r,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!we(n))?Ao(e,Ke(t),n,r,t):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),Ro(e,t,n,i))};function Wa(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&Mo(t)&&$(s));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return Mo(t)&&we(s)?!1:t in e}const Wt=e=>{const t=e.props["onUpdate:modelValue"]||!1;return U(t)?s=>An(t,s):t};function Ga(e){e.target.composing=!0}function Io(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const ft=Symbol("_assign"),_e={created(e,{modifiers:{lazy:t,trim:s,number:n}},o){e[ft]=Wt(o);const r=n||o.props&&o.props.type==="number";kt(e,t?"change":"input",i=>{if(i.target.composing)return;let a=e.value;s&&(a=a.trim()),r&&(a=Dn(a)),e[ft](a)}),s&&kt(e,"change",()=>{e.value=e.value.trim()}),t||(kt(e,"compositionstart",Ga),kt(e,"compositionend",Io),kt(e,"change",Io))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:n,trim:o,number:r}},i){if(e[ft]=Wt(i),e.composing)return;const a=(r||e.type==="number")&&!/^0\d/.test(e.value)?Dn(e.value):e.value,u=t??"";a!==u&&(document.activeElement===e&&e.type!=="range"&&(n&&t===s||o&&e.value.trim()===u)||(e.value=u))}},za={deep:!0,created(e,t,s){e[ft]=Wt(s),kt(e,"change",()=>{const n=e._modelValue,o=_n(e),r=e.checked,i=e[ft];if(U(n)){const a=Bs(n,o),u=a!==-1;if(r&&!u)i(n.concat(o));else if(!r&&u){const p=[...n];p.splice(a,1),i(p)}}else if(Jt(n)){const a=new Set(n);r?a.add(o):a.delete(o),i(a)}else i(fi(e,r))})},mounted:Do,beforeUpdate(e,t,s){e[ft]=Wt(s),Do(e,t,s)}};function Do(e,{value:t,oldValue:s},n){e._modelValue=t;let o;if(U(t))o=Bs(t,n.props.value)>-1;else if(Jt(t))o=t.has(n.props.value);else{if(t===s)return;o=Sn(t,fi(e,!0))}e.checked!==o&&(e.checked=o)}const Ja={deep:!0,created(e,{value:t,modifiers:{number:s}},n){const o=Jt(t);kt(e,"change",()=>{const r=Array.prototype.filter.call(e.options,i=>i.selected).map(i=>s?Dn(_n(i)):_n(i));e[ft](e.multiple?o?new Set(r):r:r[0]),e._assigning=!0,Qn(()=>{e._assigning=!1})}),e[ft]=Wt(n)},mounted(e,{value:t}){jo(e,t)},beforeUpdate(e,t,s){e[ft]=Wt(s)},updated(e,{value:t}){e._assigning||jo(e,t)}};function jo(e,t){const s=e.multiple,n=U(t);if(!(s&&!n&&!Jt(t))){for(let o=0,r=e.options.length;oString(p)===String(a)):i.selected=Bs(t,a)>-1}else i.selected=t.has(a);else if(Sn(_n(i),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!s&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function _n(e){return"_value"in e?e._value:e.value}function fi(e,t){const s=t?"_trueValue":"_falseValue";return s in e?e[s]:t}const Ya=["ctrl","shift","alt","meta"],Qa={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Ya.some(s=>e[`${s}Key`]&&!t.includes(s))},at=(e,t)=>{const s=e._withMods||(e._withMods={}),n=t.join(".");return s[n]||(s[n]=(o,...r)=>{for(let i=0;i{const t=Xa().createApp(...e),{mount:s}=t;return t.mount=n=>{const o=tc(n);if(!o)return;const r=t._component;!$(r)&&!r.render&&!r.template&&(r.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const i=s(o,!1,ec(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),i},t};function ec(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function tc(e){return we(e)?document.querySelector(e):e}/*! - * pinia v2.3.1 - * (c) 2025 Eduardo San Martin Morote - * @license MIT - */let di;const ts=e=>di=e,hi=Symbol();function Rs(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var un;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(un||(un={}));function nc(){const e=fr(!0),t=e.run(()=>Z({}));let s=[],n=[];const o=Gs({install(r){ts(o),o._a=r,r.provide(hi,o),r.config.globalProperties.$pinia=o,n.forEach(i=>s.push(i)),n=[]},use(r){return this._a?s.push(r):n.push(r),this},_p:s,_a:null,_e:e,_s:new Map,state:t});return o}const pi=()=>{};function Fo(e,t,s,n=pi){e.push(t);const o=()=>{const r=e.indexOf(t);r>-1&&(e.splice(r,1),n())};return!s&&dr()&&qi(o),o}function Ft(e,...t){e.slice().forEach(s=>{s(...t)})}const sc=e=>e(),Bo=Symbol(),ps=Symbol();function As(e,t){e instanceof Map&&t instanceof Map?t.forEach((s,n)=>e.set(n,s)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const s in t){if(!t.hasOwnProperty(s))continue;const n=t[s],o=e[s];Rs(o)&&Rs(n)&&e.hasOwnProperty(s)&&!ye(n)&&!xt(n)?e[s]=As(o,n):e[s]=n}return e}const oc=Symbol();function rc(e){return!Rs(e)||!e.hasOwnProperty(oc)}const{assign:_t}=Object;function ic(e){return!!(ye(e)&&e.effect)}function lc(e,t,s,n){const{state:o,actions:r,getters:i}=t,a=s.state.value[e];let u;function p(){a||(s.state.value[e]=o?o():{});const l=fl(s.state.value[e]);return _t(l,r,Object.keys(i||{}).reduce((h,g)=>(h[g]=Gs(xe(()=>{ts(s);const v=s._s.get(e);return i[g].call(v,v)})),h),{}))}return u=mi(e,p,t,s,n,!0),u}function mi(e,t,s={},n,o,r){let i;const a=_t({actions:{}},s),u={deep:!0};let p,l,h=[],g=[],v;const P=n.state.value[e];!r&&!P&&(n.state.value[e]={}),Z({});let O;function G(Q){let Y;p=l=!1,typeof Q=="function"?(Q(n.state.value[e]),Y={type:un.patchFunction,storeId:e,events:v}):(As(n.state.value[e],Q),Y={type:un.patchObject,payload:Q,storeId:e,events:v});const oe=O=Symbol();Qn().then(()=>{O===oe&&(p=!0)}),l=!0,Ft(h,Y,n.state.value[e])}const R=r?function(){const{state:Y}=s,oe=Y?Y():{};this.$patch(me=>{_t(me,oe)})}:pi;function I(){i.stop(),h=[],g=[],n._s.delete(e)}const V=(Q,Y="")=>{if(Bo in Q)return Q[ps]=Y,Q;const oe=function(){ts(n);const me=Array.from(arguments),ae=[],ge=[];function We(K){ae.push(K)}function Ge(K){ge.push(K)}Ft(g,{args:me,name:oe[ps],store:x,after:We,onError:Ge});let de;try{de=Q.apply(this&&this.$id===e?this:x,me)}catch(K){throw Ft(ge,K),K}return de instanceof Promise?de.then(K=>(Ft(ae,K),K)).catch(K=>(Ft(ge,K),Promise.reject(K))):(Ft(ae,de),de)};return oe[Bo]=!0,oe[ps]=Y,oe},j={_p:n,$id:e,$onAction:Fo.bind(null,g),$patch:G,$reset:R,$subscribe(Q,Y={}){const oe=Fo(h,Q,Y.detached,()=>me()),me=i.run(()=>an(()=>n.state.value[e],ae=>{(Y.flush==="sync"?l:p)&&Q({storeId:e,type:un.direct,events:v},ae)},_t({},u,Y)));return oe},$dispose:I},x=kn(j);n._s.set(e,x);const z=(n._a&&n._a.runWithContext||sc)(()=>n._e.run(()=>(i=fr()).run(()=>t({action:V}))));for(const Q in z){const Y=z[Q];if(ye(Y)&&!ic(Y)||xt(Y))r||(P&&rc(Y)&&(ye(Y)?Y.value=P[Q]:As(Y,P[Q])),n.state.value[e][Q]=Y);else if(typeof Y=="function"){const oe=V(Y,Q);z[Q]=oe,a.actions[Q]=Y}}return _t(x,z),_t(se(x),z),Object.defineProperty(x,"$state",{get:()=>n.state.value[e],set:Q=>{G(Y=>{_t(Y,Q)})}}),n._p.forEach(Q=>{_t(x,i.run(()=>Q({store:x,app:n._a,pinia:n,options:a})))}),P&&r&&s.hydrate&&s.hydrate(x.$state,P),p=!0,l=!0,x}/*! #__NO_SIDE_EFFECTS__ */function ac(e,t,s){let n,o;const r=typeof t=="function";n=e,o=r?s:t;function i(a,u){const p=Gl();return a=a||(p?Ye(hi,null):null),a&&ts(a),a=di,a._s.has(n)||(r?mi(n,t,o,a):lc(n,o,a)),a._s.get(n)}return i.$id=n,i}/*! - * vue-router v4.5.1 - * (c) 2025 Eduardo San Martin Morote - * @license MIT - */const Lt=typeof document<"u";function gi(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function cc(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&gi(e.default)}const ie=Object.assign;function ms(e,t){const s={};for(const n in t){const o=t[n];s[n]=Qe(o)?o.map(e):e(o)}return s}const fn=()=>{},Qe=Array.isArray,vi=/#/g,uc=/&/g,fc=/\//g,dc=/=/g,hc=/\?/g,_i=/\+/g,pc=/%5B/g,mc=/%5D/g,bi=/%5E/g,gc=/%60/g,yi=/%7B/g,vc=/%7C/g,wi=/%7D/g,_c=/%20/g;function Xs(e){return encodeURI(""+e).replace(vc,"|").replace(pc,"[").replace(mc,"]")}function bc(e){return Xs(e).replace(yi,"{").replace(wi,"}").replace(bi,"^")}function Ts(e){return Xs(e).replace(_i,"%2B").replace(_c,"+").replace(vi,"%23").replace(uc,"%26").replace(gc,"`").replace(yi,"{").replace(wi,"}").replace(bi,"^")}function yc(e){return Ts(e).replace(dc,"%3D")}function wc(e){return Xs(e).replace(vi,"%23").replace(hc,"%3F")}function Sc(e){return e==null?"":wc(e).replace(fc,"%2F")}function bn(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const kc=/\/$/,Cc=e=>e.replace(kc,"");function gs(e,t,s="/"){let n,o={},r="",i="";const a=t.indexOf("#");let u=t.indexOf("?");return a=0&&(u=-1),u>-1&&(n=t.slice(0,u),r=t.slice(u+1,a>-1?a:t.length),o=e(r)),a>-1&&(n=n||t.slice(0,a),i=t.slice(a,t.length)),n=Rc(n??t,s),{fullPath:n+(r&&"?")+r+i,path:n,query:o,hash:bn(i)}}function xc(e,t){const s=t.query?e(t.query):"";return t.path+(s&&"?")+s+(t.hash||"")}function Lo(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Ec(e,t,s){const n=t.matched.length-1,o=s.matched.length-1;return n>-1&&n===o&&Gt(t.matched[n],s.matched[o])&&Si(t.params,s.params)&&e(t.query)===e(s.query)&&t.hash===s.hash}function Gt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Si(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const s in e)if(!Pc(e[s],t[s]))return!1;return!0}function Pc(e,t){return Qe(e)?No(e,t):Qe(t)?No(t,e):e===t}function No(e,t){return Qe(t)?e.length===t.length&&e.every((s,n)=>s===t[n]):e.length===1&&e[0]===t}function Rc(e,t){if(e.startsWith("/"))return e;if(!e)return t;const s=t.split("/"),n=e.split("/"),o=n[n.length-1];(o===".."||o===".")&&n.push("");let r=s.length-1,i,a;for(i=0;i1&&r--;else break;return s.slice(0,r).join("/")+"/"+n.slice(i).join("/")}const vt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var yn;(function(e){e.pop="pop",e.push="push"})(yn||(yn={}));var dn;(function(e){e.back="back",e.forward="forward",e.unknown=""})(dn||(dn={}));function Ac(e){if(!e)if(Lt){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Cc(e)}const Tc=/^[^#]+#/;function Oc(e,t){return e.replace(Tc,"#")+t}function Mc(e,t){const s=document.documentElement.getBoundingClientRect(),n=e.getBoundingClientRect();return{behavior:t.behavior,left:n.left-s.left-(t.left||0),top:n.top-s.top-(t.top||0)}}const ns=()=>({left:window.scrollX,top:window.scrollY});function Ic(e){let t;if("el"in e){const s=e.el,n=typeof s=="string"&&s.startsWith("#"),o=typeof s=="string"?n?document.getElementById(s.slice(1)):document.querySelector(s):s;if(!o)return;t=Mc(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Ho(e,t){return(history.state?history.state.position-t:-1)+e}const Os=new Map;function Dc(e,t){Os.set(e,t)}function jc(e){const t=Os.get(e);return Os.delete(e),t}let Vc=()=>location.protocol+"//"+location.host;function ki(e,t){const{pathname:s,search:n,hash:o}=t,r=e.indexOf("#");if(r>-1){let a=o.includes(e.slice(r))?e.slice(r).length:1,u=o.slice(a);return u[0]!=="/"&&(u="/"+u),Lo(u,"")}return Lo(s,e)+n+o}function Fc(e,t,s,n){let o=[],r=[],i=null;const a=({state:g})=>{const v=ki(e,location),P=s.value,O=t.value;let G=0;if(g){if(s.value=v,t.value=g,i&&i===P){i=null;return}G=O?g.position-O.position:0}else n(v);o.forEach(R=>{R(s.value,P,{delta:G,type:yn.pop,direction:G?G>0?dn.forward:dn.back:dn.unknown})})};function u(){i=s.value}function p(g){o.push(g);const v=()=>{const P=o.indexOf(g);P>-1&&o.splice(P,1)};return r.push(v),v}function l(){const{history:g}=window;g.state&&g.replaceState(ie({},g.state,{scroll:ns()}),"")}function h(){for(const g of r)g();r=[],window.removeEventListener("popstate",a),window.removeEventListener("beforeunload",l)}return window.addEventListener("popstate",a),window.addEventListener("beforeunload",l,{passive:!0}),{pauseListeners:u,listen:p,destroy:h}}function qo(e,t,s,n=!1,o=!1){return{back:e,current:t,forward:s,replaced:n,position:window.history.length,scroll:o?ns():null}}function Bc(e){const{history:t,location:s}=window,n={value:ki(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(u,p,l){const h=e.indexOf("#"),g=h>-1?(s.host&&document.querySelector("base")?e:e.slice(h))+u:Vc()+e+u;try{t[l?"replaceState":"pushState"](p,"",g),o.value=p}catch(v){console.error(v),s[l?"replace":"assign"](g)}}function i(u,p){const l=ie({},t.state,qo(o.value.back,u,o.value.forward,!0),p,{position:o.value.position});r(u,l,!0),n.value=u}function a(u,p){const l=ie({},o.value,t.state,{forward:u,scroll:ns()});r(l.current,l,!0);const h=ie({},qo(n.value,u,null),{position:l.position+1},p);r(u,h,!1),n.value=u}return{location:n,state:o,push:a,replace:i}}function Lc(e){e=Ac(e);const t=Bc(e),s=Fc(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:Oc.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}function Nc(e){return typeof e=="string"||e&&typeof e=="object"}function Ci(e){return typeof e=="string"||typeof e=="symbol"}const xi=Symbol("");var Uo;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Uo||(Uo={}));function zt(e,t){return ie(new Error,{type:e,[xi]:!0},t)}function it(e,t){return e instanceof Error&&xi in e&&(t==null||!!(e.type&t))}const Ko="[^/]+?",Hc={sensitive:!1,strict:!1,start:!0,end:!0},qc=/[.+*?^${}()[\]/\\]/g;function Uc(e,t){const s=ie({},Hc,t),n=[];let o=s.start?"^":"";const r=[];for(const p of e){const l=p.length?[]:[90];s.strict&&!p.length&&(o+="/");for(let h=0;ht.length?t.length===1&&t[0]===80?1:-1:0}function Ei(e,t){let s=0;const n=e.score,o=t.score;for(;s0&&t[t.length-1]<0}const Wc={type:0,value:""},Gc=/[a-zA-Z0-9_]/;function zc(e){if(!e)return[[]];if(e==="/")return[[Wc]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(v){throw new Error(`ERR (${s})/"${p}": ${v}`)}let s=0,n=s;const o=[];let r;function i(){r&&o.push(r),r=[]}let a=0,u,p="",l="";function h(){p&&(s===0?r.push({type:0,value:p}):s===1||s===2||s===3?(r.length>1&&(u==="*"||u==="+")&&t(`A repeatable param (${p}) must be alone in its segment. eg: '/:ids+.`),r.push({type:1,value:p,regexp:l,repeatable:u==="*"||u==="+",optional:u==="*"||u==="?"})):t("Invalid state to consume buffer"),p="")}function g(){p+=u}for(;a{i(V)}:fn}function i(h){if(Ci(h)){const g=n.get(h);g&&(n.delete(h),s.splice(s.indexOf(g),1),g.children.forEach(i),g.alias.forEach(i))}else{const g=s.indexOf(h);g>-1&&(s.splice(g,1),h.record.name&&n.delete(h.record.name),h.children.forEach(i),h.alias.forEach(i))}}function a(){return s}function u(h){const g=Xc(h,s);s.splice(g,0,h),h.record.name&&!Jo(h)&&n.set(h.record.name,h)}function p(h,g){let v,P={},O,G;if("name"in h&&h.name){if(v=n.get(h.name),!v)throw zt(1,{location:h});G=v.record.name,P=ie(Go(g.params,v.keys.filter(V=>!V.optional).concat(v.parent?v.parent.keys.filter(V=>V.optional):[]).map(V=>V.name)),h.params&&Go(h.params,v.keys.map(V=>V.name))),O=v.stringify(P)}else if(h.path!=null)O=h.path,v=s.find(V=>V.re.test(O)),v&&(P=v.parse(O),G=v.record.name);else{if(v=g.name?n.get(g.name):s.find(V=>V.re.test(g.path)),!v)throw zt(1,{location:h,currentLocation:g});G=v.record.name,P=ie({},g.params,h.params),O=v.stringify(P)}const R=[];let I=v;for(;I;)R.unshift(I.record),I=I.parent;return{name:G,path:O,params:P,matched:R,meta:Zc(R)}}e.forEach(h=>r(h));function l(){s.length=0,n.clear()}return{addRoute:r,resolve:p,removeRoute:i,clearRoutes:l,getRoutes:a,getRecordMatcher:o}}function Go(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:Qc(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 Qc(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 Jo(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Zc(e){return e.reduce((t,s)=>ie(t,s.meta),{})}function Yo(e,t){const s={};for(const n in e)s[n]=n in t?t[n]:e[n];return s}function Xc(e,t){let s=0,n=t.length;for(;s!==n;){const r=s+n>>1;Ei(e,t[r])<0?n=r:s=r+1}const o=$c(e);return o&&(n=t.lastIndexOf(o,n-1)),n}function $c(e){let t=e;for(;t=t.parent;)if(Pi(t)&&Ei(e,t)===0)return t}function Pi({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function eu(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;or&&Ts(r)):[n&&Ts(n)]).forEach(r=>{r!==void 0&&(t+=(t.length?"&":"")+s,r!=null&&(t+="="+r))})}return t}function tu(e){const t={};for(const s in e){const n=e[s];n!==void 0&&(t[s]=Qe(n)?n.map(o=>o==null?null:""+o):n==null?n:""+n)}return t}const nu=Symbol(""),Zo=Symbol(""),ss=Symbol(""),Ri=Symbol(""),Ms=Symbol("");function $t(){let e=[];function t(n){return e.push(n),()=>{const o=e.indexOf(n);o>-1&&e.splice(o,1)}}function s(){e=[]}return{add:t,list:()=>e.slice(),reset:s}}function wt(e,t,s,n,o,r=i=>i()){const i=n&&(n.enterCallbacks[o]=n.enterCallbacks[o]||[]);return()=>new Promise((a,u)=>{const p=g=>{g===!1?u(zt(4,{from:s,to:t})):g instanceof Error?u(g):Nc(g)?u(zt(2,{from:t,to:g})):(i&&n.enterCallbacks[o]===i&&typeof g=="function"&&i.push(g),a())},l=r(()=>e.call(n&&n.instances[o],t,s,p));let h=Promise.resolve(l);e.length<3&&(h=h.then(p)),h.catch(g=>u(g))})}function vs(e,t,s,n,o=r=>r()){const r=[];for(const i of e)for(const a in i.components){let u=i.components[a];if(!(t!=="beforeRouteEnter"&&!i.instances[a]))if(gi(u)){const l=(u.__vccOpts||u)[t];l&&r.push(wt(l,s,n,i,a,o))}else{let p=u();r.push(()=>p.then(l=>{if(!l)throw new Error(`Couldn't resolve component "${a}" at "${i.path}"`);const h=cc(l)?l.default:l;i.mods[a]=l,i.components[a]=h;const v=(h.__vccOpts||h)[t];return v&&wt(v,s,n,i,a,o)()}))}}return r}function Xo(e){const t=Ye(ss),s=Ye(Ri),n=xe(()=>{const u=qt(e.to);return t.resolve(u)}),o=xe(()=>{const{matched:u}=n.value,{length:p}=u,l=u[p-1],h=s.matched;if(!l||!h.length)return-1;const g=h.findIndex(Gt.bind(null,l));if(g>-1)return g;const v=$o(u[p-2]);return p>1&&$o(l)===v&&h[h.length-1].path!==v?h.findIndex(Gt.bind(null,u[p-2])):g}),r=xe(()=>o.value>-1&&lu(s.params,n.value.params)),i=xe(()=>o.value>-1&&o.value===s.matched.length-1&&Si(s.params,n.value.params));function a(u={}){if(iu(u)){const p=t[qt(e.replace)?"replace":"push"](qt(e.to)).catch(fn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>p),p}return Promise.resolve()}return{route:n,href:xe(()=>n.value.href),isActive:r,isExactActive:i,navigate:a}}function su(e){return e.length===1?e[0]:e}const ou=Vr({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:Xo,setup(e,{slots:t}){const s=kn(Xo(e)),{options:n}=Ye(ss),o=xe(()=>({[er(e.activeClass,n.linkActiveClass,"router-link-active")]:s.isActive,[er(e.exactActiveClass,n.linkExactActiveClass,"router-link-exact-active")]:s.isExactActive}));return()=>{const r=t.default&&su(t.default(s));return e.custom?r:ci("a",{"aria-current":s.isExactActive?e.ariaCurrentValue:null,href:s.href,onClick:s.navigate,class:o.value},r)}}}),ru=ou;function iu(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 lu(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(!Qe(o)||o.length!==n.length||n.some((r,i)=>r!==o[i]))return!1}return!0}function $o(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const er=(e,t,s)=>e??t??s,au=Vr({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:s}){const n=Ye(Ms),o=xe(()=>e.route||n.value),r=Ye(Zo,0),i=xe(()=>{let p=qt(r);const{matched:l}=o.value;let h;for(;(h=l[p])&&!h.components;)p++;return p}),a=xe(()=>o.value.matched[i.value]);Tn(Zo,xe(()=>i.value+1)),Tn(nu,a),Tn(Ms,o);const u=Z();return an(()=>[u.value,a.value,e.name],([p,l,h],[g,v,P])=>{l&&(l.instances[h]=p,v&&v!==l&&p&&p===g&&(l.leaveGuards.size||(l.leaveGuards=v.leaveGuards),l.updateGuards.size||(l.updateGuards=v.updateGuards))),p&&l&&(!v||!Gt(l,v)||!g)&&(l.enterCallbacks[h]||[]).forEach(O=>O(p))},{flush:"post"}),()=>{const p=o.value,l=e.name,h=a.value,g=h&&h.components[l];if(!g)return tr(s.default,{Component:g,route:p});const v=h.props[l],P=v?v===!0?p.params:typeof v=="function"?v(p):v:null,G=ci(g,ie({},P,t,{onVnodeUnmounted:R=>{R.component.isUnmounted&&(h.instances[l]=null)},ref:u}));return tr(s.default,{Component:G,route:p})||G}}});function tr(e,t){if(!e)return null;const s=e(t);return s.length===1?s[0]:s}const cu=au;function uu(e){const t=Yc(e.routes,e),s=e.parseQuery||eu,n=e.stringifyQuery||Qo,o=e.history,r=$t(),i=$t(),a=$t(),u=al(vt);let p=vt;Lt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const l=ms.bind(null,y=>""+y),h=ms.bind(null,Sc),g=ms.bind(null,bn);function v(y,D){let A,B;return Ci(y)?(A=t.getRecordMatcher(y),B=D):B=y,t.addRoute(B,A)}function P(y){const D=t.getRecordMatcher(y);D&&t.removeRoute(D)}function O(){return t.getRoutes().map(y=>y.record)}function G(y){return!!t.getRecordMatcher(y)}function R(y,D){if(D=ie({},D||u.value),typeof y=="string"){const m=gs(s,y,D.path),w=t.resolve({path:m.path},D),S=o.createHref(m.fullPath);return ie(m,w,{params:g(w.params),hash:bn(m.hash),redirectedFrom:void 0,href:S})}let A;if(y.path!=null)A=ie({},y,{path:gs(s,y.path,D.path).path});else{const m=ie({},y.params);for(const w in m)m[w]==null&&delete m[w];A=ie({},y,{params:h(m)}),D.params=h(D.params)}const B=t.resolve(A,D),ce=y.hash||"";B.params=l(g(B.params));const f=xc(n,ie({},y,{hash:bc(ce),path:B.path})),d=o.createHref(f);return ie({fullPath:f,hash:ce,query:n===Qo?tu(y.query):y.query||{}},B,{redirectedFrom:void 0,href:d})}function I(y){return typeof y=="string"?gs(s,y,u.value.path):ie({},y)}function V(y,D){if(p!==y)return zt(8,{from:D,to:y})}function j(y){return z(y)}function x(y){return j(ie(I(y),{replace:!0}))}function ne(y){const D=y.matched[y.matched.length-1];if(D&&D.redirect){const{redirect:A}=D;let B=typeof A=="function"?A(y):A;return typeof B=="string"&&(B=B.includes("?")||B.includes("#")?B=I(B):{path:B},B.params={}),ie({query:y.query,hash:y.hash,params:B.path!=null?{}:y.params},B)}}function z(y,D){const A=p=R(y),B=u.value,ce=y.state,f=y.force,d=y.replace===!0,m=ne(A);if(m)return z(ie(I(m),{state:typeof m=="object"?ie({},ce,m.state):ce,force:f,replace:d}),D||A);const w=A;w.redirectedFrom=D;let S;return!f&&Ec(n,B,A)&&(S=zt(16,{to:w,from:B}),qe(B,B,!0,!1)),(S?Promise.resolve(S):oe(w,B)).catch(b=>it(b)?it(b,2)?b:He(b):te(b,w,B)).then(b=>{if(b){if(it(b,2))return z(ie({replace:d},I(b.to),{state:typeof b.to=="object"?ie({},ce,b.to.state):ce,force:f}),D||w)}else b=ae(w,B,!0,d,ce);return me(w,B,b),b})}function Q(y,D){const A=V(y,D);return A?Promise.reject(A):Promise.resolve()}function Y(y){const D=gt.values().next().value;return D&&typeof D.runWithContext=="function"?D.runWithContext(y):y()}function oe(y,D){let A;const[B,ce,f]=fu(y,D);A=vs(B.reverse(),"beforeRouteLeave",y,D);for(const m of B)m.leaveGuards.forEach(w=>{A.push(wt(w,y,D))});const d=Q.bind(null,y,D);return A.push(d),Ie(A).then(()=>{A=[];for(const m of r.list())A.push(wt(m,y,D));return A.push(d),Ie(A)}).then(()=>{A=vs(ce,"beforeRouteUpdate",y,D);for(const m of ce)m.updateGuards.forEach(w=>{A.push(wt(w,y,D))});return A.push(d),Ie(A)}).then(()=>{A=[];for(const m of f)if(m.beforeEnter)if(Qe(m.beforeEnter))for(const w of m.beforeEnter)A.push(wt(w,y,D));else A.push(wt(m.beforeEnter,y,D));return A.push(d),Ie(A)}).then(()=>(y.matched.forEach(m=>m.enterCallbacks={}),A=vs(f,"beforeRouteEnter",y,D,Y),A.push(d),Ie(A))).then(()=>{A=[];for(const m of i.list())A.push(wt(m,y,D));return A.push(d),Ie(A)}).catch(m=>it(m,8)?m:Promise.reject(m))}function me(y,D,A){a.list().forEach(B=>Y(()=>B(y,D,A)))}function ae(y,D,A,B,ce){const f=V(y,D);if(f)return f;const d=D===vt,m=Lt?history.state:{};A&&(B||d?o.replace(y.fullPath,ie({scroll:d&&m&&m.scroll},ce)):o.push(y.fullPath,ce)),u.value=y,qe(y,D,A,d),He()}let ge;function We(){ge||(ge=o.listen((y,D,A)=>{if(!Rt.listening)return;const B=R(y),ce=ne(B);if(ce){z(ie(ce,{replace:!0,force:!0}),B).catch(fn);return}p=B;const f=u.value;Lt&&Dc(Ho(f.fullPath,A.delta),ns()),oe(B,f).catch(d=>it(d,12)?d:it(d,2)?(z(ie(I(d.to),{force:!0}),B).then(m=>{it(m,20)&&!A.delta&&A.type===yn.pop&&o.go(-1,!1)}).catch(fn),Promise.reject()):(A.delta&&o.go(-A.delta,!1),te(d,B,f))).then(d=>{d=d||ae(B,f,!1),d&&(A.delta&&!it(d,8)?o.go(-A.delta,!1):A.type===yn.pop&&it(d,20)&&o.go(-1,!1)),me(B,f,d)}).catch(fn)}))}let Ge=$t(),de=$t(),K;function te(y,D,A){He(y);const B=de.list();return B.length?B.forEach(ce=>ce(y,D,A)):console.error(y),Promise.reject(y)}function ze(){return K&&u.value!==vt?Promise.resolve():new Promise((y,D)=>{Ge.add([y,D])})}function He(y){return K||(K=!y,We(),Ge.list().forEach(([D,A])=>y?A(y):D()),Ge.reset()),y}function qe(y,D,A,B){const{scrollBehavior:ce}=e;if(!Lt||!ce)return Promise.resolve();const f=!A&&jc(Ho(y.fullPath,0))||(B||!A)&&history.state&&history.state.scroll||null;return Qn().then(()=>ce(y,D,f)).then(d=>d&&Ic(d)).catch(d=>te(d,y,D))}const Ee=y=>o.go(y);let mt;const gt=new Set,Rt={currentRoute:u,listening:!0,addRoute:v,removeRoute:P,clearRoutes:t.clearRoutes,hasRoute:G,getRoutes:O,resolve:R,options:e,push:j,replace:x,go:Ee,back:()=>Ee(-1),forward:()=>Ee(1),beforeEach:r.add,beforeResolve:i.add,afterEach:a.add,onError:de.add,isReady:ze,install(y){const D=this;y.component("RouterLink",ru),y.component("RouterView",cu),y.config.globalProperties.$router=D,Object.defineProperty(y.config.globalProperties,"$route",{enumerable:!0,get:()=>qt(u)}),Lt&&!mt&&u.value===vt&&(mt=!0,j(o.location).catch(ce=>{}));const A={};for(const ce in vt)Object.defineProperty(A,ce,{get:()=>u.value[ce],enumerable:!0});y.provide(ss,D),y.provide(Ri,Pr(A)),y.provide(Ms,u);const B=y.unmount;gt.add(y),y.unmount=function(){gt.delete(y),gt.size<1&&(p=vt,ge&&ge(),ge=null,u.value=vt,mt=!1,K=!1),B()}}};function Ie(y){return y.reduce((D,A)=>D.then(()=>Y(A)),Promise.resolve())}return Rt}function fu(e,t){const s=[],n=[],o=[],r=Math.max(t.matched.length,e.matched.length);for(let i=0;iGt(p,a))?n.push(a):s.push(a));const u=e.matched[i];u&&(t.matched.find(p=>Gt(p,u))||o.push(u))}return[s,n,o]}function Ai(){return Ye(ss)}const os=ac("auth",()=>{const e=Z(null),t=Z(null),s=Z(!1),n=(a,u)=>{e.value=a,t.value=u,s.value=!0,localStorage.setItem("auth_token",u),localStorage.setItem("user",JSON.stringify(a))},o=()=>{e.value=null,t.value=null,s.value=!1,localStorage.removeItem("auth_token"),localStorage.removeItem("user")};return{user:e,token:t,isAuthenticated:s,login:n,logout:o,checkAuth:()=>{const a=localStorage.getItem("auth_token"),u=localStorage.getItem("user");a&&u?(t.value=a,e.value=JSON.parse(u),s.value=!0):o()},getAuthHeaders:()=>t.value?{"Content-Type":"application/json",Authorization:`Bearer ${t.value}`}:{}}}),Qt=(e,t)=>{const s=e.__vccOpts||e;for(const[n,o]of t)s[n]=o;return s},du={name:"Home",setup(){const e=Z({}),t=async()=>{try{const s=await fetch("/api/public/page-content");s.ok&&(e.value=await s.json())}catch(s){console.error("Failed to fetch page content:",s)}};return Yt(()=>{t()}),{content:e}}},hu={class:"home"},pu={class:"hero"},mu={class:"features"},gu={class:"feature-card"},vu={class:"feature-card"},_u={class:"feature-card"},bu={class:"feature-card"},yu={class:"cta"},wu={class:"cta-buttons"};function Su(e,t,s,n,o,r){const i=Nn("router-link");return q(),W("div",hu,[c("div",pu,[c("h1",null,F(n.content.home_hero_title||"Welkom bij Fiets Service Centrum"),1),c("p",null,F(n.content.home_hero_subtitle||"Professionele fietsreparatie en onderhoudsdiensten"),1)]),c("div",mu,[c("div",gu,[c("h3",null,F(n.content.home_feature_1_title||"🔧 Deskundige Reparaties"),1),c("p",null,F(n.content.home_feature_1_text||"Professionele fietsmonteurs met jarenlange ervaring"),1)]),c("div",vu,[c("h3",null,F(n.content.home_feature_2_title||"⚡ Snelle Service"),1),c("p",null,F(n.content.home_feature_2_text||"Snelle doorlooptijden voor de meeste reparaties"),1)]),c("div",_u,[c("h3",null,F(n.content.home_feature_3_title||"💰 Eerlijke Prijzen"),1),c("p",null,F(n.content.home_feature_3_text||"Concurrerende tarieven zonder verborgen kosten"),1)]),c("div",bu,[c("h3",null,F(n.content.home_feature_4_title||"📅 Eenvoudig Boeken"),1),c("p",null,F(n.content.home_feature_4_text||"Eenvoudig online boekingssysteem"),1)])]),c("div",yu,[c("h2",null,F(n.content.home_cta_title||"Klaar om je fiets te laten repareren?"),1),c("p",null,F(n.content.home_cta_subtitle||"Boek je afspraak online en krijg je fiets weer in topconditie."),1),c("div",wu,[be(i,{to:"/booking",class:"cta-button"},{default:tt(()=>[Se(F(n.content.home_cta_button_1_text||"Nu Service Boeken"),1)]),_:1}),be(i,{to:"/pricelist",class:"cta-button secondary"},{default:tt(()=>[Se(F(n.content.home_cta_button_2_text||"💰 Prijslijst Bekijken"),1)]),_:1})])])])}const ku=Qt(du,[["render",Su],["__scopeId","data-v-677cbdbe"]]),Cu={name:"Booking",setup(){const e=Z({name:"",address:"",place:"",email:"",phone:"",repair_description:"",requested_date:"",requested_time:""}),t=Z(!1),s=Z(""),n=Z(!1),o=Z(null),r=Z({}),i=Z(new Date),a=Z([]),u=["Zo","Ma","Di","Wo","Do","Vr","Za"],p=xe(()=>{const x=new Date;return x.setDate(x.getDate()+1),x.toISOString().split("T")[0]}),l=xe(()=>i.value.toLocaleDateString("nl-NL",{month:"long",year:"numeric"})),h=xe(()=>{const x=i.value.getFullYear(),ne=i.value.getMonth(),z=new Date(x,ne,1),Q=new Date(x,ne+1,0),Y=z.getDay(),oe=Q.getDay(),me=[];for(let ae=Y-1;ae>=0;ae--){const ge=new Date(x,ne,-ae);me.push(g(ge,!1))}for(let ae=1;ae<=Q.getDate();ae++){const ge=new Date(x,ne,ae);me.push(g(ge,!0))}for(let ae=1;ae<=6-oe;ae++){const ge=new Date(x,ne+1,ae);me.push(g(ge,!1))}return me}),g=(x,ne)=>{const z=x.toISOString().split("T")[0],Q=new Date,Y=new Date;Y.setDate(Y.getDate()+1);const oe=z===Q.toISOString().split("T")[0],me=znew Date(We.date).toISOString().split("T")[0]===z),ge=z===e.value.requested_date;return{date:z,day:x.getDate(),key:z,isCurrentMonth:ne,isToday:oe,isDisabled:me,isBlocked:ae,isSelected:ge}},v=async()=>{try{const x=await fetch("/api/public/blocked-dates");x.ok&&(a.value=await x.json())}catch(x){console.error("Failed to fetch blocked dates:",x)}},P=async()=>{try{const x=await fetch("/api/public/page-content");x.ok&&(r.value=await x.json())}catch(x){console.error("Failed to fetch page content:",x)}},O=()=>{i.value=new Date(i.value.getFullYear(),i.value.getMonth()-1,1)},G=()=>{i.value=new Date(i.value.getFullYear(),i.value.getMonth()+1,1)},R=x=>{x.isDisabled||x.isBlocked||(e.value.requested_date=x.date)},I=()=>!e.value.email&&!e.value.phone?(s.value="Geef alstublieft een e-mailadres of telefoonnummer op",!1):(s.value="",!0),V=async()=>{if(I()){t.value=!0,s.value="";try{const x=await fetch("/api/public/service-requests",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e.value)});if(!x.ok){const z=await x.json();throw new Error(z.message||"Aanvraag versturen mislukt")}const ne=await x.json();o.value=ne,n.value=!0,Object.keys(e.value).forEach(z=>{e.value[z]=""})}catch(x){s.value=x.message}finally{t.value=!1}}},j=()=>{n.value=!1,o.value=null};return Yt(()=>{const x=new Date;x.setDate(x.getDate()+1),e.value.requested_date=x.toISOString().split("T")[0],v(),P()}),{form:e,loading:t,formError:s,showSuccessModal:n,submittedRequest:o,content:r,minDate:p,submitForm:V,closeSuccessModal:j,currentDate:i,blockedDates:a,weekdays:u,calendarDates:h,currentMonthYear:l,previousMonth:O,nextMonth:G,selectDate:R}}},xu={class:"booking"},Eu={class:"booking-header"},Pu={class:"booking-form-container"},Ru={class:"form-row"},Au={class:"form-group"},Tu={class:"form-row"},Ou={class:"form-group"},Mu={class:"form-row"},Iu={class:"form-group"},Du={class:"form-row"},ju={class:"form-group"},Vu={class:"form-group"},Fu={class:"form-row"},Bu={class:"form-group full-width"},Lu={class:"form-row"},Nu={class:"form-group"},Hu={class:"custom-date-picker"},qu={class:"date-picker-header"},Uu={class:"current-month"},Ku={class:"date-picker-grid"},Wu=["onClick"],Gu={class:"form-group"},zu={key:0,class:"form-error"},Ju={class:"form-actions"},Yu=["disabled"],Qu={class:"modal-body"},Zu={class:"modal-footer"};function Xu(e,t,s,n,o,r){return q(),W("div",xu,[c("div",Eu,[c("h1",null,F(n.content.booking_header_title||"🚲 Boek Je Fiets Service"),1),c("p",null,F(n.content.booking_header_subtitle||"Vul het onderstaande formulier in om je fietsreparatie of onderhoud in te plannen"),1)]),c("div",Pu,[c("form",{onSubmit:t[10]||(t[10]=at((...i)=>n.submitForm&&n.submitForm(...i),["prevent"])),class:"booking-form"},[c("div",Ru,[c("div",Au,[t[14]||(t[14]=c("label",{for:"name"},"Volledige Naam *",-1)),ve(c("input",{type:"text",id:"name","onUpdate:modelValue":t[0]||(t[0]=i=>n.form.name=i),required:"",placeholder:"Voer je volledige naam in"},null,512),[[_e,n.form.name]])])]),c("div",Tu,[c("div",Ou,[t[15]||(t[15]=c("label",{for:"address"},"Adres *",-1)),ve(c("textarea",{id:"address","onUpdate:modelValue":t[1]||(t[1]=i=>n.form.address=i),required:"",placeholder:"Voer je volledige adres in",rows:"3"},null,512),[[_e,n.form.address]])])]),c("div",Mu,[c("div",Iu,[t[16]||(t[16]=c("label",{for:"place"},"Plaats *",-1)),ve(c("input",{type:"text",id:"place","onUpdate:modelValue":t[2]||(t[2]=i=>n.form.place=i),required:"",placeholder:"Voer je plaats in"},null,512),[[_e,n.form.place]])])]),c("div",Du,[c("div",ju,[t[17]||(t[17]=c("label",{for:"email"},"E-mail",-1)),ve(c("input",{type:"email",id:"email","onUpdate:modelValue":t[3]||(t[3]=i=>n.form.email=i),placeholder:"Voer je e-mailadres in"},null,512),[[_e,n.form.email]])]),c("div",Vu,[t[18]||(t[18]=c("label",{for:"phone"},"Telefoon",-1)),ve(c("input",{type:"tel",id:"phone","onUpdate:modelValue":t[4]||(t[4]=i=>n.form.phone=i),placeholder:"Voer je telefoonnummer in"},null,512),[[_e,n.form.phone]])])]),c("div",Fu,[c("div",Bu,[t[19]||(t[19]=c("label",{for:"repair_description"},"Wat moet er gerepareerd worden? *",-1)),ve(c("textarea",{id:"repair_description","onUpdate:modelValue":t[5]||(t[5]=i=>n.form.repair_description=i),required:"",placeholder:"Beschrijf het probleem met je fiets of welke service je nodig hebt",rows:"4"},null,512),[[_e,n.form.repair_description]])])]),c("div",Lu,[c("div",Nu,[t[20]||(t[20]=c("label",{for:"requested_date"},"Gewenste Datum *",-1)),c("div",Hu,[c("div",qu,[c("button",{type:"button",onClick:t[6]||(t[6]=(...i)=>n.previousMonth&&n.previousMonth(...i)),class:"nav-btn"},"‹"),c("span",Uu,F(n.currentMonthYear),1),c("button",{type:"button",onClick:t[7]||(t[7]=(...i)=>n.nextMonth&&n.nextMonth(...i)),class:"nav-btn"},"›")]),c("div",Ku,[(q(!0),W(Ce,null,St(n.weekdays,i=>(q(),W("div",{class:"weekday-header",key:i},F(i),1))),128)),(q(!0),W(Ce,null,St(n.calendarDates,i=>(q(),W("div",{key:i.key,class:Mt(["calendar-date",{"other-month":!i.isCurrentMonth,disabled:i.isDisabled,blocked:i.isBlocked,selected:i.isSelected,today:i.isToday}]),onClick:a=>n.selectDate(i)},F(i.day),11,Wu))),128))]),ve(c("input",{type:"hidden",id:"requested_date","onUpdate:modelValue":t[8]||(t[8]=i=>n.form.requested_date=i),required:""},null,512),[[_e,n.form.requested_date]])])]),c("div",Gu,[t[21]||(t[21]=c("label",{for:"requested_time"},"Gewenste Tijd *",-1)),ve(c("input",{type:"time",id:"requested_time","onUpdate:modelValue":t[9]||(t[9]=i=>n.form.requested_time=i),required:"",min:"08:00",max:"18:00"},null,512),[[_e,n.form.requested_time]])])]),n.formError?(q(),W("div",zu,F(n.formError),1)):Re("",!0),c("div",Ju,[c("button",{type:"submit",class:"submit-btn",disabled:n.loading},F(n.loading?"Versturen...":"Service Aanvraag Versturen"),9,Yu)])],32)]),n.showSuccessModal?(q(),W("div",{key:0,class:"modal-overlay",onClick:t[13]||(t[13]=(...i)=>n.closeSuccessModal&&n.closeSuccessModal(...i))},[c("div",{class:"modal-content",onClick:t[12]||(t[12]=at(()=>{},["stop"]))},[t[24]||(t[24]=c("div",{class:"modal-header"},[c("h3",null,"✅ Service Aanvraag Verzonden!")],-1)),c("div",Qu,[t[23]||(t[23]=c("p",null,"Bedankt voor je service aanvraag. We nemen binnenkort contact met je op om je afspraak te bevestigen.",-1)),c("p",null,[t[22]||(t[22]=c("strong",null,"Aanvraag ID:",-1)),Se(" "+F(n.submittedRequest.id),1)])]),c("div",Zu,[c("button",{onClick:t[11]||(t[11]=(...i)=>n.closeSuccessModal&&n.closeSuccessModal(...i)),class:"btn-primary"},"Sluiten")])])])):Re("",!0)])}const $u=Qt(Cu,[["render",Xu],["__scopeId","data-v-3d2c946f"]]),ef={name:"Admin",setup(){const e=Ai(),t=os(),s=Z("requests"),n=Z(!1),o=Z([]),r=Z([]),i=Z({}),a=Z([]),u=Z([]),p=Z(!1),l=Z(!1),h=Z(!1),g=Z(!1),v=Z(!1),P=Z(!1),O=Z(!1),G=Z(!1),R=Z(null),I=Z(null),V=Z(null),j=Z({date:"",reason:""}),x=Z({title:"",description:"",price:"",sort_order:0,is_active:!0}),ne=Z({message:""}),z=Z({message:""}),Q=Z([]),Y=Z(!1),oe=Z(!1),me=[{id:"requests",label:"Service Aanvragen"},{id:"blocked",label:"Geblokkeerde Data"},{id:"pricelist",label:"Prijslijst"},{id:"content",label:"Pagina Teksten"},{id:"settings",label:"Instellingen"}],ae=xe(()=>{const _=new Date;return _.setDate(_.getDate()+1),_.toISOString().split("T")[0]}),ge=_=>({pending:"In afwachting",confirmed:"Bevestigd",completed:"Voltooid",cancelled:"Geannuleerd"})[_]||_,We=_=>({email:"E-MAIL",sms:"SMS"})[_]||_.toUpperCase(),Ge=_=>({admin_to_customer:"Naar Klant",customer_to_admin:"Van Klant"})[_]||_,de=async()=>{try{await fetch("/api/logout",{method:"POST",headers:t.getAuthHeaders()})}catch(_){console.error("Logout error:",_)}finally{t.logout(),e.push("/login")}},K=async()=>{try{const _=await fetch("/api/service-requests",{headers:t.getAuthHeaders()});_.ok&&(o.value=await _.json())}catch(_){console.error("Failed to fetch requests:",_)}},te=async()=>{try{const _=await fetch("/api/blocked-dates",{headers:t.getAuthHeaders()});_.ok&&(r.value=await _.json())}catch(_){console.error("Failed to fetch blocked dates:",_)}},ze=async()=>{try{const _=await fetch("/api/settings",{headers:t.getAuthHeaders()});_.ok&&(await _.json()).forEach(X=>{i.value[X.key]=X.value})}catch(_){console.error("Failed to fetch settings:",_)}},He=async()=>{try{const _=await fetch("/api/admin/pricelist",{headers:t.getAuthHeaders()});_.ok&&(a.value=await _.json())}catch(_){console.error("Failed to fetch pricelist:",_)}},qe=async()=>{try{const _=await fetch("/api/page-content",{headers:t.getAuthHeaders()});_.ok&&(u.value=await _.json())}catch(_){console.error("Failed to fetch page content:",_)}},Ee=async()=>{n.value=!0,await K(),n.value=!1},mt=async _=>{O.value=!0,p.value=!0;try{const L=await fetch(`/api/service-requests/${_.id}`,{headers:t.getAuthHeaders()});if(L.ok){const X=await L.json();R.value={...X}}else{const X=o.value.find(Ve=>Ve.id===_.id);R.value=X?{...X}:{..._}}}catch(L){console.error("Failed to fetch latest request data:",L);const X=o.value.find(Ve=>Ve.id===_.id);R.value=X?{...X}:{..._}}finally{O.value=!1}},gt=()=>{p.value=!1,R.value=null},Rt=()=>{l.value=!1,I.value=null,j.value={date:"",reason:""}},Ie=()=>{h.value=!1,ne.value.message=""},y=()=>{g.value=!1,z.value.message=""},D=()=>{v.value=!1,Q.value=[]},A=()=>{P.value=!1,V.value=null,x.value={title:"",description:"",price:"",sort_order:0,is_active:!0}},B=_=>{R.value=_,h.value=!0},ce=_=>{R.value=_,g.value=!0},f=async _=>{R.value=_;try{const L=await fetch(`/api/service-requests/${_.id}/communications`,{headers:t.getAuthHeaders()});L.ok&&(Q.value=await L.json())}catch(L){console.error("Failed to fetch communications:",L)}v.value=!0},d=async()=>{if(ne.value.message.trim()){Y.value=!0;try{(await fetch(`/api/service-requests/${R.value.id}/send-email`,{method:"POST",headers:t.getAuthHeaders(),body:JSON.stringify({message:ne.value.message})})).ok&&(Ie(),await K())}catch(_){console.error("Failed to send email:",_)}finally{Y.value=!1}}},m=async()=>{if(z.value.message.trim()){oe.value=!0;try{(await fetch(`/api/service-requests/${R.value.id}/send-sms`,{method:"POST",headers:t.getAuthHeaders(),body:JSON.stringify({message:z.value.message})})).ok&&(y(),await K())}catch(_){console.error("Failed to send SMS:",_)}finally{oe.value=!1}}},w=_=>{I.value=_,j.value={date:_.date,reason:_.reason||""},l.value=!0},S=async()=>{try{const _=I.value?`/api/blocked-dates/${I.value.id}`:"/api/blocked-dates",L=I.value?"PUT":"POST";(await fetch(_,{method:L,headers:t.getAuthHeaders(),body:JSON.stringify(j.value)})).ok&&(Rt(),await te())}catch(_){console.error("Failed to save blocked date:",_)}},b=async _=>{if(confirm("Weet je zeker dat je deze geblokkeerde datum wilt verwijderen?"))try{(await fetch(`/api/blocked-dates/${_}`,{method:"DELETE",headers:t.getAuthHeaders()})).ok&&await te()}catch(L){console.error("Failed to delete blocked date:",L)}},T=async(_,L)=>{try{(await fetch(`/api/settings/key/${_}`,{method:"PUT",headers:t.getAuthHeaders(),body:JSON.stringify({value:L,description:""})})).ok&&console.log(`Setting ${_} updated successfully`)}catch(X){console.error("Failed to update setting:",X)}},E=async()=>{try{if((await fetch(`/api/service-requests/${R.value.id}`,{method:"PUT",headers:t.getAuthHeaders(),body:JSON.stringify({status:R.value.status})})).ok){const L=o.value.findIndex(X=>X.id===R.value.id);L!==-1&&(o.value[L].status=R.value.status),await K()}}catch(_){console.error("Failed to update request status:",_)}},C=async()=>{try{if((await fetch(`/api/service-requests/${R.value.id}`,{method:"PUT",headers:t.getAuthHeaders(),body:JSON.stringify({actual_repair_date:R.value.actual_repair_date})})).ok){const L=o.value.findIndex(X=>X.id===R.value.id);L!==-1&&(o.value[L].actual_repair_date=R.value.actual_repair_date),await K()}}catch(_){console.error("Failed to update request date:",_)}},k=async()=>{try{if((await fetch(`/api/service-requests/${R.value.id}`,{method:"PUT",headers:t.getAuthHeaders(),body:JSON.stringify({actual_repair_date:R.value.actual_repair_date,actual_repair_time:R.value.actual_repair_time})})).ok){const L=o.value.findIndex(X=>X.id===R.value.id);L!==-1&&(o.value[L].actual_repair_date=R.value.actual_repair_date,o.value[L].actual_repair_time=R.value.actual_repair_time),await K()}}catch(_){console.error("Failed to update request time:",_)}},H=_=>{V.value=_,x.value={..._},P.value=!0},M=async()=>{try{const _=V.value?`/api/pricelist/${V.value.id}`:"/api/pricelist",L=V.value?"PUT":"POST";(await fetch(_,{method:L,headers:t.getAuthHeaders(),body:JSON.stringify(x.value)})).ok&&(A(),await He())}catch(_){console.error("Failed to save pricelist item:",_)}},N=async _=>{if(confirm("Weet je zeker dat je dit prijslijst item wilt verwijderen?"))try{(await fetch(`/api/pricelist/${_}`,{method:"DELETE",headers:t.getAuthHeaders()})).ok&&await He()}catch(L){console.error("Failed to delete pricelist item:",L)}},J=_=>{const L=u.value.find(X=>X.key===_);return L?L.value:""},ee=(_,L)=>{const X=u.value.find(Ve=>Ve.key===_);X&&(X.value=L)},ue=async _=>{const L=u.value.find(X=>X.key===_);if(L)try{(await fetch(`/api/page-content/key/${_}`,{method:"PUT",headers:t.getAuthHeaders(),body:JSON.stringify({value:L.value,description:L.description})})).ok&&console.log(`Content ${_} updated successfully`)}catch(X){console.error("Failed to update page content:",X)}},re=(_,L)=>{if(!_)return"N/A";const Ve=new Date(_).toLocaleDateString("nl-NL");return L?`${Ve} ${L}`:Ve},Pe=_=>new Date(_).toISOString().split("T")[0];return Yt(()=>{t.checkAuth(),K(),te(),He(),qe(),ze()}),{activeTab:s,tabs:me,loading:n,requests:o,blockedDates:r,settings:i,pricelist:a,pageContent:u,user:xe(()=>t.user),showRequestModal:p,showAddBlockedDate:l,showEmailModal:h,showSmsModal:g,showCommunicationsModal:v,showAddPricelistItem:P,requestModalLoading:O,pricelistLoading:G,selectedRequest:R,editingBlockedDate:I,editingPricelistItem:V,blockedDateForm:j,pricelistForm:x,emailForm:ne,smsForm:z,communications:Q,emailLoading:Y,smsLoading:oe,minDate:ae,getStatusText:ge,getCommTypeText:We,getCommDirectionText:Ge,handleLogout:de,refreshRequests:Ee,viewRequest:mt,closeRequestModal:gt,closeBlockedDateModal:Rt,closePricelistModal:A,closeEmailModal:Ie,closeSmsModal:y,closeCommunicationsModal:D,sendEmail:B,sendSms:ce,viewCommunications:f,submitEmail:d,submitSms:m,editBlockedDate:w,saveBlockedDate:S,deleteBlockedDate:b,editPricelistItem:H,savePricelistItem:M,deletePricelistItem:N,updateSetting:T,updateRequestStatus:E,updateRequestDate:C,updateRequestTime:k,getContentValue:J,updateContentValue:ee,savePageContent:ue,formatDateTime:re,formatDate:Pe}}},tf={class:"admin"},nf={class:"admin-header"},sf={class:"admin-user-info"},of={class:"admin-tabs"},rf=["onClick"],lf={key:0,class:"tab-content"},af={class:"section-header"},cf=["disabled","title"],uf={class:"requests-table"},ff={key:0,class:"loading-row"},df={key:1,class:"empty-row"},hf={class:"cell"},pf={class:"cell"},mf={class:"cell"},gf={class:"cell"},vf={class:"cell actions"},_f=["onClick"],bf=["onClick","disabled"],yf=["onClick","disabled"],wf=["onClick"],Sf={key:1,class:"tab-content"},kf={class:"section-header"},Cf={class:"blocked-dates-list"},xf={class:"date-info"},Ef={class:"date"},Pf={key:0,class:"reason"},Rf={class:"date-actions"},Af=["onClick"],Tf=["onClick"],Of={key:2,class:"tab-content"},Mf={class:"section-header"},If={class:"pricelist-table"},Df={key:0,class:"loading-row"},jf={key:1,class:"empty-row"},Vf={class:"cell"},Ff={class:"cell"},Bf={class:"cell"},Lf={class:"cell"},Nf={class:"cell"},Hf={class:"cell actions"},qf=["onClick"],Uf=["onClick"],Kf={key:3,class:"tab-content"},Wf={class:"content-sections"},Gf={class:"content-section"},zf={class:"content-form"},Jf={class:"form-group"},Yf=["value"],Qf={class:"form-group"},Zf=["value"],Xf={class:"content-section"},$f={class:"content-form"},ed={class:"feature-group"},td={class:"form-group"},nd=["value"],sd={class:"form-group"},od=["value"],rd={class:"feature-group"},id={class:"form-group"},ld=["value"],ad={class:"form-group"},cd=["value"],ud={class:"feature-group"},fd={class:"form-group"},dd=["value"],hd={class:"form-group"},pd=["value"],md={class:"feature-group"},gd={class:"form-group"},vd=["value"],_d={class:"form-group"},bd=["value"],yd={class:"content-section"},wd={class:"content-form"},Sd={class:"form-group"},kd=["value"],Cd={class:"form-group"},xd=["value"],Ed={class:"form-group"},Pd=["value"],Rd={class:"form-group"},Ad=["value"],Td={class:"content-section"},Od={class:"content-form"},Md={class:"form-group"},Id=["value"],Dd={class:"form-group"},jd=["value"],Vd={key:4,class:"tab-content"},Fd={class:"settings-form"},Bd={class:"setting-group"},Ld={class:"setting-group"},Nd={class:"modal-header"},Hd={key:0,class:"modal-body"},qd={key:0,class:"loading-state"},Ud={key:1,class:"request-details"},Kd={class:"detail-row"},Wd={class:"detail-row"},Gd={class:"detail-row"},zd={class:"detail-row"},Jd={class:"detail-row"},Yd={class:"detail-row"},Qd={class:"detail-row"},Zd={class:"detail-row"},Xd={class:"detail-row"},$d={class:"detail-row"},eh={class:"modal-footer"},th={class:"modal-header"},nh={class:"modal-body"},sh={class:"form-group"},oh=["min"],rh={class:"form-group"},ih={class:"modal-footer"},lh={class:"modal-header"},ah={class:"modal-body"},ch={class:"form-group"},uh={class:"modal-footer"},fh=["disabled"],dh={class:"modal-header"},hh={class:"modal-body"},ph={class:"form-group"},mh={class:"modal-footer"},gh=["disabled"],vh={class:"modal-header"},_h={class:"modal-body"},bh={key:0,class:"no-communications"},yh={key:1,class:"communications-list"},wh={class:"comm-header"},Sh={class:"comm-type"},kh={class:"comm-direction"},Ch={class:"comm-date"},xh={class:"comm-message"},Eh={class:"modal-footer"},Ph={class:"modal-header"},Rh={class:"modal-body"},Ah={class:"form-group"},Th={class:"form-group"},Oh={class:"form-group"},Mh={class:"form-group"},Ih={class:"form-group"},Dh={class:"modal-footer"};function jh(e,t,s,n,o,r){var i,a,u,p;return q(),W("div",tf,[c("div",nf,[t[83]||(t[83]=c("h1",null,"🔧 Beheer Dashboard",-1)),t[84]||(t[84]=c("p",null,"Beheer fiets service aanvragen, geblokkeerde data en instellingen",-1)),c("div",sf,[c("span",null,"Ingelogd als: "+F((i=n.user)==null?void 0:i.name),1),c("button",{onClick:t[0]||(t[0]=(...l)=>n.handleLogout&&n.handleLogout(...l)),class:"logout-btn"},"Uitloggen")])]),c("div",of,[(q(!0),W(Ce,null,St(n.tabs,l=>(q(),W("button",{key:l.id,onClick:h=>n.activeTab=l.id,class:Mt(["tab-button",{active:n.activeTab===l.id}])},F(l.label),11,rf))),128))]),n.activeTab==="requests"?(q(),W("div",lf,[c("div",af,[t[85]||(t[85]=c("h2",null,"Service Aanvragen",-1)),c("button",{onClick:t[1]||(t[1]=(...l)=>n.refreshRequests&&n.refreshRequests(...l)),class:"refresh-btn",disabled:n.loading,title:n.loading?"Verversen...":"Verversen"},F((n.loading,"🔄")),9,cf)]),c("div",uf,[t[88]||(t[88]=bo('
ID
Naam
Datum/Tijd
Status
Acties
',1)),n.loading?(q(),W("div",ff,[...t[86]||(t[86]=[c("div",{class:"loading-text"},"Aanvragen laden...",-1)])])):n.requests.length===0?(q(),W("div",df,[...t[87]||(t[87]=[c("div",{class:"empty-text"},"Geen service aanvragen gevonden",-1)])])):(q(!0),W(Ce,{key:2},St(n.requests,l=>(q(),W("div",{class:"table-row",key:l.id},[c("div",hf,F(l.id),1),c("div",pf,F(l.name),1),c("div",mf,F(n.formatDateTime(l.requested_date,l.requested_time)),1),c("div",gf,[c("span",{class:Mt(["status-badge",l.status])},F(n.getStatusText(l.status)),3)]),c("div",vf,[c("button",{onClick:h=>n.viewRequest(l),class:"action-btn view",title:"Bekijken"}," 👁️ ",8,_f),c("button",{onClick:h=>n.sendEmail(l),class:"action-btn email",disabled:!l.email,title:"E-mail versturen"}," 📧 ",8,bf),c("button",{onClick:h=>n.sendSms(l),class:"action-btn sms",disabled:!l.phone,title:"SMS versturen"}," 📱 ",8,yf),c("button",{onClick:h=>n.viewCommunications(l),class:"action-btn comm",title:"Communicatie bekijken"}," 💬 ",8,wf)])]))),128))])])):Re("",!0),n.activeTab==="blocked"?(q(),W("div",Sf,[c("div",kf,[t[89]||(t[89]=c("h2",null,"Geblokkeerde Data",-1)),c("button",{onClick:t[2]||(t[2]=l=>n.showAddBlockedDate=!0),class:"add-btn",title:"Geblokkeerde Datum Toevoegen"},"➕")]),c("div",Cf,[(q(!0),W(Ce,null,St(n.blockedDates,l=>(q(),W("div",{key:l.id,class:"blocked-date-item"},[c("div",xf,[c("span",Ef,F(n.formatDate(l.date)),1),l.reason?(q(),W("span",Pf,F(l.reason),1)):Re("",!0)]),c("div",Rf,[c("button",{onClick:h=>n.editBlockedDate(l),class:"edit-btn",title:"Bewerken"},"✏️",8,Af),c("button",{onClick:h=>n.deleteBlockedDate(l.id),class:"delete-btn",title:"Verwijderen"},"🗑️",8,Tf)])]))),128))])])):Re("",!0),n.activeTab==="pricelist"?(q(),W("div",Of,[c("div",Mf,[t[90]||(t[90]=c("h2",null,"Prijslijst Beheer",-1)),c("button",{onClick:t[3]||(t[3]=l=>n.showAddPricelistItem=!0),class:"add-btn",title:"Prijslijst Item Toevoegen"},"➕")]),c("div",If,[t[93]||(t[93]=bo('
Titel
Beschrijving
Prijs
Volgorde
Status
Acties
',1)),n.pricelistLoading?(q(),W("div",Df,[...t[91]||(t[91]=[c("div",{class:"loading-text"},"Prijslijst laden...",-1)])])):n.pricelist.length===0?(q(),W("div",jf,[...t[92]||(t[92]=[c("div",{class:"empty-text"},"Geen prijslijst items gevonden",-1)])])):(q(!0),W(Ce,{key:2},St(n.pricelist,l=>(q(),W("div",{class:"table-row",key:l.id},[c("div",Vf,F(l.title),1),c("div",Ff,F(l.description),1),c("div",Bf,"€"+F(l.price),1),c("div",Lf,F(l.sort_order),1),c("div",Nf,[c("span",{class:Mt(["status-badge",l.is_active?"active":"inactive"])},F(l.is_active?"Actief":"Inactief"),3)]),c("div",Hf,[c("button",{onClick:h=>n.editPricelistItem(l),class:"action-btn edit",title:"Bewerken"},"✏️",8,qf),c("button",{onClick:h=>n.deletePricelistItem(l.id),class:"action-btn delete",title:"Verwijderen"},"🗑️",8,Uf)])]))),128))])])):Re("",!0),n.activeTab==="content"?(q(),W("div",Kf,[t[118]||(t[118]=c("div",{class:"section-header"},[c("h2",null,"Pagina Teksten Beheer")],-1)),c("div",Wf,[c("div",Gf,[t[96]||(t[96]=c("h3",null,"Openingspagina - Hero Sectie",-1)),c("div",zf,[c("div",Jf,[t[94]||(t[94]=c("label",null,"Hoofdtekst (Header)",-1)),c("input",{type:"text",value:n.getContentValue("home_hero_title"),onInput:t[4]||(t[4]=l=>n.updateContentValue("home_hero_title",l.target.value)),onBlur:t[5]||(t[5]=l=>n.savePageContent("home_hero_title"))},null,40,Yf)]),c("div",Qf,[t[95]||(t[95]=c("label",null,"Subtekst (Subheader)",-1)),c("input",{type:"text",value:n.getContentValue("home_hero_subtitle"),onInput:t[6]||(t[6]=l=>n.updateContentValue("home_hero_subtitle",l.target.value)),onBlur:t[7]||(t[7]=l=>n.savePageContent("home_hero_subtitle"))},null,40,Zf)])])]),c("div",Xf,[t[109]||(t[109]=c("h3",null,"Openingspagina - Panelen",-1)),c("div",$f,[c("div",ed,[t[99]||(t[99]=c("h4",null,"Paneel 1",-1)),c("div",td,[t[97]||(t[97]=c("label",null,"Koptekst",-1)),c("input",{type:"text",value:n.getContentValue("home_feature_1_title"),onInput:t[8]||(t[8]=l=>n.updateContentValue("home_feature_1_title",l.target.value)),onBlur:t[9]||(t[9]=l=>n.savePageContent("home_feature_1_title"))},null,40,nd)]),c("div",sd,[t[98]||(t[98]=c("label",null,"Onderschrift",-1)),c("textarea",{value:n.getContentValue("home_feature_1_text"),onInput:t[10]||(t[10]=l=>n.updateContentValue("home_feature_1_text",l.target.value)),onBlur:t[11]||(t[11]=l=>n.savePageContent("home_feature_1_text")),rows:"2"},null,40,od)])]),c("div",rd,[t[102]||(t[102]=c("h4",null,"Paneel 2",-1)),c("div",id,[t[100]||(t[100]=c("label",null,"Koptekst",-1)),c("input",{type:"text",value:n.getContentValue("home_feature_2_title"),onInput:t[12]||(t[12]=l=>n.updateContentValue("home_feature_2_title",l.target.value)),onBlur:t[13]||(t[13]=l=>n.savePageContent("home_feature_2_title"))},null,40,ld)]),c("div",ad,[t[101]||(t[101]=c("label",null,"Onderschrift",-1)),c("textarea",{value:n.getContentValue("home_feature_2_text"),onInput:t[14]||(t[14]=l=>n.updateContentValue("home_feature_2_text",l.target.value)),onBlur:t[15]||(t[15]=l=>n.savePageContent("home_feature_2_text")),rows:"2"},null,40,cd)])]),c("div",ud,[t[105]||(t[105]=c("h4",null,"Paneel 3",-1)),c("div",fd,[t[103]||(t[103]=c("label",null,"Koptekst",-1)),c("input",{type:"text",value:n.getContentValue("home_feature_3_title"),onInput:t[16]||(t[16]=l=>n.updateContentValue("home_feature_3_title",l.target.value)),onBlur:t[17]||(t[17]=l=>n.savePageContent("home_feature_3_title"))},null,40,dd)]),c("div",hd,[t[104]||(t[104]=c("label",null,"Onderschrift",-1)),c("textarea",{value:n.getContentValue("home_feature_3_text"),onInput:t[18]||(t[18]=l=>n.updateContentValue("home_feature_3_text",l.target.value)),onBlur:t[19]||(t[19]=l=>n.savePageContent("home_feature_3_text")),rows:"2"},null,40,pd)])]),c("div",md,[t[108]||(t[108]=c("h4",null,"Paneel 4",-1)),c("div",gd,[t[106]||(t[106]=c("label",null,"Koptekst",-1)),c("input",{type:"text",value:n.getContentValue("home_feature_4_title"),onInput:t[20]||(t[20]=l=>n.updateContentValue("home_feature_4_title",l.target.value)),onBlur:t[21]||(t[21]=l=>n.savePageContent("home_feature_4_title"))},null,40,vd)]),c("div",_d,[t[107]||(t[107]=c("label",null,"Onderschrift",-1)),c("textarea",{value:n.getContentValue("home_feature_4_text"),onInput:t[22]||(t[22]=l=>n.updateContentValue("home_feature_4_text",l.target.value)),onBlur:t[23]||(t[23]=l=>n.savePageContent("home_feature_4_text")),rows:"2"},null,40,bd)])])])]),c("div",yd,[t[114]||(t[114]=c("h3",null,"Openingspagina - Knoppen Container",-1)),c("div",wd,[c("div",Sd,[t[110]||(t[110]=c("label",null,"Hoofdtekst",-1)),c("input",{type:"text",value:n.getContentValue("home_cta_title"),onInput:t[24]||(t[24]=l=>n.updateContentValue("home_cta_title",l.target.value)),onBlur:t[25]||(t[25]=l=>n.savePageContent("home_cta_title"))},null,40,kd)]),c("div",Cd,[t[111]||(t[111]=c("label",null,"Subtekst",-1)),c("textarea",{value:n.getContentValue("home_cta_subtitle"),onInput:t[26]||(t[26]=l=>n.updateContentValue("home_cta_subtitle",l.target.value)),onBlur:t[27]||(t[27]=l=>n.savePageContent("home_cta_subtitle")),rows:"2"},null,40,xd)]),c("div",Ed,[t[112]||(t[112]=c("label",null,"Knop 1 Tekst",-1)),c("input",{type:"text",value:n.getContentValue("home_cta_button_1_text"),onInput:t[28]||(t[28]=l=>n.updateContentValue("home_cta_button_1_text",l.target.value)),onBlur:t[29]||(t[29]=l=>n.savePageContent("home_cta_button_1_text"))},null,40,Pd)]),c("div",Rd,[t[113]||(t[113]=c("label",null,"Knop 2 Tekst",-1)),c("input",{type:"text",value:n.getContentValue("home_cta_button_2_text"),onInput:t[30]||(t[30]=l=>n.updateContentValue("home_cta_button_2_text",l.target.value)),onBlur:t[31]||(t[31]=l=>n.savePageContent("home_cta_button_2_text"))},null,40,Ad)])])]),c("div",Td,[t[117]||(t[117]=c("h3",null,"Boekingspagina - Header",-1)),c("div",Od,[c("div",Md,[t[115]||(t[115]=c("label",null,"Hoofdtekst (Header)",-1)),c("input",{type:"text",value:n.getContentValue("booking_header_title"),onInput:t[32]||(t[32]=l=>n.updateContentValue("booking_header_title",l.target.value)),onBlur:t[33]||(t[33]=l=>n.savePageContent("booking_header_title"))},null,40,Id)]),c("div",Dd,[t[116]||(t[116]=c("label",null,"Onderschrift",-1)),c("textarea",{value:n.getContentValue("booking_header_subtitle"),onInput:t[34]||(t[34]=l=>n.updateContentValue("booking_header_subtitle",l.target.value)),onBlur:t[35]||(t[35]=l=>n.savePageContent("booking_header_subtitle")),rows:"2"},null,40,jd)])])])])])):Re("",!0),n.activeTab==="settings"?(q(),W("div",Vd,[t[121]||(t[121]=c("div",{class:"section-header"},[c("h2",null,"Applicatie Instellingen")],-1)),c("div",Fd,[c("div",Bd,[t[119]||(t[119]=c("label",{for:"admin_email"},"Beheer Notificatie E-mail",-1)),ve(c("input",{type:"email",id:"admin_email","onUpdate:modelValue":t[36]||(t[36]=l=>n.settings.admin_notification_email=l),placeholder:"admin@voorbeeld.com"},null,512),[[_e,n.settings.admin_notification_email]]),c("button",{onClick:t[37]||(t[37]=l=>n.updateSetting("admin_notification_email",n.settings.admin_notification_email)),class:"save-btn",title:"Opslaan"}," 💾 ")]),c("div",Ld,[t[120]||(t[120]=c("label",{for:"business_name"},"Bedrijfsnaam",-1)),ve(c("input",{type:"text",id:"business_name","onUpdate:modelValue":t[38]||(t[38]=l=>n.settings.business_name=l),placeholder:"Fiets Service Centrum"},null,512),[[_e,n.settings.business_name]]),c("button",{onClick:t[39]||(t[39]=l=>n.updateSetting("business_name",n.settings.business_name)),class:"save-btn",title:"Opslaan"}," 💾 ")])])])):Re("",!0),n.showRequestModal?(q(),W("div",{key:5,class:"modal-overlay",onClick:t[49]||(t[49]=(...l)=>n.closeRequestModal&&n.closeRequestModal(...l))},[c("div",{class:"modal-content large",onClick:t[48]||(t[48]=at(()=>{},["stop"]))},[c("div",Nd,[t[122]||(t[122]=c("h3",null,"Service Aanvraag Details",-1)),c("button",{onClick:t[40]||(t[40]=(...l)=>n.closeRequestModal&&n.closeRequestModal(...l)),class:"close-btn",title:"Sluiten"},"×")]),n.selectedRequest?(q(),W("div",Hd,[n.requestModalLoading?(q(),W("div",qd,[...t[123]||(t[123]=[c("div",{class:"loading-spinner"},null,-1),c("p",null,"Gegevens laden...",-1)])])):(q(),W("div",Ud,[c("div",Kd,[t[124]||(t[124]=c("strong",null,"Naam:",-1)),Se(" "+F(n.selectedRequest.name),1)]),c("div",Wd,[t[125]||(t[125]=c("strong",null,"Adres:",-1)),Se(" "+F(n.selectedRequest.address),1)]),c("div",Gd,[t[126]||(t[126]=c("strong",null,"Plaats:",-1)),Se(" "+F(n.selectedRequest.place),1)]),c("div",zd,[t[127]||(t[127]=c("strong",null,"E-mail:",-1)),Se(" "+F(n.selectedRequest.email||"Niet opgegeven"),1)]),c("div",Jd,[t[128]||(t[128]=c("strong",null,"Telefoon:",-1)),Se(" "+F(n.selectedRequest.phone||"Niet opgegeven"),1)]),c("div",Yd,[t[129]||(t[129]=c("strong",null,"Reparatie Beschrijving:",-1)),Se(" "+F(n.selectedRequest.repair_description),1)]),c("div",Qd,[t[130]||(t[130]=c("strong",null,"Gewenste Datum/Tijd:",-1)),Se(" "+F(n.formatDateTime(n.selectedRequest.requested_date,n.selectedRequest.requested_time)),1)]),c("div",Zd,[t[132]||(t[132]=c("strong",null,"Status:",-1)),ve(c("select",{"onUpdate:modelValue":t[41]||(t[41]=l=>n.selectedRequest.status=l),onChange:t[42]||(t[42]=(...l)=>n.updateRequestStatus&&n.updateRequestStatus(...l))},[...t[131]||(t[131]=[c("option",{value:"pending"},"In afwachting",-1),c("option",{value:"confirmed"},"Bevestigd",-1),c("option",{value:"completed"},"Voltooid",-1),c("option",{value:"cancelled"},"Geannuleerd",-1)])],544),[[Ja,n.selectedRequest.status]])]),c("div",Xd,[t[133]||(t[133]=c("strong",null,"Werkelijke Reparatie Datum:",-1)),ve(c("input",{type:"date","onUpdate:modelValue":t[43]||(t[43]=l=>n.selectedRequest.actual_repair_date=l),onChange:t[44]||(t[44]=(...l)=>n.updateRequestDate&&n.updateRequestDate(...l))},null,544),[[_e,n.selectedRequest.actual_repair_date]])]),c("div",$d,[t[134]||(t[134]=c("strong",null,"Werkelijke Reparatie Tijd:",-1)),ve(c("input",{type:"time","onUpdate:modelValue":t[45]||(t[45]=l=>n.selectedRequest.actual_repair_time=l),onChange:t[46]||(t[46]=(...l)=>n.updateRequestTime&&n.updateRequestTime(...l))},null,544),[[_e,n.selectedRequest.actual_repair_time]])])]))])):Re("",!0),c("div",eh,[c("button",{onClick:t[47]||(t[47]=(...l)=>n.closeRequestModal&&n.closeRequestModal(...l)),class:"btn-primary"},"Sluiten")])])])):Re("",!0),n.showAddBlockedDate?(q(),W("div",{key:6,class:"modal-overlay",onClick:t[56]||(t[56]=(...l)=>n.closeBlockedDateModal&&n.closeBlockedDateModal(...l))},[c("div",{class:"modal-content",onClick:t[55]||(t[55]=at(()=>{},["stop"]))},[c("div",th,[c("h3",null,F(n.editingBlockedDate?"Bewerken":"Toevoegen")+" Geblokkeerde Datum",1),c("button",{onClick:t[50]||(t[50]=(...l)=>n.closeBlockedDateModal&&n.closeBlockedDateModal(...l)),class:"close-btn",title:"Sluiten"},"×")]),c("div",nh,[c("div",sh,[t[135]||(t[135]=c("label",{for:"blocked_date"},"Datum",-1)),ve(c("input",{type:"date",id:"blocked_date","onUpdate:modelValue":t[51]||(t[51]=l=>n.blockedDateForm.date=l),min:n.minDate},null,8,oh),[[_e,n.blockedDateForm.date]])]),c("div",rh,[t[136]||(t[136]=c("label",{for:"blocked_reason"},"Reden (Optioneel)",-1)),ve(c("textarea",{id:"blocked_reason","onUpdate:modelValue":t[52]||(t[52]=l=>n.blockedDateForm.reason=l),rows:"3"},null,512),[[_e,n.blockedDateForm.reason]])])]),c("div",ih,[c("button",{onClick:t[53]||(t[53]=(...l)=>n.saveBlockedDate&&n.saveBlockedDate(...l)),class:"btn-primary"},"Opslaan"),c("button",{onClick:t[54]||(t[54]=(...l)=>n.closeBlockedDateModal&&n.closeBlockedDateModal(...l)),class:"btn-secondary"},"Annuleren")])])])):Re("",!0),n.showEmailModal?(q(),W("div",{key:7,class:"modal-overlay",onClick:t[62]||(t[62]=(...l)=>n.closeEmailModal&&n.closeEmailModal(...l))},[c("div",{class:"modal-content",onClick:t[61]||(t[61]=at(()=>{},["stop"]))},[c("div",lh,[c("h3",null,"E-mail Versturen naar "+F((a=n.selectedRequest)==null?void 0:a.name),1),c("button",{onClick:t[57]||(t[57]=(...l)=>n.closeEmailModal&&n.closeEmailModal(...l)),class:"close-btn",title:"Sluiten"},"×")]),c("div",ah,[c("div",ch,[t[137]||(t[137]=c("label",{for:"email_message"},"Bericht",-1)),ve(c("textarea",{id:"email_message","onUpdate:modelValue":t[58]||(t[58]=l=>n.emailForm.message=l),rows:"6",placeholder:"Voer je bericht in..."},null,512),[[_e,n.emailForm.message]])])]),c("div",uh,[c("button",{onClick:t[59]||(t[59]=(...l)=>n.submitEmail&&n.submitEmail(...l)),class:"btn-primary",disabled:n.emailLoading},F(n.emailLoading?"Versturen...":"E-mail Versturen"),9,fh),c("button",{onClick:t[60]||(t[60]=(...l)=>n.closeEmailModal&&n.closeEmailModal(...l)),class:"btn-secondary"},"Annuleren")])])])):Re("",!0),n.showSmsModal?(q(),W("div",{key:8,class:"modal-overlay",onClick:t[68]||(t[68]=(...l)=>n.closeSmsModal&&n.closeSmsModal(...l))},[c("div",{class:"modal-content",onClick:t[67]||(t[67]=at(()=>{},["stop"]))},[c("div",dh,[c("h3",null,"SMS Versturen naar "+F((u=n.selectedRequest)==null?void 0:u.name),1),c("button",{onClick:t[63]||(t[63]=(...l)=>n.closeSmsModal&&n.closeSmsModal(...l)),class:"close-btn",title:"Sluiten"},"×")]),c("div",hh,[c("div",ph,[t[138]||(t[138]=c("label",{for:"sms_message"},"Bericht",-1)),ve(c("textarea",{id:"sms_message","onUpdate:modelValue":t[64]||(t[64]=l=>n.smsForm.message=l),rows:"6",placeholder:"Voer je bericht in..."},null,512),[[_e,n.smsForm.message]])])]),c("div",mh,[c("button",{onClick:t[65]||(t[65]=(...l)=>n.submitSms&&n.submitSms(...l)),class:"btn-primary",disabled:n.smsLoading},F(n.smsLoading?"Versturen...":"SMS Versturen"),9,gh),c("button",{onClick:t[66]||(t[66]=(...l)=>n.closeSmsModal&&n.closeSmsModal(...l)),class:"btn-secondary"},"Annuleren")])])])):Re("",!0),n.showCommunicationsModal?(q(),W("div",{key:9,class:"modal-overlay",onClick:t[72]||(t[72]=(...l)=>n.closeCommunicationsModal&&n.closeCommunicationsModal(...l))},[c("div",{class:"modal-content large",onClick:t[71]||(t[71]=at(()=>{},["stop"]))},[c("div",vh,[c("h3",null,"Communicatie Geschiedenis - "+F((p=n.selectedRequest)==null?void 0:p.name),1),c("button",{onClick:t[69]||(t[69]=(...l)=>n.closeCommunicationsModal&&n.closeCommunicationsModal(...l)),class:"close-btn",title:"Sluiten"},"×")]),c("div",_h,[n.communications.length===0?(q(),W("div",bh," Geen communicatie gevonden voor deze aanvraag. ")):(q(),W("div",yh,[(q(!0),W(Ce,null,St(n.communications,l=>(q(),W("div",{key:l.id,class:"communication-item"},[c("div",wh,[c("span",Sh,F(n.getCommTypeText(l.type)),1),c("span",kh,F(n.getCommDirectionText(l.direction)),1),c("span",Ch,F(n.formatDateTime(l.created_at)),1)]),c("div",xh,F(l.message),1)]))),128))]))]),c("div",Eh,[c("button",{onClick:t[70]||(t[70]=(...l)=>n.closeCommunicationsModal&&n.closeCommunicationsModal(...l)),class:"btn-primary"},"Sluiten")])])])):Re("",!0),n.showAddPricelistItem?(q(),W("div",{key:10,class:"modal-overlay",onClick:t[82]||(t[82]=(...l)=>n.closePricelistModal&&n.closePricelistModal(...l))},[c("div",{class:"modal-content",onClick:t[81]||(t[81]=at(()=>{},["stop"]))},[c("div",Ph,[c("h3",null,F(n.editingPricelistItem?"Bewerken":"Toevoegen")+" Prijslijst Item",1),c("button",{onClick:t[73]||(t[73]=(...l)=>n.closePricelistModal&&n.closePricelistModal(...l)),class:"close-btn",title:"Sluiten"},"×")]),c("div",Rh,[c("div",Ah,[t[139]||(t[139]=c("label",{for:"pricelist_title"},"Titel",-1)),ve(c("input",{type:"text",id:"pricelist_title","onUpdate:modelValue":t[74]||(t[74]=l=>n.pricelistForm.title=l),placeholder:"Bijv. Banden vervangen"},null,512),[[_e,n.pricelistForm.title]])]),c("div",Th,[t[140]||(t[140]=c("label",{for:"pricelist_description"},"Beschrijving",-1)),ve(c("textarea",{id:"pricelist_description","onUpdate:modelValue":t[75]||(t[75]=l=>n.pricelistForm.description=l),rows:"3",placeholder:"Beschrijving van de service"},null,512),[[_e,n.pricelistForm.description]])]),c("div",Oh,[t[141]||(t[141]=c("label",{for:"pricelist_price"},"Prijs (€)",-1)),ve(c("input",{type:"number",id:"pricelist_price","onUpdate:modelValue":t[76]||(t[76]=l=>n.pricelistForm.price=l),step:"0.01",min:"0",placeholder:"25.00"},null,512),[[_e,n.pricelistForm.price]])]),c("div",Mh,[t[142]||(t[142]=c("label",{for:"pricelist_sort_order"},"Volgorde",-1)),ve(c("input",{type:"number",id:"pricelist_sort_order","onUpdate:modelValue":t[77]||(t[77]=l=>n.pricelistForm.sort_order=l),min:"0",placeholder:"1"},null,512),[[_e,n.pricelistForm.sort_order]])]),c("div",Ih,[c("label",null,[ve(c("input",{type:"checkbox","onUpdate:modelValue":t[78]||(t[78]=l=>n.pricelistForm.is_active=l)},null,512),[[za,n.pricelistForm.is_active]]),t[143]||(t[143]=Se(" Actief ",-1))])])]),c("div",Dh,[c("button",{onClick:t[79]||(t[79]=(...l)=>n.savePricelistItem&&n.savePricelistItem(...l)),class:"btn-primary"},"Opslaan"),c("button",{onClick:t[80]||(t[80]=(...l)=>n.closePricelistModal&&n.closePricelistModal(...l)),class:"btn-secondary"},"Annuleren")])])])):Re("",!0)])}const Vh=Qt(ef,[["render",jh],["__scopeId","data-v-c28c01c6"]]),Fh={name:"Login",setup(){const e=Ai(),t=os(),s=Z({email:"",password:""}),n=Z(!1),o=Z("");return{form:s,loading:n,error:o,handleLogin:async()=>{n.value=!0,o.value="";try{const i=await fetch("/api/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s.value)});if(!i.ok){const u=await i.json();throw new Error(u.message||"Inloggen mislukt")}const a=await i.json();t.login(a.user,a.token),e.push("/admin")}catch(i){o.value=i.message}finally{n.value=!1}}}}},Bh={class:"login"},Lh={class:"login-container"},Nh={class:"form-group"},Hh=["disabled"],qh={class:"form-group"},Uh=["disabled"],Kh={key:0,class:"form-error"},Wh=["disabled"];function Gh(e,t,s,n,o,r){return q(),W("div",Bh,[c("div",Lh,[t[5]||(t[5]=c("div",{class:"login-header"},[c("h1",null,"🔐 Beheerder Login"),c("p",null,"Log in om toegang te krijgen tot het beheerpaneel")],-1)),c("form",{onSubmit:t[2]||(t[2]=at((...i)=>n.handleLogin&&n.handleLogin(...i),["prevent"])),class:"login-form"},[c("div",Nh,[t[3]||(t[3]=c("label",{for:"email"},"E-mail",-1)),ve(c("input",{type:"email",id:"email","onUpdate:modelValue":t[0]||(t[0]=i=>n.form.email=i),required:"",placeholder:"admin@fietservice.nl",disabled:n.loading},null,8,Hh),[[_e,n.form.email]])]),c("div",qh,[t[4]||(t[4]=c("label",{for:"password"},"Wachtwoord",-1)),ve(c("input",{type:"password",id:"password","onUpdate:modelValue":t[1]||(t[1]=i=>n.form.password=i),required:"",placeholder:"Voer je wachtwoord in",disabled:n.loading},null,8,Uh),[[_e,n.form.password]])]),n.error?(q(),W("div",Kh,F(n.error),1)):Re("",!0),c("button",{type:"submit",class:"login-btn",disabled:n.loading},F(n.loading?"Inloggen...":"Inloggen"),9,Wh)],32)])])}const zh=Qt(Fh,[["render",Gh],["__scopeId","data-v-2b41928d"]]),Jh={name:"Pricelist",setup(){const e=Z([]),t=Z(!0),s=async()=>{try{const n=await fetch("/api/pricelist");n.ok&&(e.value=await n.json())}catch(n){console.error("Failed to fetch pricelist:",n)}finally{t.value=!1}};return Yt(()=>{s()}),{pricelist:e,loading:t}}},Yh={class:"pricelist"},Qh={class:"pricelist-header"},Zh={key:0,class:"loading-state"},Xh={key:1,class:"empty-state"},$h={key:2,class:"pricelist-grid"},ep={class:"price-header"},tp={class:"price"},np={class:"description"},sp={class:"cta-section"};function op(e,t,s,n,o,r){const i=Nn("router-link");return q(),W("div",Yh,[c("div",Qh,[t[1]||(t[1]=c("h1",null,"💰 Prijslijst",-1)),t[2]||(t[2]=c("p",null,"Transparante prijzen voor al onze fiets service diensten",-1)),be(i,{to:"/",class:"back-btn"},{default:tt(()=>[...t[0]||(t[0]=[Se("← Terug naar Home",-1)])]),_:1})]),n.loading?(q(),W("div",Zh,[...t[3]||(t[3]=[c("div",{class:"loading-spinner"},null,-1),c("p",null,"Prijzen laden...",-1)])])):n.pricelist.length===0?(q(),W("div",Xh,[...t[4]||(t[4]=[c("p",null,"Geen prijzen beschikbaar op dit moment.",-1)])])):(q(),W("div",$h,[(q(!0),W(Ce,null,St(n.pricelist,a=>(q(),W("div",{key:a.id,class:"price-card"},[c("div",ep,[c("h3",null,F(a.title),1),c("div",tp,"€"+F(a.price),1)]),c("p",np,F(a.description),1)]))),128))])),c("div",sp,[t[6]||(t[6]=c("h2",null,"Klaar om je afspraak te boeken?",-1)),t[7]||(t[7]=c("p",null,"Boek nu je service afspraak online!",-1)),be(i,{to:"/booking",class:"cta-button"},{default:tt(()=>[...t[5]||(t[5]=[Se("Nu Boeken",-1)])]),_:1})])])}const rp=Qt(Jh,[["render",op],["__scopeId","data-v-5946fc5a"]]),ip=[{path:"/",name:"Home",component:ku},{path:"/pricelist",name:"Pricelist",component:rp},{path:"/booking",name:"Booking",component:$u},{path:"/login",name:"Login",component:zh},{path:"/admin",name:"Admin",component:Vh,meta:{requiresAuth:!0}}],Ti=uu({history:Lc(),routes:ip});Ti.beforeEach((e,t,s)=>{if(e.meta.requiresAuth&&!os().isAuthenticated){s("/login");return}s()});const lp="/images/bikeservice_logo_navbar.svg",ap={name:"App",setup(){const e=os();return Yt(()=>{e.checkAuth()}),{isAuthenticated:e.isAuthenticated}}},cp={id:"app"},up={class:"navbar"},fp={class:"nav-container"},dp={class:"nav-menu"},hp={class:"main-content"};function pp(e,t,s,n,o,r){const i=Nn("router-link"),a=Nn("router-view");return q(),W("div",cp,[c("nav",up,[c("div",fp,[be(i,{to:"/",class:"nav-logo"},{default:tt(()=>[...t[0]||(t[0]=[c("img",{src:lp,alt:"Bike Service Logo",class:"logo-image"},null,-1)])]),_:1}),c("div",dp,[be(i,{to:"/",class:"nav-link"},{default:tt(()=>[...t[1]||(t[1]=[Se("Home",-1)])]),_:1}),be(i,{to:"/booking",class:"nav-link"},{default:tt(()=>[...t[2]||(t[2]=[Se("Service Boeken",-1)])]),_:1}),n.isAuthenticated?(q(),xs(i,{key:0,to:"/admin",class:"nav-link"},{default:tt(()=>[...t[3]||(t[3]=[Se("Beheer",-1)])]),_:1})):(q(),xs(i,{key:1,to:"/login",class:"nav-link"},{default:tt(()=>[...t[4]||(t[4]=[Se("Beheer Login",-1)])]),_:1}))])])]),c("main",hp,[be(a)])])}const mp=Qt(ap,[["render",pp]]),$s=$a(mp),gp=nc();$s.use(gp);$s.use(Ti);$s.mount("#app"); diff --git a/backend/public/assets/index-DAYhzhBJ.css b/backend/public/assets/index-DAYhzhBJ.css new file mode 100644 index 0000000..f6cc87a --- /dev/null +++ b/backend/public/assets/index-DAYhzhBJ.css @@ -0,0 +1 @@ +.home[data-v-677cbdbe]{text-align:center}.hero[data-v-677cbdbe]{background:linear-gradient(135deg,var(--primary-color) 0%,var(--primary-light) 100%);color:#fff;padding:4rem 2rem;border-radius:15px;margin-bottom:3rem;box-shadow:0 4px 20px #2c5f5d4d}.hero h1[data-v-677cbdbe]{font-size:3rem;margin-bottom:1rem}.hero p[data-v-677cbdbe]{font-size:1.2rem;opacity:.9}.features[data-v-677cbdbe]{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:2rem;margin-bottom:3rem}.feature-card[data-v-677cbdbe]{background:#fff;padding:2rem;border-radius:10px;box-shadow:0 4px 15px #0000001a;transition:transform .3s ease}.feature-card[data-v-677cbdbe]:hover{transform:translateY(-5px)}.feature-card h3[data-v-677cbdbe]{color:var(--primary-color);margin-bottom:1rem;font-size:1.3rem}.feature-card p[data-v-677cbdbe]{color:var(--text-gray);line-height:1.6}.cta[data-v-677cbdbe]{background:linear-gradient(135deg,#f8f9fa,#fff);padding:3rem 2rem;border-radius:15px;border:3px solid var(--primary-color);box-shadow:0 4px 20px #2c5f5d26}.cta h2[data-v-677cbdbe]{color:var(--primary-color);margin-bottom:1rem}.cta p[data-v-677cbdbe]{color:var(--text-gray);font-size:1.1rem;margin-bottom:2rem}.cta-buttons[data-v-677cbdbe]{display:flex;gap:1rem;justify-content:center}.cta-button[data-v-677cbdbe]{display:inline-block;background:var(--primary-color);color:#fff;padding:1rem 2rem;text-decoration:none;border-radius:10px;font-size:1.1rem;font-weight:700;transition:all .3s ease;box-shadow:0 4px 10px #2c5f5d4d}.cta-button[data-v-677cbdbe]:hover{background:var(--primary-dark);transform:translateY(-2px);box-shadow:0 6px 15px #2c5f5d66}.cta-button.secondary[data-v-677cbdbe]{background:var(--secondary-color);box-shadow:0 4px 10px #8b6f474d}.cta-button.secondary[data-v-677cbdbe]:hover{background:var(--secondary-dark);box-shadow:0 6px 15px #8b6f4766}.booking[data-v-3d2c946f]{max-width:800px;margin:0 auto}.booking-header[data-v-3d2c946f]{text-align:center;margin-bottom:3rem}.booking-header h1[data-v-3d2c946f]{color:var(--primary-color);font-size:2.5rem;margin-bottom:1rem}.booking-header p[data-v-3d2c946f]{color:var(--text-gray);font-size:1.2rem}.booking-form-container[data-v-3d2c946f]{background:#fff;border-radius:15px;padding:2rem;box-shadow:0 4px 15px #0000001a}.booking-form[data-v-3d2c946f]{display:flex;flex-direction:column;gap:1.5rem}.form-row[data-v-3d2c946f]{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem}.form-row .full-width[data-v-3d2c946f]{grid-column:1 / -1}.form-group[data-v-3d2c946f]{display:flex;flex-direction:column}.form-group label[data-v-3d2c946f]{font-weight:700;color:var(--primary-color);margin-bottom:.5rem}.form-group input[data-v-3d2c946f],.form-group textarea[data-v-3d2c946f]{padding:.75rem;border:2px solid #e1e8ed;border-radius:8px;font-size:1rem;transition:border-color .3s ease}.form-group input[data-v-3d2c946f]:focus,.form-group textarea[data-v-3d2c946f]:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 3px #2c5f5d1a}.form-group textarea[data-v-3d2c946f]{resize:vertical;min-height:80px}.custom-date-picker[data-v-3d2c946f]{border:2px solid #e1e8ed;border-radius:8px;overflow:hidden;background:#fff}.date-picker-header[data-v-3d2c946f]{display:flex;justify-content:space-between;align-items:center;padding:1rem;background:#f8f9fa;border-bottom:1px solid #e1e8ed}.nav-btn[data-v-3d2c946f]{background:none;border:none;font-size:1.5rem;cursor:pointer;padding:.5rem;border-radius:4px;transition:background-color .3s ease}.nav-btn[data-v-3d2c946f]:hover{background:#e1e8ed}.current-month[data-v-3d2c946f]{font-weight:700;color:var(--primary-color);text-transform:capitalize}.date-picker-grid[data-v-3d2c946f]{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:#e1e8ed}.weekday-header[data-v-3d2c946f]{background:#f8f9fa;padding:.75rem;text-align:center;font-weight:700;color:var(--primary-color);font-size:.875rem}.calendar-date[data-v-3d2c946f]{background:#fff;padding:.75rem;text-align:center;cursor:pointer;transition:all .3s ease;border:none;font-size:.875rem}.calendar-date[data-v-3d2c946f]:hover:not(.disabled):not(.blocked){background:#e3f2fd}.calendar-date.other-month[data-v-3d2c946f]{color:#bdc3c7;background:#f8f9fa}.calendar-date.disabled[data-v-3d2c946f]{color:#bdc3c7;background:#f8f9fa;cursor:not-allowed}.calendar-date.blocked[data-v-3d2c946f]{color:#dc3545;background:#f8d7da;cursor:not-allowed;position:relative}.calendar-date.blocked[data-v-3d2c946f]:after{content:"🚫";position:absolute;top:2px;right:2px;font-size:.75rem}.calendar-date.selected[data-v-3d2c946f]{background:var(--primary-color);color:#fff;font-weight:700}.calendar-date.today[data-v-3d2c946f]{font-weight:700;color:var(--primary-color);border:2px solid var(--primary-color)}.calendar-date.today.selected[data-v-3d2c946f]{color:#fff}.form-error[data-v-3d2c946f]{background:#fee;color:#c53030;padding:1rem;border-radius:8px;border:1px solid #feb2b2;text-align:center}.form-actions[data-v-3d2c946f]{text-align:center;margin-top:1rem}.submit-btn[data-v-3d2c946f]{background:var(--primary-color);color:#fff;border:none;padding:1rem 2rem;border-radius:10px;font-size:1.1rem;font-weight:700;cursor:pointer;transition:all .3s ease;box-shadow:0 4px 10px #2c5f5d4d}.submit-btn[data-v-3d2c946f]:hover:not(:disabled){background:var(--primary-dark);transform:translateY(-2px);box-shadow:0 6px 15px #2c5f5d66}.submit-btn[data-v-3d2c946f]:disabled{background:#bdc3c7;cursor:not-allowed}.modal-overlay[data-v-3d2c946f]{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-content[data-v-3d2c946f]{background:#fff;border-radius:15px;padding:2rem;max-width:500px;width:90%;box-shadow:0 10px 30px #0000004d}.modal-header[data-v-3d2c946f]{text-align:center;margin-bottom:1.5rem}.modal-header h3[data-v-3d2c946f]{color:var(--primary-color);font-size:1.5rem}.modal-body[data-v-3d2c946f]{margin-bottom:2rem}.modal-body p[data-v-3d2c946f]{color:#666;line-height:1.6;margin-bottom:1rem}.modal-footer[data-v-3d2c946f]{text-align:center}.btn-primary[data-v-3d2c946f]{background:var(--primary-color);color:#fff;border:none;padding:.75rem 1.5rem;border-radius:8px;cursor:pointer;font-size:1rem;transition:all .3s ease;box-shadow:0 2px 6px #2c5f5d4d}.btn-primary[data-v-3d2c946f]:hover{background:var(--primary-dark);transform:translateY(-1px);box-shadow:0 4px 10px #2c5f5d66}@media (max-width: 768px){.form-row[data-v-3d2c946f]{grid-template-columns:1fr}.booking-form-container[data-v-3d2c946f]{padding:1.5rem}}.admin[data-v-ee522cc2]{max-width:1200px;margin:0 auto}.admin-header[data-v-ee522cc2]{text-align:center;margin-bottom:3rem}.admin-header h1[data-v-ee522cc2]{color:var(--primary-color);font-size:2.5rem;margin-bottom:1rem}.admin-header p[data-v-ee522cc2]{color:var(--text-gray);font-size:1.2rem;margin-bottom:1rem}.admin-user-info[data-v-ee522cc2]{display:flex;justify-content:center;align-items:center;gap:1rem;background:#f8f9fa;padding:1rem;border-radius:8px;border:1px solid #e1e8ed}.admin-user-info span[data-v-ee522cc2]{color:#2c3e50;font-weight:500}.logout-btn[data-v-ee522cc2]{background:#dc3545;color:#fff;border:none;padding:.5rem 1rem;border-radius:6px;cursor:pointer;font-size:.9rem;transition:background-color .3s ease}.logout-btn[data-v-ee522cc2]:hover{background:#c82333}.admin-tabs[data-v-ee522cc2]{display:flex;gap:.5rem;margin-bottom:2rem;border-bottom:2px solid #e1e8ed}.tab-button[data-v-ee522cc2]{background:none;border:none;padding:1rem 2rem;font-size:1rem;cursor:pointer;border-bottom:3px solid transparent;transition:all .3s ease}.tab-button.active[data-v-ee522cc2]{border-bottom-color:var(--primary-color);color:var(--primary-color);font-weight:700}.tab-button[data-v-ee522cc2]:hover{background:#f8f9fa}.tab-content[data-v-ee522cc2]{background:#fff;border-radius:15px;padding:2rem;box-shadow:0 4px 15px #0000001a}.section-header[data-v-ee522cc2]{display:flex;justify-content:space-between;align-items:center;margin-bottom:2rem}.section-header h2[data-v-ee522cc2]{color:var(--primary-color);margin:0}.refresh-btn[data-v-ee522cc2],.add-btn[data-v-ee522cc2]{background:var(--primary-color);color:#fff;border:none;width:40px;height:40px;border-radius:8px;cursor:pointer;font-size:1.2rem;transition:all .3s ease;display:flex;align-items:center;justify-content:center;position:relative}.refresh-btn[data-v-ee522cc2]:hover:not(:disabled),.add-btn[data-v-ee522cc2]:hover{background:var(--primary-dark);transform:translateY(-2px);box-shadow:0 4px 8px #2c5f5d4d}.refresh-btn[data-v-ee522cc2]:disabled{background:#bdc3c7;cursor:not-allowed;opacity:.6}.refresh-btn[title][data-v-ee522cc2]:hover:after,.add-btn[title][data-v-ee522cc2]:hover:after{content:attr(title);position:absolute;bottom:100%;left:50%;transform:translate(-50%);background:#333;color:#fff;padding:.5rem;border-radius:4px;font-size:.75rem;white-space:nowrap;z-index:1000;margin-bottom:.5rem;box-shadow:0 2px 8px #0000004d}.refresh-btn[title][data-v-ee522cc2]:hover:before,.add-btn[title][data-v-ee522cc2]:hover:before{content:"";position:absolute;bottom:100%;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:#333;margin-bottom:-.5rem;z-index:1000}.requests-table[data-v-ee522cc2]{border:1px solid #e1e8ed;border-radius:8px;overflow:hidden}.table-header[data-v-ee522cc2]{display:grid;grid-template-columns:80px 1fr 200px 120px 200px;background:#f8f9fa;font-weight:700;color:#2c3e50}.header-cell[data-v-ee522cc2]{padding:1rem;border-right:1px solid #e1e8ed}.header-cell[data-v-ee522cc2]:last-child{border-right:none}.table-row[data-v-ee522cc2]{display:grid;grid-template-columns:80px 1fr 200px 120px 200px;border-bottom:1px solid #e1e8ed;transition:background-color .3s ease}.table-row[data-v-ee522cc2]:hover{background:#f8f9fa}.table-row[data-v-ee522cc2]:last-child{border-bottom:none}.cell[data-v-ee522cc2]{padding:1rem;border-right:1px solid #e1e8ed;display:flex;align-items:center}.cell[data-v-ee522cc2]:last-child{border-right:none}.status-badge[data-v-ee522cc2]{padding:.25rem .75rem;border-radius:20px;font-size:.875rem;font-weight:700;text-transform:capitalize}.status-badge.pending[data-v-ee522cc2]{background:#fff3cd;color:#856404}.status-badge.confirmed[data-v-ee522cc2]{background:#d1ecf1;color:#0c5460}.status-badge.mail_sent[data-v-ee522cc2]{background:#e7d4c5;color:#6d5637;font-weight:700}.status-badge.completed[data-v-ee522cc2]{background:#d4edda;color:#155724}.status-badge.cancelled[data-v-ee522cc2]{background:#f8d7da;color:#721c24}.actions[data-v-ee522cc2]{gap:.5rem;justify-content:center}.action-btn[data-v-ee522cc2]{background:#6c757d;color:#fff;border:none;width:40px;height:40px;border-radius:6px;cursor:pointer;font-size:1.2rem;transition:all .3s ease;display:flex;align-items:center;justify-content:center;position:relative}.action-btn[data-v-ee522cc2]:hover:not(:disabled){background:#5a6268;transform:translateY(-2px);box-shadow:0 4px 8px #0003}.action-btn[data-v-ee522cc2]:disabled{background:#bdc3c7;cursor:not-allowed;opacity:.6}.action-btn.view[data-v-ee522cc2]{background:#17a2b8}.action-btn.view[data-v-ee522cc2]:hover:not(:disabled){background:#138496}.action-btn.email[data-v-ee522cc2]{background:#28a745}.action-btn.email[data-v-ee522cc2]:hover:not(:disabled){background:#218838}.action-btn.sms[data-v-ee522cc2]{background:#ffc107;color:#212529}.action-btn.sms[data-v-ee522cc2]:hover:not(:disabled){background:#e0a800}.action-btn.comm[data-v-ee522cc2]{background:#6f42c1}.action-btn.comm[data-v-ee522cc2]:hover:not(:disabled){background:#5a32a3}.action-btn.edit[data-v-ee522cc2]{background:#17a2b8}.action-btn.edit[data-v-ee522cc2]:hover:not(:disabled){background:#138496}.action-btn.delete[data-v-ee522cc2]{background:#dc3545}.action-btn.delete[data-v-ee522cc2]:hover:not(:disabled){background:#c82333}.pricelist-table[data-v-ee522cc2]{border:1px solid #e1e8ed;border-radius:8px;overflow:hidden}.pricelist-table .table-header[data-v-ee522cc2]{display:grid;grid-template-columns:1fr 2fr 100px 80px 100px 120px;background:#f8f9fa;font-weight:700;color:#2c3e50}.pricelist-table .table-row[data-v-ee522cc2]{display:grid;grid-template-columns:1fr 2fr 100px 80px 100px 120px;border-bottom:1px solid #e1e8ed;transition:background-color .3s ease}.pricelist-table .table-row[data-v-ee522cc2]:hover{background:#f8f9fa}.pricelist-table .table-row[data-v-ee522cc2]:last-child{border-bottom:none}.status-badge.active[data-v-ee522cc2]{background:#d4edda;color:#155724}.status-badge.inactive[data-v-ee522cc2]{background:#f8d7da;color:#721c24}.action-btn[title][data-v-ee522cc2]:hover:after{content:attr(title);position:absolute;bottom:100%;left:50%;transform:translate(-50%);background:#333;color:#fff;padding:.5rem;border-radius:4px;font-size:.75rem;white-space:nowrap;z-index:1000;margin-bottom:.5rem;box-shadow:0 2px 8px #0000004d}.action-btn[title][data-v-ee522cc2]:hover:before{content:"";position:absolute;bottom:100%;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:#333;margin-bottom:-.5rem;z-index:1000}.loading-row[data-v-ee522cc2],.empty-row[data-v-ee522cc2]{grid-column:1 / -1;padding:2rem;text-align:center;color:#666}.blocked-dates-list[data-v-ee522cc2]{display:flex;flex-direction:column;gap:1rem}.blocked-date-item[data-v-ee522cc2]{display:flex;justify-content:space-between;align-items:center;padding:1rem;border:1px solid #e1e8ed;border-radius:8px;background:#f8f9fa}.date-info[data-v-ee522cc2]{display:flex;flex-direction:column;gap:.5rem}.date[data-v-ee522cc2]{font-weight:700;color:#2c3e50}.reason[data-v-ee522cc2]{color:#666;font-size:.875rem}.date-actions[data-v-ee522cc2]{display:flex;gap:.5rem}.edit-btn[data-v-ee522cc2],.delete-btn[data-v-ee522cc2]{border:none;width:40px;height:40px;border-radius:6px;cursor:pointer;font-size:1.2rem;transition:all .3s ease;display:flex;align-items:center;justify-content:center;position:relative}.edit-btn[data-v-ee522cc2]{background:#17a2b8;color:#fff}.edit-btn[data-v-ee522cc2]:hover{background:#138496;transform:translateY(-2px);box-shadow:0 4px 8px #0003}.delete-btn[data-v-ee522cc2]{background:#dc3545;color:#fff}.delete-btn[data-v-ee522cc2]:hover{background:#c82333;transform:translateY(-2px);box-shadow:0 4px 8px #0003}.edit-btn[title][data-v-ee522cc2]:hover:after,.delete-btn[title][data-v-ee522cc2]:hover:after{content:attr(title);position:absolute;bottom:100%;left:50%;transform:translate(-50%);background:#333;color:#fff;padding:.5rem;border-radius:4px;font-size:.75rem;white-space:nowrap;z-index:1000;margin-bottom:.5rem;box-shadow:0 2px 8px #0000004d}.edit-btn[title][data-v-ee522cc2]:hover:before,.delete-btn[title][data-v-ee522cc2]:hover:before{content:"";position:absolute;bottom:100%;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:#333;margin-bottom:-.5rem;z-index:1000}.settings-form[data-v-ee522cc2]{display:flex;flex-direction:column;gap:2rem}.setting-group[data-v-ee522cc2]{display:flex;flex-direction:column;gap:.5rem}.setting-group label[data-v-ee522cc2]{font-weight:700;color:#2c3e50}.setting-group input[data-v-ee522cc2],.setting-group textarea[data-v-ee522cc2]{padding:.75rem;border:2px solid #e1e8ed;border-radius:8px;font-size:1rem;font-family:inherit}.setting-group input[data-v-ee522cc2]:focus,.setting-group textarea[data-v-ee522cc2]:focus{outline:none;border-color:var(--primary-color)}.setting-group textarea[data-v-ee522cc2]{resize:vertical;min-height:120px}.save-btn[data-v-ee522cc2]{background:#28a745;color:#fff;border:none;width:40px;height:40px;border-radius:8px;cursor:pointer;align-self:flex-start;font-size:1.2rem;transition:all .3s ease;display:flex;align-items:center;justify-content:center;position:relative}.save-btn[data-v-ee522cc2]:hover{background:#218838;transform:translateY(-2px);box-shadow:0 4px 8px #0003}.save-btn[title][data-v-ee522cc2]:hover:after{content:attr(title);position:absolute;bottom:100%;left:50%;transform:translate(-50%);background:#333;color:#fff;padding:.5rem;border-radius:4px;font-size:.75rem;white-space:nowrap;z-index:1000;margin-bottom:.5rem;box-shadow:0 2px 8px #0000004d}.save-btn[title][data-v-ee522cc2]:hover:before{content:"";position:absolute;bottom:100%;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:#333;margin-bottom:-.5rem;z-index:1000}.modal-overlay[data-v-ee522cc2]{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-content[data-v-ee522cc2]{background:#fff;border-radius:15px;padding:2rem;max-width:500px;width:90%;max-height:90vh;overflow-y:auto;box-shadow:0 10px 30px #0000004d}.modal-content.large[data-v-ee522cc2]{max-width:800px}.modal-header[data-v-ee522cc2]{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem;padding-bottom:1rem;border-bottom:1px solid #e1e8ed}.modal-header h3[data-v-ee522cc2]{color:#2c3e50;margin:0}.close-btn[data-v-ee522cc2]{background:none;border:none;font-size:1.5rem;cursor:pointer;color:#666;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all .3s ease;position:relative}.close-btn[data-v-ee522cc2]:hover{color:#333;background:#f8f9fa}.close-btn[title][data-v-ee522cc2]:hover:after{content:attr(title);position:absolute;bottom:100%;left:50%;transform:translate(-50%);background:#333;color:#fff;padding:.5rem;border-radius:4px;font-size:.75rem;white-space:nowrap;z-index:1000;margin-bottom:.5rem;box-shadow:0 2px 8px #0000004d}.close-btn[title][data-v-ee522cc2]:hover:before{content:"";position:absolute;bottom:100%;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:#333;margin-bottom:-.5rem;z-index:1000}.modal-body[data-v-ee522cc2]{margin-bottom:2rem}.modal-footer[data-v-ee522cc2]{display:flex;gap:1rem;justify-content:flex-end}.btn-primary[data-v-ee522cc2],.btn-secondary[data-v-ee522cc2]{padding:.75rem 1.5rem;border:none;border-radius:8px;cursor:pointer;font-size:1rem;transition:background-color .3s ease}.btn-primary[data-v-ee522cc2]{background:var(--primary-color);color:#fff}.btn-primary[data-v-ee522cc2]:hover:not(:disabled){background:var(--primary-dark);box-shadow:0 4px 10px #2c5f5d4d}.btn-secondary[data-v-ee522cc2]{background:#6c757d;color:#fff}.btn-secondary[data-v-ee522cc2]:hover{background:#5a6268}.btn-pickup-confirmation[data-v-ee522cc2]{padding:.75rem 1.5rem;border:none;border-radius:8px;cursor:pointer;font-size:1rem;transition:all .3s ease;background:var(--secondary-color);color:#fff;font-weight:700}.btn-pickup-confirmation[data-v-ee522cc2]:hover:not(:disabled){background:var(--secondary-dark);box-shadow:0 4px 10px #8b6f474d;transform:translateY(-2px)}.btn-pickup-confirmation[data-v-ee522cc2]:disabled{background:#bdc3c7;cursor:not-allowed;opacity:.6}.form-group[data-v-ee522cc2]{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem}.form-group label[data-v-ee522cc2]{font-weight:700;color:#2c3e50}.form-group input[data-v-ee522cc2],.form-group textarea[data-v-ee522cc2]{padding:.75rem;border:2px solid #e1e8ed;border-radius:8px;font-size:1rem}.form-group input[data-v-ee522cc2]:focus,.form-group textarea[data-v-ee522cc2]:focus{outline:none;border-color:#3498db}.form-group textarea[data-v-ee522cc2]{resize:vertical;min-height:80px}.request-details[data-v-ee522cc2]{display:flex;flex-direction:column;gap:1rem}.detail-row[data-v-ee522cc2]{display:flex;gap:1rem;align-items:center}.detail-row strong[data-v-ee522cc2]{min-width:150px;color:#2c3e50}.detail-row input[data-v-ee522cc2],.detail-row select[data-v-ee522cc2]{padding:.5rem;border:1px solid #e1e8ed;border-radius:4px;flex:1}.no-communications[data-v-ee522cc2]{text-align:center;color:#666;padding:2rem}.communications-list[data-v-ee522cc2]{display:flex;flex-direction:column;gap:1rem}.communication-item[data-v-ee522cc2]{border:1px solid #e1e8ed;border-radius:8px;padding:1rem;background:#f8f9fa}.comm-header[data-v-ee522cc2]{display:flex;gap:1rem;margin-bottom:.5rem;font-size:.875rem}.comm-type[data-v-ee522cc2]{background:#3498db;color:#fff;padding:.25rem .5rem;border-radius:4px;font-weight:700}.comm-direction[data-v-ee522cc2]{color:#666}.comm-date[data-v-ee522cc2]{color:#666;margin-left:auto}.comm-message[data-v-ee522cc2]{color:#2c3e50;line-height:1.5}.loading-state[data-v-ee522cc2]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem;color:#666}.loading-spinner[data-v-ee522cc2]{border:4px solid #f3f3f3;border-top:4px solid #3498db;border-radius:50%;width:40px;height:40px;animation:spin-ee522cc2 1s linear infinite;margin-bottom:1rem}@keyframes spin-ee522cc2{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (max-width: 768px){.admin-tabs[data-v-ee522cc2]{flex-direction:column}.table-header[data-v-ee522cc2],.table-row[data-v-ee522cc2]{grid-template-columns:1fr;gap:.5rem}.header-cell[data-v-ee522cc2],.cell[data-v-ee522cc2]{border-right:none;border-bottom:1px solid #e1e8ed}.actions[data-v-ee522cc2]{flex-direction:row;justify-content:center;gap:.5rem}.blocked-date-item[data-v-ee522cc2]{flex-direction:column;gap:1rem;align-items:flex-start}.modal-content[data-v-ee522cc2]{margin:1rem;width:calc(100% - 2rem)}.admin-user-info[data-v-ee522cc2]{flex-direction:column;gap:.5rem}}.content-sections[data-v-ee522cc2]{display:flex;flex-direction:column;gap:2rem}.content-section[data-v-ee522cc2]{background:#f8f9fa;padding:1.5rem;border-radius:10px;border:1px solid #e1e8ed}.content-section h3[data-v-ee522cc2]{color:#2c3e50;margin-bottom:1rem;font-size:1.3rem}.content-section h4[data-v-ee522cc2]{color:#2c3e50;margin-bottom:.75rem;font-size:1.1rem}.content-form[data-v-ee522cc2]{display:flex;flex-direction:column;gap:1rem}.feature-group[data-v-ee522cc2]{background:#fff;padding:1rem;border-radius:8px;border:1px solid #e1e8ed}.feature-group[data-v-ee522cc2]:not(:last-child){margin-bottom:1rem}.content-form .form-group[data-v-ee522cc2]{margin-bottom:.5rem}.content-form .form-group label[data-v-ee522cc2]{font-weight:600;color:#2c3e50;margin-bottom:.5rem;display:block}.content-form .form-group input[data-v-ee522cc2],.content-form .form-group textarea[data-v-ee522cc2]{width:100%;padding:.75rem;border:2px solid #e1e8ed;border-radius:8px;font-size:1rem;transition:border-color .3s ease}.content-form .form-group input[data-v-ee522cc2]:focus,.content-form .form-group textarea[data-v-ee522cc2]:focus{outline:none;border-color:var(--primary-color);background:#f8f9fa;box-shadow:0 0 0 3px #2c5f5d1a}.content-form .form-group textarea[data-v-ee522cc2]{resize:vertical;font-family:inherit}.login[data-v-2b41928d]{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--primary-color) 0%,var(--primary-light) 100%);padding:2rem}.login-container[data-v-2b41928d]{background:#fff;border-radius:15px;padding:3rem;box-shadow:0 10px 30px #0000004d;max-width:400px;width:100%}.login-header[data-v-2b41928d]{text-align:center;margin-bottom:2rem}.login-header h1[data-v-2b41928d]{color:var(--primary-color);font-size:2rem;margin-bottom:.5rem}.login-header p[data-v-2b41928d]{color:var(--text-gray);font-size:1rem}.login-form[data-v-2b41928d]{display:flex;flex-direction:column;gap:1.5rem}.form-group[data-v-2b41928d]{display:flex;flex-direction:column;gap:.5rem}.form-group label[data-v-2b41928d]{font-weight:700;color:var(--primary-color);font-size:.9rem}.form-group input[data-v-2b41928d]{padding:.75rem;border:2px solid #e1e8ed;border-radius:8px;font-size:1rem;transition:border-color .3s ease}.form-group input[data-v-2b41928d]:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 3px #2c5f5d1a}.form-group input[data-v-2b41928d]:disabled{background:#f8f9fa;cursor:not-allowed}.form-error[data-v-2b41928d]{background:#fee;color:#c53030;padding:1rem;border-radius:8px;border:1px solid #feb2b2;text-align:center;font-size:.9rem}.login-btn[data-v-2b41928d]{background:var(--primary-color);color:#fff;border:none;padding:1rem;border-radius:8px;font-size:1rem;font-weight:700;cursor:pointer;transition:all .3s ease;box-shadow:0 4px 10px #2c5f5d4d}.login-btn[data-v-2b41928d]:hover:not(:disabled){background:var(--primary-dark);transform:translateY(-2px);box-shadow:0 6px 15px #2c5f5d66}.login-btn[data-v-2b41928d]:disabled{background:#bdc3c7;cursor:not-allowed}.login-info[data-v-2b41928d]{margin-top:2rem;padding:1.5rem;background:#f8f9fa;border-radius:8px;border:1px solid #e1e8ed}.login-info p[data-v-2b41928d]{margin:.5rem 0;color:#666;font-size:.9rem}.login-info strong[data-v-2b41928d]{color:var(--primary-color)}@media (max-width: 480px){.login-container[data-v-2b41928d]{padding:2rem}.login-header h1[data-v-2b41928d]{font-size:1.75rem}}.pricelist[data-v-a4add45b]{max-width:1200px;margin:0 auto;padding:2rem}.pricelist-header[data-v-a4add45b]{text-align:center;margin-bottom:3rem}.pricelist-header h1[data-v-a4add45b]{color:#2c3e50;font-size:3rem;margin-bottom:1rem}.pricelist-header p[data-v-a4add45b]{color:#666;font-size:1.2rem;margin-bottom:2rem}.back-btn[data-v-a4add45b]{display:inline-block;background:var(--secondary-color);color:#fff;padding:.75rem 1.5rem;text-decoration:none;border-radius:8px;font-size:1rem;transition:background-color .3s ease}.back-btn[data-v-a4add45b]:hover{background:var(--secondary-dark)}.loading-state[data-v-a4add45b],.empty-state[data-v-a4add45b]{text-align:center;padding:4rem;color:#666}.loading-spinner[data-v-a4add45b]{border:4px solid #f3f3f3;border-top:4px solid var(--primary-color);border-radius:50%;width:50px;height:50px;animation:spin-a4add45b 1s linear infinite;margin:0 auto 1rem}@keyframes spin-a4add45b{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.pricelist-grid[data-v-a4add45b]{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:2rem;margin-bottom:4rem}.price-card[data-v-a4add45b]{background:#fff;border:2px solid #e1e8ed;border-radius:15px;padding:2rem;box-shadow:0 4px 15px #0000001a;transition:all .3s ease}.price-card[data-v-a4add45b]:hover{transform:translateY(-5px);box-shadow:0 8px 25px #00000026;border-color:var(--primary-color)}.price-header[data-v-a4add45b]{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;padding-bottom:1rem;border-bottom:2px solid #f8f9fa}.price-header h3[data-v-a4add45b]{color:#2c3e50;margin:0;font-size:1.3rem}.price[data-v-a4add45b]{background:var(--primary-color);color:#fff;padding:.5rem 1rem;border-radius:25px;font-size:1.2rem;font-weight:700}.description[data-v-a4add45b]{color:#666;line-height:1.6;margin:0}.cta-section[data-v-a4add45b]{text-align:center;background:#f8f9fa;padding:3rem 2rem;border-radius:15px;border:2px dashed var(--primary-color)}.cta-section h2[data-v-a4add45b]{color:#2c3e50;margin-bottom:1rem}.cta-section p[data-v-a4add45b]{color:#666;font-size:1.1rem;margin-bottom:2rem}.cta-button[data-v-a4add45b]{display:inline-block;background:var(--primary-color);color:#fff;padding:1rem 2rem;text-decoration:none;border-radius:10px;font-size:1.1rem;font-weight:700;transition:background-color .3s ease}.cta-button[data-v-a4add45b]:hover{background:var(--primary-dark)}@media (max-width: 768px){.pricelist[data-v-a4add45b]{padding:1rem}.pricelist-header h1[data-v-a4add45b]{font-size:2rem}.pricelist-grid[data-v-a4add45b]{grid-template-columns:1fr;gap:1rem}.price-header[data-v-a4add45b]{flex-direction:column;text-align:center;gap:1rem}}:root{--primary-color: #2c5f5d;--primary-dark: #1f4443;--primary-light: #3d7a77;--secondary-color: #8b6f47;--secondary-dark: #6d5637;--secondary-light: #a68a5f;--text-dark: #2c3e50;--text-gray: #666;--bg-light: #f5f5f5;--bg-white: #ffffff}body{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;background-color:var(--bg-light)}.navbar{background:linear-gradient(135deg,var(--primary-color) 0%,var(--primary-light) 100%);padding:.5rem 0;box-shadow:0 2px 10px #2c5f5d33}.nav-container{max-width:1200px;margin:0 auto;display:flex;justify-content:space-between;align-items:center;padding:0 2rem}.nav-logo{display:flex;align-items:center;text-decoration:none}.logo-image{height:70px;width:auto;filter:drop-shadow(0 2px 4px rgba(0,0,0,.1));transition:transform .3s ease}.logo-image:hover{transform:scale(1.05)}.nav-menu{display:flex;gap:2rem;align-items:center}.nav-link{color:#fff;text-decoration:none;padding:.5rem 1rem;border-radius:5px;transition:all .3s ease;font-weight:500}.nav-link:hover{background-color:#ffffff26;transform:translateY(-1px)}.nav-link.router-link-active{background-color:var(--secondary-color)}.main-content{max-width:1200px;margin:2rem auto;padding:0 2rem}@media (max-width: 768px){.nav-container{flex-direction:column;gap:1rem;padding:1rem}.logo-image{height:75px}.nav-menu{flex-wrap:wrap;justify-content:center;gap:1rem}.nav-link{padding:.4rem .8rem;font-size:.9rem}}*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth}body{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;line-height:1.6;color:#333;background-color:#f5f5f5}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.mb-1{margin-bottom:.5rem}.mb-2{margin-bottom:1rem}.mb-3{margin-bottom:1.5rem}.mb-4{margin-bottom:2rem}.mt-1{margin-top:.5rem}.mt-2{margin-top:1rem}.mt-3{margin-top:1.5rem}.mt-4{margin-top:2rem}.p-1{padding:.5rem}.p-2{padding:1rem}.p-3{padding:1.5rem}.p-4{padding:2rem}.btn{display:inline-block;padding:.5rem 1rem;border:none;border-radius:5px;cursor:pointer;text-decoration:none;font-size:1rem;transition:all .3s ease}.btn-primary{background:#667eea;color:#fff}.btn-primary:hover{background:#5a6fd8}.btn-secondary{background:#6c757d;color:#fff}.btn-secondary:hover{background:#5a6268}.card{background:#fff;border-radius:10px;box-shadow:0 2px 10px #0000001a;padding:1.5rem;margin-bottom:1rem}@media (max-width: 768px){.nav-container{flex-direction:column;gap:1rem}.nav-menu{gap:1rem}.hero h1{font-size:2rem}.features{grid-template-columns:1fr}} diff --git a/backend/public/assets/index-aYPxxDKl.js b/backend/public/assets/index-aYPxxDKl.js new file mode 100644 index 0000000..ad386cd --- /dev/null +++ b/backend/public/assets/index-aYPxxDKl.js @@ -0,0 +1,25 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))n(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const r of i.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function s(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function n(o){if(o.ep)return;o.ep=!0;const i=s(o);fetch(o.href,i)}})();/** +* @vue/shared v3.5.20 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Ds(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const de={},Ht=[],st=()=>{},ni=()=>!1,Wn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Vs=e=>e.startsWith("onUpdate:"),je=Object.assign,Fs=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},Tr=Object.prototype.hasOwnProperty,le=(e,t)=>Tr.call(e,t),U=Array.isArray,qt=e=>Sn(e)==="[object Map]",Yt=e=>Sn(e)==="[object Set]",oo=e=>Sn(e)==="[object Date]",$=e=>typeof e=="function",Se=e=>typeof e=="string",ot=e=>typeof e=="symbol",ge=e=>e!==null&&typeof e=="object",si=e=>(ge(e)||$(e))&&$(e.then)&&$(e.catch),oi=Object.prototype.toString,Sn=e=>oi.call(e),Mr=e=>Sn(e).slice(8,-1),ii=e=>Sn(e)==="[object Object]",Bs=e=>Se(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,nn=Ds(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Gn=e=>{const t=Object.create(null);return s=>t[s]||(t[s]=e(s))},Ir=/-(\w)/g,Ge=Gn(e=>e.replace(Ir,(t,s)=>s?s.toUpperCase():"")),jr=/\B([A-Z])/g,Dt=Gn(e=>e.replace(jr,"-$1").toLowerCase()),zn=Gn(e=>e.charAt(0).toUpperCase()+e.slice(1)),rs=Gn(e=>e?`on${zn(e)}`:""),xt=(e,t)=>!Object.is(e,t),On=(e,...t)=>{for(let s=0;s{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:n,value:s})},Dn=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let io;const Jn=()=>io||(io=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Ls(e){if(U(e)){const t={};for(let s=0;s{if(s){const n=s.split(Vr);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function Mt(e){let t="";if(Se(e))t=e;else if(U(e))for(let s=0;skn(s,t))}const ai=e=>!!(e&&e.__v_isRef===!0),F=e=>Se(e)?e:e==null?"":U(e)||ge(e)&&(e.toString===oi||!$(e.toString))?ai(e)?F(e.value):JSON.stringify(e,ci,2):String(e),ci=(e,t)=>ai(t)?ci(e,t.value):qt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[n,o],i)=>(s[ls(n,i)+" =>"]=o,s),{})}:Yt(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>ls(s))}:ot(t)?ls(t):ge(t)&&!U(t)&&!ii(t)?String(t):t,ls=(e,t="")=>{var s;return ot(e)?`Symbol(${(s=e.description)!=null?s:t})`:e};/** +* @vue/reactivity v3.5.20 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Te;class ui{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=Te,!t&&Te&&(this.index=(Te.scopes||(Te.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes)for(t=0,s=this.scopes.length;t0&&--this._on===0&&(Te=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let s,n;for(s=0,n=this.effects.length;s0)return;if(on){let t=on;for(on=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;sn;){let t=sn;for(sn=void 0;t;){const s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(n){e||(e=n)}t=s}}if(e)throw e}function gi(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function vi(e){let t,s=e.depsTail,n=s;for(;n;){const o=n.prevDep;n.version===-1?(n===s&&(s=o),Us(n),Ur(n)):t=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=o}e.deps=t,e.depsTail=s}function ys(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(_i(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function _i(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===pn)||(e.globalVersion=pn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!ys(e))))return;e.flags|=2;const t=e.dep,s=me,n=Ye;me=e,Ye=!0;try{gi(e);const o=e.fn(e._value);(t.version===0||xt(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{me=s,Ye=n,vi(e),e.flags&=-3}}function Us(e,t=!1){const{dep:s,prevSub:n,nextSub:o}=e;if(n&&(n.nextSub=o,e.prevSub=void 0),o&&(o.prevSub=n,e.nextSub=void 0),s.subs===e&&(s.subs=n,!n&&s.computed)){s.computed.flags&=-5;for(let i=s.computed.deps;i;i=i.nextDep)Us(i,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function Ur(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let Ye=!0;const bi=[];function ht(){bi.push(Ye),Ye=!1}function pt(){const e=bi.pop();Ye=e===void 0?!0:e}function ro(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=me;me=void 0;try{t()}finally{me=s}}}let pn=0;class Kr{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Ks{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!me||!Ye||me===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==me)s=this.activeLink=new Kr(me,this),me.deps?(s.prevDep=me.depsTail,me.depsTail.nextDep=s,me.depsTail=s):me.deps=me.depsTail=s,yi(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const n=s.nextDep;n.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=n),s.prevDep=me.depsTail,s.nextDep=void 0,me.depsTail.nextDep=s,me.depsTail=s,me.deps===s&&(me.deps=n)}return s}trigger(t){this.version++,pn++,this.notify(t)}notify(t){Hs();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{qs()}}}function yi(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let n=t.deps;n;n=n.nextDep)yi(n)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const Vn=new WeakMap,It=Symbol(""),ws=Symbol(""),mn=Symbol("");function Me(e,t,s){if(Ye&&me){let n=Vn.get(e);n||Vn.set(e,n=new Map);let o=n.get(s);o||(n.set(s,o=new Ks),o.map=n,o.key=s),o.track()}}function ut(e,t,s,n,o,i){const r=Vn.get(e);if(!r){pn++;return}const l=u=>{u&&u.trigger()};if(Hs(),t==="clear")r.forEach(l);else{const u=U(e),p=u&&Bs(s);if(u&&s==="length"){const d=Number(n);r.forEach((m,v)=>{(v==="length"||v===mn||!ot(v)&&v>=d)&&l(m)})}else switch((s!==void 0||r.has(void 0))&&l(r.get(s)),p&&l(r.get(mn)),t){case"add":u?p&&l(r.get("length")):(l(r.get(It)),qt(e)&&l(r.get(ws)));break;case"delete":u||(l(r.get(It)),qt(e)&&l(r.get(ws)));break;case"set":qt(e)&&l(r.get(It));break}}qs()}function Wr(e,t){const s=Vn.get(e);return s&&s.get(t)}function Ft(e){const t=se(e);return t===e?t:(Me(t,"iterate",mn),We(e)?t:t.map(Ce))}function Yn(e){return Me(e=se(e),"iterate",mn),e}const Gr={__proto__:null,[Symbol.iterator](){return cs(this,Symbol.iterator,Ce)},concat(...e){return Ft(this).concat(...e.map(t=>U(t)?Ft(t):t))},entries(){return cs(this,"entries",e=>(e[1]=Ce(e[1]),e))},every(e,t){return rt(this,"every",e,t,void 0,arguments)},filter(e,t){return rt(this,"filter",e,t,s=>s.map(Ce),arguments)},find(e,t){return rt(this,"find",e,t,Ce,arguments)},findIndex(e,t){return rt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return rt(this,"findLast",e,t,Ce,arguments)},findLastIndex(e,t){return rt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return rt(this,"forEach",e,t,void 0,arguments)},includes(...e){return us(this,"includes",e)},indexOf(...e){return us(this,"indexOf",e)},join(e){return Ft(this).join(e)},lastIndexOf(...e){return us(this,"lastIndexOf",e)},map(e,t){return rt(this,"map",e,t,void 0,arguments)},pop(){return Xt(this,"pop")},push(...e){return Xt(this,"push",e)},reduce(e,...t){return lo(this,"reduce",e,t)},reduceRight(e,...t){return lo(this,"reduceRight",e,t)},shift(){return Xt(this,"shift")},some(e,t){return rt(this,"some",e,t,void 0,arguments)},splice(...e){return Xt(this,"splice",e)},toReversed(){return Ft(this).toReversed()},toSorted(e){return Ft(this).toSorted(e)},toSpliced(...e){return Ft(this).toSpliced(...e)},unshift(...e){return Xt(this,"unshift",e)},values(){return cs(this,"values",Ce)}};function cs(e,t,s){const n=Yn(e),o=n[t]();return n!==e&&!We(e)&&(o._next=o.next,o.next=()=>{const i=o._next();return i.value&&(i.value=s(i.value)),i}),o}const zr=Array.prototype;function rt(e,t,s,n,o,i){const r=Yn(e),l=r!==e&&!We(e),u=r[t];if(u!==zr[t]){const m=u.apply(e,i);return l?Ce(m):m}let p=s;r!==e&&(l?p=function(m,v){return s.call(this,Ce(m),v,e)}:s.length>2&&(p=function(m,v){return s.call(this,m,v,e)}));const d=u.call(r,p,n);return l&&o?o(d):d}function lo(e,t,s,n){const o=Yn(e);let i=s;return o!==e&&(We(e)?s.length>3&&(i=function(r,l,u){return s.call(this,r,l,u,e)}):i=function(r,l,u){return s.call(this,r,Ce(l),u,e)}),o[t](i,...n)}function us(e,t,s){const n=se(e);Me(n,"iterate",mn);const o=n[t](...s);return(o===-1||o===!1)&&zs(s[0])?(s[0]=se(s[0]),n[t](...s)):o}function Xt(e,t,s=[]){ht(),Hs();const n=se(e)[t].apply(e,s);return qs(),pt(),n}const Jr=Ds("__proto__,__v_isRef,__isVue"),wi=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ot));function Yr(e){ot(e)||(e=String(e));const t=se(this);return Me(t,"has",e),t.hasOwnProperty(e)}class Si{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,n){if(s==="__v_skip")return t.__v_skip;const o=this._isReadonly,i=this._isShallow;if(s==="__v_isReactive")return!o;if(s==="__v_isReadonly")return o;if(s==="__v_isShallow")return i;if(s==="__v_raw")return n===(o?i?il:Ei:i?xi:Ci).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const r=U(t);if(!o){let u;if(r&&(u=Gr[s]))return u;if(s==="hasOwnProperty")return Yr}const l=Reflect.get(t,s,we(t)?t:n);return(ot(s)?wi.has(s):Jr(s))||(o||Me(t,"get",s),i)?l:we(l)?r&&Bs(s)?l:l.value:ge(l)?o?Ri(l):Cn(l):l}}class ki extends Si{constructor(t=!1){super(!1,t)}set(t,s,n,o){let i=t[s];if(!this._isShallow){const u=Pt(i);if(!We(n)&&!Pt(n)&&(i=se(i),n=se(n)),!U(t)&&we(i)&&!we(n))return u||(i.value=n),!0}const r=U(t)&&Bs(s)?Number(s)e,Pn=e=>Reflect.getPrototypeOf(e);function el(e,t,s){return function(...n){const o=this.__v_raw,i=se(o),r=qt(i),l=e==="entries"||e===Symbol.iterator&&r,u=e==="keys"&&r,p=o[e](...n),d=s?Ss:t?Fn:Ce;return!t&&Me(i,"iterate",u?ws:It),{next(){const{value:m,done:v}=p.next();return v?{value:m,done:v}:{value:l?[d(m[0]),d(m[1])]:d(m),done:v}},[Symbol.iterator](){return this}}}}function Rn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function tl(e,t){const s={get(o){const i=this.__v_raw,r=se(i),l=se(o);e||(xt(o,l)&&Me(r,"get",o),Me(r,"get",l));const{has:u}=Pn(r),p=t?Ss:e?Fn:Ce;if(u.call(r,o))return p(i.get(o));if(u.call(r,l))return p(i.get(l));i!==r&&i.get(o)},get size(){const o=this.__v_raw;return!e&&Me(se(o),"iterate",It),o.size},has(o){const i=this.__v_raw,r=se(i),l=se(o);return e||(xt(o,l)&&Me(r,"has",o),Me(r,"has",l)),o===l?i.has(o):i.has(o)||i.has(l)},forEach(o,i){const r=this,l=r.__v_raw,u=se(l),p=t?Ss:e?Fn:Ce;return!e&&Me(u,"iterate",It),l.forEach((d,m)=>o.call(i,p(d),p(m),r))}};return je(s,e?{add:Rn("add"),set:Rn("set"),delete:Rn("delete"),clear:Rn("clear")}:{add(o){!t&&!We(o)&&!Pt(o)&&(o=se(o));const i=se(this);return Pn(i).has.call(i,o)||(i.add(o),ut(i,"add",o,o)),this},set(o,i){!t&&!We(i)&&!Pt(i)&&(i=se(i));const r=se(this),{has:l,get:u}=Pn(r);let p=l.call(r,o);p||(o=se(o),p=l.call(r,o));const d=u.call(r,o);return r.set(o,i),p?xt(i,d)&&ut(r,"set",o,i):ut(r,"add",o,i),this},delete(o){const i=se(this),{has:r,get:l}=Pn(i);let u=r.call(i,o);u||(o=se(o),u=r.call(i,o)),l&&l.call(i,o);const p=i.delete(o);return u&&ut(i,"delete",o,void 0),p},clear(){const o=se(this),i=o.size!==0,r=o.clear();return i&&ut(o,"clear",void 0,void 0),r}}),["keys","values","entries",Symbol.iterator].forEach(o=>{s[o]=el(o,e,t)}),s}function Ws(e,t){const s=tl(e,t);return(n,o,i)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?n:Reflect.get(le(s,o)&&o in n?s:n,o,i)}const nl={get:Ws(!1,!1)},sl={get:Ws(!1,!0)},ol={get:Ws(!0,!1)};const Ci=new WeakMap,xi=new WeakMap,Ei=new WeakMap,il=new WeakMap;function rl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function ll(e){return e.__v_skip||!Object.isExtensible(e)?0:rl(Mr(e))}function Cn(e){return Pt(e)?e:Gs(e,!1,Zr,nl,Ci)}function Pi(e){return Gs(e,!1,$r,sl,xi)}function Ri(e){return Gs(e,!0,Xr,ol,Ei)}function Gs(e,t,s,n,o){if(!ge(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=ll(e);if(i===0)return e;const r=o.get(e);if(r)return r;const l=new Proxy(e,i===2?n:s);return o.set(e,l),l}function Et(e){return Pt(e)?Et(e.__v_raw):!!(e&&e.__v_isReactive)}function Pt(e){return!!(e&&e.__v_isReadonly)}function We(e){return!!(e&&e.__v_isShallow)}function zs(e){return e?!!e.__v_raw:!1}function se(e){const t=e&&e.__v_raw;return t?se(t):e}function Js(e){return!le(e,"__v_skip")&&Object.isExtensible(e)&&ri(e,"__v_skip",!0),e}const Ce=e=>ge(e)?Cn(e):e,Fn=e=>ge(e)?Ri(e):e;function we(e){return e?e.__v_isRef===!0:!1}function Q(e){return Ai(e,!1)}function al(e){return Ai(e,!0)}function Ai(e,t){return we(e)?e:new cl(e,t)}class cl{constructor(t,s){this.dep=new Ks,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:se(t),this._value=s?t:Ce(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){const s=this._rawValue,n=this.__v_isShallow||We(t)||Pt(t);t=n?t:se(t),xt(t,s)&&(this._rawValue=t,this._value=n?t:Ce(t),this.dep.trigger())}}function Ut(e){return we(e)?e.value:e}const ul={get:(e,t,s)=>t==="__v_raw"?e:Ut(Reflect.get(e,t,s)),set:(e,t,s,n)=>{const o=e[t];return we(o)&&!we(s)?(o.value=s,!0):Reflect.set(e,t,s,n)}};function Oi(e){return Et(e)?e:new Proxy(e,ul)}function fl(e){const t=U(e)?new Array(e.length):{};for(const s in e)t[s]=hl(e,s);return t}class dl{constructor(t,s,n){this._object=t,this._key=s,this._defaultValue=n,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Wr(se(this._object),this._key)}}function hl(e,t,s){const n=e[t];return we(n)?n:new dl(e,t,s)}class pl{constructor(t,s,n){this.fn=t,this.setter=s,this._value=void 0,this.dep=new Ks(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=pn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&me!==this)return mi(this,!0),!0}get value(){const t=this.dep.track();return _i(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function ml(e,t,s=!1){let n,o;return $(e)?n=e:(n=e.get,o=e.set),new pl(n,o,s)}const An={},Bn=new WeakMap;let Tt;function gl(e,t=!1,s=Tt){if(s){let n=Bn.get(s);n||Bn.set(s,n=[]),n.push(e)}}function vl(e,t,s=de){const{immediate:n,deep:o,once:i,scheduler:r,augmentJob:l,call:u}=s,p=D=>o?D:We(D)||o===!1||o===0?ft(D,1):ft(D);let d,m,v,c,C=!1,T=!1;if(we(e)?(m=()=>e.value,C=We(e)):Et(e)?(m=()=>p(e),C=!0):U(e)?(T=!0,C=e.some(D=>Et(D)||We(D)),m=()=>e.map(D=>{if(we(D))return D.value;if(Et(D))return p(D);if($(D))return u?u(D,2):D()})):$(e)?t?m=u?()=>u(e,2):e:m=()=>{if(v){ht();try{v()}finally{pt()}}const D=Tt;Tt=d;try{return u?u(e,3,[c]):e(c)}finally{Tt=D}}:m=st,t&&o){const D=m,P=o===!0?1/0:o;m=()=>ft(D(),P)}const G=di(),x=()=>{d.stop(),G&&G.active&&Fs(G.effects,d)};if(i&&t){const D=t;t=(...P)=>{D(...P),x()}}let I=T?new Array(e.length).fill(An):An;const V=D=>{if(!(!(d.flags&1)||!d.dirty&&!D))if(t){const P=d.run();if(o||C||(T?P.some((ne,z)=>xt(ne,I[z])):xt(P,I))){v&&v();const ne=Tt;Tt=d;try{const z=[P,I===An?void 0:T&&I[0]===An?[]:I,c];I=P,u?u(t,3,z):t(...z)}finally{Tt=ne}}}else d.run()};return l&&l(V),d=new hi(m),d.scheduler=r?()=>r(V,!1):V,c=D=>gl(D,!1,d),v=d.onStop=()=>{const D=Bn.get(d);if(D){if(u)u(D,4);else for(const P of D)P();Bn.delete(d)}},t?n?V(!0):I=d.run():r?r(V.bind(null,!0),!0):d.run(),x.pause=d.pause.bind(d),x.resume=d.resume.bind(d),x.stop=x,x}function ft(e,t=1/0,s){if(t<=0||!ge(e)||e.__v_skip||(s=s||new Set,s.has(e)))return e;if(s.add(e),t--,we(e))ft(e.value,t,s);else if(U(e))for(let n=0;n{ft(n,t,s)});else if(ii(e)){for(const n in e)ft(e[n],t,s);for(const n of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,n)&&ft(e[n],t,s)}return e}/** +* @vue/runtime-core v3.5.20 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function xn(e,t,s,n){try{return n?e(...n):e()}catch(o){Qn(o,t,s)}}function it(e,t,s,n){if($(e)){const o=xn(e,t,s,n);return o&&si(o)&&o.catch(i=>{Qn(i,t,s)}),o}if(U(e)){const o=[];for(let i=0;i>>1,o=Be[n],i=gn(o);i=gn(s)?Be.push(e):Be.splice(bl(t),0,e),e.flags|=1,Mi()}}function Mi(){Ln||(Ln=Ti.then(ji))}function yl(e){U(e)?Kt.push(...e):yt&&e.id===-1?yt.splice(Lt+1,0,e):e.flags&1||(Kt.push(e),e.flags|=1),Mi()}function ao(e,t,s=et+1){for(;sgn(s)-gn(n));if(Kt.length=0,yt){yt.push(...t);return}for(yt=t,Lt=0;Lte.id==null?e.flags&2?-1:1/0:e.id;function ji(e){try{for(et=0;et{n._d&&bo(-1);const i=Nn(t);let r;try{r=e(...o)}finally{Nn(i),n._d&&bo(1)}return r};return n._n=!0,n._c=!0,n._d=!0,n}function ve(e,t){if(qe===null)return e;const s=ts(qe),n=e.dirs||(e.dirs=[]);for(let o=0;oe.__isTeleport,kl=Symbol("_leaveCb");function Qs(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Qs(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}/*! #__NO_SIDE_EFFECTS__ */function Vi(e,t){return $(e)?je({name:e.name},t,{setup:e}):e}function Fi(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function rn(e,t,s,n,o=!1){if(U(e)){e.forEach((C,T)=>rn(C,t&&(U(t)?t[T]:t),s,n,o));return}if(ln(n)&&!o){n.shapeFlag&512&&n.type.__asyncResolved&&n.component.subTree.component&&rn(e,t,s,n.component.subTree);return}const i=n.shapeFlag&4?ts(n.component):n.el,r=o?null:i,{i:l,r:u}=e,p=t&&t.r,d=l.refs===de?l.refs={}:l.refs,m=l.setupState,v=se(m),c=m===de?ni:C=>le(v,C);if(p!=null&&p!==u){if(Se(p))d[p]=null,c(p)&&(m[p]=null);else if(we(p)){p.value=null;const C=t;C.k&&(d[C.k]=null)}}if($(u))xn(u,l,12,[r,d]);else{const C=Se(u),T=we(u);if(C||T){const G=()=>{if(e.f){const x=C?c(u)?m[u]:d[u]:u.value;if(o)U(x)&&Fs(x,i);else if(U(x))x.includes(i)||x.push(i);else if(C)d[u]=[i],c(u)&&(m[u]=d[u]);else{const I=[i];u.value=I,e.k&&(d[e.k]=I)}}else C?(d[u]=r,c(u)&&(m[u]=r)):T&&(u.value=r,e.k&&(d[e.k]=r))};r?(G.id=-1,He(G,s)):G()}}}Jn().requestIdleCallback;Jn().cancelIdleCallback;const ln=e=>!!e.type.__asyncLoader,Bi=e=>e.type.__isKeepAlive;function Cl(e,t){Li(e,"a",t)}function xl(e,t){Li(e,"da",t)}function Li(e,t,s=Ie){const n=e.__wdc||(e.__wdc=()=>{let o=s;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(Xn(t,n,s),s){let o=s.parent;for(;o&&o.parent;)Bi(o.parent.vnode)&&El(n,t,s,o),o=o.parent}}function El(e,t,s,n){const o=Xn(t,e,n,!0);Ni(()=>{Fs(n[t],o)},s)}function Xn(e,t,s=Ie,n=!1){if(s){const o=s[e]||(s[e]=[]),i=t.__weh||(t.__weh=(...r)=>{ht();const l=En(s),u=it(t,s,e,r);return l(),pt(),u});return n?o.unshift(i):o.push(i),i}}const mt=e=>(t,s=Ie)=>{(!_n||e==="sp")&&Xn(e,(...n)=>t(...n),s)},Pl=mt("bm"),Qt=mt("m"),Rl=mt("bu"),Al=mt("u"),Ol=mt("bum"),Ni=mt("um"),Tl=mt("sp"),Ml=mt("rtg"),Il=mt("rtc");function jl(e,t=Ie){Xn("ec",e,t)}const Dl="components";function Hn(e,t){return Fl(Dl,e,!0,t)||e}const Vl=Symbol.for("v-ndc");function Fl(e,t,s=!0,n=!1){const o=qe||Ie;if(o){const i=o.type;{const l=Ca(i,!1);if(l&&(l===t||l===Ge(t)||l===zn(Ge(t))))return i}const r=co(o[e]||i[e],t)||co(o.appContext[e],t);return!r&&n?i:r}}function co(e,t){return e&&(e[t]||e[Ge(t)]||e[zn(Ge(t))])}function kt(e,t,s,n){let o;const i=s,r=U(e);if(r||Se(e)){const l=r&&Et(e);let u=!1,p=!1;l&&(u=!We(e),p=Pt(e),e=Yn(e)),o=new Array(e.length);for(let d=0,m=e.length;dt(l,u,void 0,i));else{const l=Object.keys(e);o=new Array(l.length);for(let u=0,p=l.length;ue?lr(e)?ts(e):ks(e.parent):null,an=je(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>ks(e.parent),$root:e=>ks(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>qi(e),$forceUpdate:e=>e.f||(e.f=()=>{Ys(e.update)}),$nextTick:e=>e.n||(e.n=Zn.bind(e.proxy)),$watch:e=>ia.bind(e)}),fs=(e,t)=>e!==de&&!e.__isScriptSetup&&le(e,t),Bl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:n,data:o,props:i,accessCache:r,type:l,appContext:u}=e;let p;if(t[0]!=="$"){const c=r[t];if(c!==void 0)switch(c){case 1:return n[t];case 2:return o[t];case 4:return s[t];case 3:return i[t]}else{if(fs(n,t))return r[t]=1,n[t];if(o!==de&&le(o,t))return r[t]=2,o[t];if((p=e.propsOptions[0])&&le(p,t))return r[t]=3,i[t];if(s!==de&&le(s,t))return r[t]=4,s[t];Cs&&(r[t]=0)}}const d=an[t];let m,v;if(d)return t==="$attrs"&&Me(e.attrs,"get",""),d(e);if((m=l.__cssModules)&&(m=m[t]))return m;if(s!==de&&le(s,t))return r[t]=4,s[t];if(v=u.config.globalProperties,le(v,t))return v[t]},set({_:e},t,s){const{data:n,setupState:o,ctx:i}=e;return fs(o,t)?(o[t]=s,!0):n!==de&&le(n,t)?(n[t]=s,!0):le(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:n,appContext:o,propsOptions:i,type:r}},l){let u,p;return!!(s[l]||e!==de&&l[0]!=="$"&&le(e,l)||fs(t,l)||(u=i[0])&&le(u,l)||le(n,l)||le(an,l)||le(o.config.globalProperties,l)||(p=r.__cssModules)&&p[l])},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:le(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function uo(e){return U(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let Cs=!0;function Ll(e){const t=qi(e),s=e.proxy,n=e.ctx;Cs=!1,t.beforeCreate&&fo(t.beforeCreate,e,"bc");const{data:o,computed:i,methods:r,watch:l,provide:u,inject:p,created:d,beforeMount:m,mounted:v,beforeUpdate:c,updated:C,activated:T,deactivated:G,beforeDestroy:x,beforeUnmount:I,destroyed:V,unmounted:D,render:P,renderTracked:ne,renderTriggered:z,errorCaptured:Z,serverPrefetch:Y,expose:oe,inheritAttrs:he,components:ae,directives:_e,filters:ze}=t;if(p&&Nl(p,n,null),r)for(const X in r){const ee=r[X];$(ee)&&(n[X]=ee.bind(s))}if(o){const X=o.call(s,s);ge(X)&&(e.data=Cn(X))}if(Cs=!0,i)for(const X in i){const ee=i[X],Ne=$(ee)?ee.bind(s,s):$(ee.get)?ee.get.bind(s,s):st,Xe=!$(ee)&&$(ee.set)?ee.set.bind(s):st,Le=Ee({get:Ne,set:Xe});Object.defineProperty(n,X,{enumerable:!0,configurable:!0,get:()=>Le.value,set:Pe=>Le.value=Pe})}if(l)for(const X in l)Hi(l[X],n,s,X);if(u){const X=$(u)?u.call(s):u;Reflect.ownKeys(X).forEach(ee=>{Tn(ee,X[ee])})}d&&fo(d,e,"c");function pe(X,ee){U(ee)?ee.forEach(Ne=>X(Ne.bind(s))):ee&&X(ee.bind(s))}if(pe(Pl,m),pe(Qt,v),pe(Rl,c),pe(Al,C),pe(Cl,T),pe(xl,G),pe(jl,Z),pe(Il,ne),pe(Ml,z),pe(Ol,I),pe(Ni,D),pe(Tl,Y),U(oe))if(oe.length){const X=e.exposed||(e.exposed={});oe.forEach(ee=>{Object.defineProperty(X,ee,{get:()=>s[ee],set:Ne=>s[ee]=Ne,enumerable:!0})})}else e.exposed||(e.exposed={});P&&e.render===st&&(e.render=P),he!=null&&(e.inheritAttrs=he),ae&&(e.components=ae),_e&&(e.directives=_e),Y&&Fi(e)}function Nl(e,t,s=st){U(e)&&(e=xs(e));for(const n in e){const o=e[n];let i;ge(o)?"default"in o?i=Qe(o.from||n,o.default,!0):i=Qe(o.from||n):i=Qe(o),we(i)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>i.value,set:r=>i.value=r}):t[n]=i}}function fo(e,t,s){it(U(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,s)}function Hi(e,t,s,n){let o=n.includes(".")?tr(s,n):()=>s[n];if(Se(e)){const i=t[e];$(i)&&cn(o,i)}else if($(e))cn(o,e.bind(s));else if(ge(e))if(U(e))e.forEach(i=>Hi(i,t,s,n));else{const i=$(e.handler)?e.handler.bind(s):t[e.handler];$(i)&&cn(o,i,e)}}function qi(e){const t=e.type,{mixins:s,extends:n}=t,{mixins:o,optionsCache:i,config:{optionMergeStrategies:r}}=e.appContext,l=i.get(t);let u;return l?u=l:!o.length&&!s&&!n?u=t:(u={},o.length&&o.forEach(p=>qn(u,p,r,!0)),qn(u,t,r)),ge(t)&&i.set(t,u),u}function qn(e,t,s,n=!1){const{mixins:o,extends:i}=t;i&&qn(e,i,s,!0),o&&o.forEach(r=>qn(e,r,s,!0));for(const r in t)if(!(n&&r==="expose")){const l=Hl[r]||s&&s[r];e[r]=l?l(e[r],t[r]):t[r]}return e}const Hl={data:ho,props:po,emits:po,methods:tn,computed:tn,beforeCreate:Fe,created:Fe,beforeMount:Fe,mounted:Fe,beforeUpdate:Fe,updated:Fe,beforeDestroy:Fe,beforeUnmount:Fe,destroyed:Fe,unmounted:Fe,activated:Fe,deactivated:Fe,errorCaptured:Fe,serverPrefetch:Fe,components:tn,directives:tn,watch:Ul,provide:ho,inject:ql};function ho(e,t){return t?e?function(){return je($(e)?e.call(this,this):e,$(t)?t.call(this,this):t)}:t:e}function ql(e,t){return tn(xs(e),xs(t))}function xs(e){if(U(e)){const t={};for(let s=0;s1)return s&&$(t)?t.call(n&&n.proxy):t}}function Gl(){return!!(rr()||jt)}const Ki={},Wi=()=>Object.create(Ki),Gi=e=>Object.getPrototypeOf(e)===Ki;function zl(e,t,s,n=!1){const o={},i=Wi();e.propsDefaults=Object.create(null),zi(e,t,o,i);for(const r in e.propsOptions[0])r in o||(o[r]=void 0);s?e.props=n?o:Pi(o):e.type.props?e.props=o:e.props=i,e.attrs=i}function Jl(e,t,s,n){const{props:o,attrs:i,vnode:{patchFlag:r}}=e,l=se(o),[u]=e.propsOptions;let p=!1;if((n||r>0)&&!(r&16)){if(r&8){const d=e.vnode.dynamicProps;for(let m=0;m{u=!0;const[v,c]=Ji(m,t,!0);je(r,v),c&&l.push(...c)};!s&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!i&&!u)return ge(e)&&n.set(e,Ht),Ht;if(U(i))for(let d=0;de==="_"||e==="_ctx"||e==="$stable",Xs=e=>U(e)?e.map(tt):[tt(e)],Ql=(e,t,s)=>{if(t._n)return t;const n=nt((...o)=>Xs(t(...o)),s);return n._c=!1,n},Yi=(e,t,s)=>{const n=e._ctx;for(const o in e){if(Zs(o))continue;const i=e[o];if($(i))t[o]=Ql(o,i,n);else if(i!=null){const r=Xs(i);t[o]=()=>r}}},Qi=(e,t)=>{const s=Xs(t);e.slots.default=()=>s},Zi=(e,t,s)=>{for(const n in t)(s||!Zs(n))&&(e[n]=t[n])},Zl=(e,t,s)=>{const n=e.slots=Wi();if(e.vnode.shapeFlag&32){const o=t._;o?(Zi(n,t,s),s&&ri(n,"_",o,!0)):Yi(t,n)}else t&&Qi(e,t)},Xl=(e,t,s)=>{const{vnode:n,slots:o}=e;let i=!0,r=de;if(n.shapeFlag&32){const l=t._;l?s&&l===1?i=!1:Zi(o,t,s):(i=!t.$stable,Yi(t,o)),r=t}else t&&(Qi(e,t),r={default:1});if(i)for(const l in o)!Zs(l)&&r[l]==null&&delete o[l]},He=da;function $l(e){return ea(e)}function ea(e,t){const s=Jn();s.__VUE__=!0;const{insert:n,remove:o,patchProp:i,createElement:r,createText:l,createComment:u,setText:p,setElementText:d,parentNode:m,nextSibling:v,setScopeId:c=st,insertStaticContent:C}=e,T=(f,h,g,w=null,S=null,b=null,A=void 0,R=null,E=!!h.dynamicChildren)=>{if(f===h)return;f&&!$t(f,h)&&(w=y(f),Pe(f,S,b,!0),f=null),h.patchFlag===-2&&(E=!1,h.dynamicChildren=null);const{type:k,ref:H,shapeFlag:M}=h;switch(k){case es:G(f,h,g,w);break;case Rt:x(f,h,g,w);break;case Mn:f==null&&I(h,g,w,A);break;case xe:ae(f,h,g,w,S,b,A,R,E);break;default:M&1?P(f,h,g,w,S,b,A,R,E):M&6?_e(f,h,g,w,S,b,A,R,E):(M&64||M&128)&&k.process(f,h,g,w,S,b,A,R,E,B)}H!=null&&S?rn(H,f&&f.ref,b,h||f,!h):H==null&&f&&f.ref!=null&&rn(f.ref,null,b,f,!0)},G=(f,h,g,w)=>{if(f==null)n(h.el=l(h.children),g,w);else{const S=h.el=f.el;h.children!==f.children&&p(S,h.children)}},x=(f,h,g,w)=>{f==null?n(h.el=u(h.children||""),g,w):h.el=f.el},I=(f,h,g,w)=>{[f.el,f.anchor]=C(f.children,h,g,w,f.el,f.anchor)},V=({el:f,anchor:h},g,w)=>{let S;for(;f&&f!==h;)S=v(f),n(f,g,w),f=S;n(h,g,w)},D=({el:f,anchor:h})=>{let g;for(;f&&f!==h;)g=v(f),o(f),f=g;o(h)},P=(f,h,g,w,S,b,A,R,E)=>{h.type==="svg"?A="svg":h.type==="math"&&(A="mathml"),f==null?ne(h,g,w,S,b,A,R,E):Y(f,h,S,b,A,R,E)},ne=(f,h,g,w,S,b,A,R)=>{let E,k;const{props:H,shapeFlag:M,transition:N,dirs:J}=f;if(E=f.el=r(f.type,b,H&&H.is,H),M&8?d(E,f.children):M&16&&Z(f.children,E,null,w,S,ds(f,b),A,R),J&&At(f,null,w,"created"),z(E,f,f.scopeId,A,w),H){for(const ue in H)ue!=="value"&&!nn(ue)&&i(E,ue,null,H[ue],b,w);"value"in H&&i(E,"value",null,H.value,b),(k=H.onVnodeBeforeMount)&&$e(k,w,f)}J&&At(f,null,w,"beforeMount");const te=ta(S,N);te&&N.beforeEnter(E),n(E,h,g),((k=H&&H.onVnodeMounted)||te||J)&&He(()=>{k&&$e(k,w,f),te&&N.enter(E),J&&At(f,null,w,"mounted")},S)},z=(f,h,g,w,S)=>{if(g&&c(f,g),w)for(let b=0;b{for(let k=E;k{const R=h.el=f.el;let{patchFlag:E,dynamicChildren:k,dirs:H}=h;E|=f.patchFlag&16;const M=f.props||de,N=h.props||de;let J;if(g&&Ot(g,!1),(J=N.onVnodeBeforeUpdate)&&$e(J,g,h,f),H&&At(h,f,g,"beforeUpdate"),g&&Ot(g,!0),(M.innerHTML&&N.innerHTML==null||M.textContent&&N.textContent==null)&&d(R,""),k?oe(f.dynamicChildren,k,R,g,w,ds(h,S),b):A||ee(f,h,R,null,g,w,ds(h,S),b,!1),E>0){if(E&16)he(R,M,N,g,S);else if(E&2&&M.class!==N.class&&i(R,"class",null,N.class,S),E&4&&i(R,"style",M.style,N.style,S),E&8){const te=h.dynamicProps;for(let ue=0;ue{J&&$e(J,g,h,f),H&&At(h,f,g,"updated")},w)},oe=(f,h,g,w,S,b,A)=>{for(let R=0;R{if(h!==g){if(h!==de)for(const b in h)!nn(b)&&!(b in g)&&i(f,b,h[b],null,S,w);for(const b in g){if(nn(b))continue;const A=g[b],R=h[b];A!==R&&b!=="value"&&i(f,b,R,A,S,w)}"value"in g&&i(f,"value",h.value,g.value,S)}},ae=(f,h,g,w,S,b,A,R,E)=>{const k=h.el=f?f.el:l(""),H=h.anchor=f?f.anchor:l("");let{patchFlag:M,dynamicChildren:N,slotScopeIds:J}=h;J&&(R=R?R.concat(J):J),f==null?(n(k,g,w),n(H,g,w),Z(h.children||[],g,H,S,b,A,R,E)):M>0&&M&64&&N&&f.dynamicChildren?(oe(f.dynamicChildren,N,g,S,b,A,R),(h.key!=null||S&&h===S.subTree)&&Xi(f,h,!0)):ee(f,h,g,H,S,b,A,R,E)},_e=(f,h,g,w,S,b,A,R,E)=>{h.slotScopeIds=R,f==null?h.shapeFlag&512?S.ctx.activate(h,g,w,A,E):ze(h,g,w,S,b,A,E):Je(f,h,E)},ze=(f,h,g,w,S,b,A)=>{const R=f.component=ba(f,w,S);if(Bi(f)&&(R.ctx.renderer=B),ya(R,!1,A),R.asyncDep){if(S&&S.registerDep(R,pe,A),!f.el){const E=R.subTree=ye(Rt);x(null,E,h,g),f.placeholder=E.el}}else pe(R,f,h,g,S,b,A)},Je=(f,h,g)=>{const w=h.component=f.component;if(ua(f,h,g))if(w.asyncDep&&!w.asyncResolved){X(w,h,g);return}else w.next=h,w.update();else h.el=f.el,w.vnode=h},pe=(f,h,g,w,S,b,A)=>{const R=()=>{if(f.isMounted){let{next:M,bu:N,u:J,parent:te,vnode:ue}=f;{const _=$i(f);if(_){M&&(M.el=ue.el,X(f,M,A)),_.asyncDep.then(()=>{f.isUnmounted||R()});return}}let ie=M,Re;Ot(f,!1),M?(M.el=ue.el,X(f,M,A)):M=ue,N&&On(N),(Re=M.props&&M.props.onVnodeBeforeUpdate)&&$e(Re,te,M,ue),Ot(f,!0);const Ae=vo(f),Ke=f.subTree;f.subTree=Ae,T(Ke,Ae,m(Ke.el),y(Ke),f,S,b),M.el=Ae.el,ie===null&&fa(f,Ae.el),J&&He(J,S),(Re=M.props&&M.props.onVnodeUpdated)&&He(()=>$e(Re,te,M,ue),S)}else{let M;const{el:N,props:J}=h,{bm:te,m:ue,parent:ie,root:Re,type:Ae}=f,Ke=ln(h);Ot(f,!1),te&&On(te),!Ke&&(M=J&&J.onVnodeBeforeMount)&&$e(M,ie,h),Ot(f,!0);{Re.ce&&Re.ce._def.shadowRoot!==!1&&Re.ce._injectChildStyle(Ae);const _=f.subTree=vo(f);T(null,_,g,w,f,S,b),h.el=_.el}if(ue&&He(ue,S),!Ke&&(M=J&&J.onVnodeMounted)){const _=h;He(()=>$e(M,ie,_),S)}(h.shapeFlag&256||ie&&ln(ie.vnode)&&ie.vnode.shapeFlag&256)&&f.a&&He(f.a,S),f.isMounted=!0,h=g=w=null}};f.scope.on();const E=f.effect=new hi(R);f.scope.off();const k=f.update=E.run.bind(E),H=f.job=E.runIfDirty.bind(E);H.i=f,H.id=f.uid,E.scheduler=()=>Ys(H),Ot(f,!0),k()},X=(f,h,g)=>{h.component=f;const w=f.vnode.props;f.vnode=h,f.next=null,Jl(f,h.props,w,g),Xl(f,h.children,g),ht(),ao(f),pt()},ee=(f,h,g,w,S,b,A,R,E=!1)=>{const k=f&&f.children,H=f?f.shapeFlag:0,M=h.children,{patchFlag:N,shapeFlag:J}=h;if(N>0){if(N&128){Xe(k,M,g,w,S,b,A,R,E);return}else if(N&256){Ne(k,M,g,w,S,b,A,R,E);return}}J&8?(H&16&&De(k,S,b),M!==k&&d(g,M)):H&16?J&16?Xe(k,M,g,w,S,b,A,R,E):De(k,S,b,!0):(H&8&&d(g,""),J&16&&Z(M,g,w,S,b,A,R,E))},Ne=(f,h,g,w,S,b,A,R,E)=>{f=f||Ht,h=h||Ht;const k=f.length,H=h.length,M=Math.min(k,H);let N;for(N=0;NH?De(f,S,b,!0,!1,M):Z(h,g,w,S,b,A,R,E,M)},Xe=(f,h,g,w,S,b,A,R,E)=>{let k=0;const H=h.length;let M=f.length-1,N=H-1;for(;k<=M&&k<=N;){const J=f[k],te=h[k]=E?wt(h[k]):tt(h[k]);if($t(J,te))T(J,te,g,null,S,b,A,R,E);else break;k++}for(;k<=M&&k<=N;){const J=f[M],te=h[N]=E?wt(h[N]):tt(h[N]);if($t(J,te))T(J,te,g,null,S,b,A,R,E);else break;M--,N--}if(k>M){if(k<=N){const J=N+1,te=JN)for(;k<=M;)Pe(f[k],S,b,!0),k++;else{const J=k,te=k,ue=new Map;for(k=te;k<=N;k++){const fe=h[k]=E?wt(h[k]):tt(h[k]);fe.key!=null&&ue.set(fe.key,k)}let ie,Re=0;const Ae=N-te+1;let Ke=!1,_=0;const L=new Array(Ae);for(k=0;k=Ae){Pe(fe,S,b,!0);continue}let Ve;if(fe.key!=null)Ve=ue.get(fe.key);else for(ie=te;ie<=N;ie++)if(L[ie-te]===0&&$t(fe,h[ie])){Ve=ie;break}Ve===void 0?Pe(fe,S,b,!0):(L[Ve-te]=k+1,Ve>=_?_=Ve:Ke=!0,T(fe,h[Ve],g,null,S,b,A,R,E),Re++)}const K=Ke?na(L):Ht;for(ie=K.length-1,k=Ae-1;k>=0;k--){const fe=te+k,Ve=h[fe],no=h[fe+1],so=fe+1{const{el:b,type:A,transition:R,children:E,shapeFlag:k}=f;if(k&6){Le(f.component.subTree,h,g,w);return}if(k&128){f.suspense.move(h,g,w);return}if(k&64){A.move(f,h,g,B);return}if(A===xe){n(b,h,g);for(let M=0;MR.enter(b),S);else{const{leave:M,delayLeave:N,afterLeave:J}=R,te=()=>{f.ctx.isUnmounted?o(b):n(b,h,g)},ue=()=>{b._isLeaving&&b[kl](!0),M(b,()=>{te(),J&&J()})};N?N(b,te,ue):ue()}else n(b,h,g)},Pe=(f,h,g,w=!1,S=!1)=>{const{type:b,props:A,ref:R,children:E,dynamicChildren:k,shapeFlag:H,patchFlag:M,dirs:N,cacheIndex:J}=f;if(M===-2&&(S=!1),R!=null&&(ht(),rn(R,null,g,f,!0),pt()),J!=null&&(h.renderCache[J]=void 0),H&256){h.ctx.deactivate(f);return}const te=H&1&&N,ue=!ln(f);let ie;if(ue&&(ie=A&&A.onVnodeBeforeUnmount)&&$e(ie,h,f),H&6)Vt(f.component,g,w);else{if(H&128){f.suspense.unmount(g,w);return}te&&At(f,null,h,"beforeUnmount"),H&64?f.type.remove(f,h,g,B,w):k&&!k.hasOnce&&(b!==xe||M>0&&M&64)?De(k,h,g,!1,!0):(b===xe&&M&384||!S&&H&16)&&De(E,h,g),w&>(f)}(ue&&(ie=A&&A.onVnodeUnmounted)||te)&&He(()=>{ie&&$e(ie,h,f),te&&At(f,null,h,"unmounted")},g)},gt=f=>{const{type:h,el:g,anchor:w,transition:S}=f;if(h===xe){vt(g,w);return}if(h===Mn){D(f);return}const b=()=>{o(g),S&&!S.persisted&&S.afterLeave&&S.afterLeave()};if(f.shapeFlag&1&&S&&!S.persisted){const{leave:A,delayLeave:R}=S,E=()=>A(g,b);R?R(f.el,b,E):E()}else b()},vt=(f,h)=>{let g;for(;f!==h;)g=v(f),o(f),f=g;o(h)},Vt=(f,h,g)=>{const{bum:w,scope:S,job:b,subTree:A,um:R,m:E,a:k}=f;go(E),go(k),w&&On(w),S.stop(),b&&(b.flags|=8,Pe(A,f,h,g)),R&&He(R,h),He(()=>{f.isUnmounted=!0},h)},De=(f,h,g,w=!1,S=!1,b=0)=>{for(let A=b;A{if(f.shapeFlag&6)return y(f.component.subTree);if(f.shapeFlag&128)return f.suspense.next();const h=v(f.anchor||f.el),g=h&&h[wl];return g?v(g):h};let j=!1;const O=(f,h,g)=>{f==null?h._vnode&&Pe(h._vnode,null,null,!0):T(h._vnode||null,f,h,null,null,null,g),h._vnode=f,j||(j=!0,ao(),Ii(),j=!1)},B={p:T,um:Pe,m:Le,r:gt,mt:ze,mc:Z,pc:ee,pbc:oe,n:y,o:e};return{render:O,hydrate:void 0,createApp:Wl(O)}}function ds({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function Ot({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function ta(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Xi(e,t,s=!1){const n=e.children,o=t.children;if(U(n)&&U(o))for(let i=0;i>1,e[s[l]]0&&(t[n]=s[i-1]),s[i]=n)}}for(i=s.length,r=s[i-1];i-- >0;)s[i]=r,r=t[r];return s}function $i(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:$i(t)}function go(e){if(e)for(let t=0;tQe(sa);function cn(e,t,s){return er(e,t,s)}function er(e,t,s=de){const{immediate:n,deep:o,flush:i,once:r}=s,l=je({},s),u=t&&n||!t&&i!=="post";let p;if(_n){if(i==="sync"){const c=oa();p=c.__watcherHandles||(c.__watcherHandles=[])}else if(!u){const c=()=>{};return c.stop=st,c.resume=st,c.pause=st,c}}const d=Ie;l.call=(c,C,T)=>it(c,d,C,T);let m=!1;i==="post"?l.scheduler=c=>{He(c,d&&d.suspense)}:i!=="sync"&&(m=!0,l.scheduler=(c,C)=>{C?c():Ys(c)}),l.augmentJob=c=>{t&&(c.flags|=4),m&&(c.flags|=2,d&&(c.id=d.uid,c.i=d))};const v=vl(e,t,l);return _n&&(p?p.push(v):u&&v()),v}function ia(e,t,s){const n=this.proxy,o=Se(e)?e.includes(".")?tr(n,e):()=>n[e]:e.bind(n,n);let i;$(t)?i=t:(i=t.handler,s=t);const r=En(this),l=er(o,i.bind(n),s);return r(),l}function tr(e,t){const s=t.split(".");return()=>{let n=e;for(let o=0;ot==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ge(t)}Modifiers`]||e[`${Dt(t)}Modifiers`];function la(e,t,...s){if(e.isUnmounted)return;const n=e.vnode.props||de;let o=s;const i=t.startsWith("update:"),r=i&&ra(n,t.slice(7));r&&(r.trim&&(o=s.map(d=>Se(d)?d.trim():d)),r.number&&(o=s.map(Dn)));let l,u=n[l=rs(t)]||n[l=rs(Ge(t))];!u&&i&&(u=n[l=rs(Dt(t))]),u&&it(u,e,6,o);const p=n[l+"Once"];if(p){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,it(p,e,6,o)}}function nr(e,t,s=!1){const n=t.emitsCache,o=n.get(e);if(o!==void 0)return o;const i=e.emits;let r={},l=!1;if(!$(e)){const u=p=>{const d=nr(p,t,!0);d&&(l=!0,je(r,d))};!s&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}return!i&&!l?(ge(e)&&n.set(e,null),null):(U(i)?i.forEach(u=>r[u]=null):je(r,i),ge(e)&&n.set(e,r),r)}function $n(e,t){return!e||!Wn(t)?!1:(t=t.slice(2).replace(/Once$/,""),le(e,t[0].toLowerCase()+t.slice(1))||le(e,Dt(t))||le(e,t))}function vo(e){const{type:t,vnode:s,proxy:n,withProxy:o,propsOptions:[i],slots:r,attrs:l,emit:u,render:p,renderCache:d,props:m,data:v,setupState:c,ctx:C,inheritAttrs:T}=e,G=Nn(e);let x,I;try{if(s.shapeFlag&4){const D=o||n,P=D;x=tt(p.call(P,D,d,m,c,v,C)),I=l}else{const D=t;x=tt(D.length>1?D(m,{attrs:l,slots:r,emit:u}):D(m,null)),I=t.props?l:aa(l)}}catch(D){un.length=0,Qn(D,e,1),x=ye(Rt)}let V=x;if(I&&T!==!1){const D=Object.keys(I),{shapeFlag:P}=V;D.length&&P&7&&(i&&D.some(Vs)&&(I=ca(I,i)),V=Wt(V,I,!1,!0))}return s.dirs&&(V=Wt(V,null,!1,!0),V.dirs=V.dirs?V.dirs.concat(s.dirs):s.dirs),s.transition&&Qs(V,s.transition),x=V,Nn(G),x}const aa=e=>{let t;for(const s in e)(s==="class"||s==="style"||Wn(s))&&((t||(t={}))[s]=e[s]);return t},ca=(e,t)=>{const s={};for(const n in e)(!Vs(n)||!(n.slice(9)in t))&&(s[n]=e[n]);return s};function ua(e,t,s){const{props:n,children:o,component:i}=e,{props:r,children:l,patchFlag:u}=t,p=i.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&u>=0){if(u&1024)return!0;if(u&16)return n?_o(n,r,p):!!r;if(u&8){const d=t.dynamicProps;for(let m=0;me.__isSuspense;function da(e,t){t&&t.pendingBranch?U(e)?t.effects.push(...e):t.effects.push(e):yl(e)}const xe=Symbol.for("v-fgt"),es=Symbol.for("v-txt"),Rt=Symbol.for("v-cmt"),Mn=Symbol.for("v-stc"),un=[];let Ue=null;function q(e=!1){un.push(Ue=e?null:[])}function ha(){un.pop(),Ue=un[un.length-1]||null}let vn=1;function bo(e,t=!1){vn+=e,e<0&&Ue&&t&&(Ue.hasOnce=!0)}function or(e){return e.dynamicChildren=vn>0?Ue||Ht:null,ha(),vn>0&&Ue&&Ue.push(e),e}function W(e,t,s,n,o,i){return or(a(e,t,s,n,o,i,!0))}function Ps(e,t,s,n,o){return or(ye(e,t,s,n,o,!0))}function Un(e){return e?e.__v_isVNode===!0:!1}function $t(e,t){return e.type===t.type&&e.key===t.key}const ir=({key:e})=>e??null,In=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?Se(e)||we(e)||$(e)?{i:qe,r:e,k:t,f:!!s}:e:null);function a(e,t=null,s=null,n=0,o=null,i=e===xe?0:1,r=!1,l=!1){const u={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ir(t),ref:t&&In(t),scopeId:Di,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:n,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:qe};return l?($s(u,s),i&128&&e.normalize(u)):s&&(u.shapeFlag|=Se(s)?8:16),vn>0&&!r&&Ue&&(u.patchFlag>0||i&6)&&u.patchFlag!==32&&Ue.push(u),u}const ye=pa;function pa(e,t=null,s=null,n=0,o=null,i=!1){if((!e||e===Vl)&&(e=Rt),Un(e)){const l=Wt(e,t,!0);return s&&$s(l,s),vn>0&&!i&&Ue&&(l.shapeFlag&6?Ue[Ue.indexOf(e)]=l:Ue.push(l)),l.patchFlag=-2,l}if(xa(e)&&(e=e.__vccOpts),t){t=ma(t);let{class:l,style:u}=t;l&&!Se(l)&&(t.class=Mt(l)),ge(u)&&(zs(u)&&!U(u)&&(u=je({},u)),t.style=Ls(u))}const r=Se(e)?1:sr(e)?128:Sl(e)?64:ge(e)?4:$(e)?2:0;return a(e,t,s,n,o,r,i,!0)}function ma(e){return e?zs(e)||Gi(e)?je({},e):e:null}function Wt(e,t,s=!1,n=!1){const{props:o,ref:i,patchFlag:r,children:l,transition:u}=e,p=t?ga(o||{},t):o,d={__v_isVNode:!0,__v_skip:!0,type:e.type,props:p,key:p&&ir(p),ref:t&&t.ref?s&&i?U(i)?i.concat(In(t)):[i,In(t)]:In(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==xe?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:u,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Wt(e.ssContent),ssFallback:e.ssFallback&&Wt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return u&&n&&Qs(d,u.clone(d)),d}function ke(e=" ",t=0){return ye(es,null,e,t)}function hs(e,t){const s=ye(Mn,null,e);return s.staticCount=t,s}function Oe(e="",t=!1){return t?(q(),Ps(Rt,null,e)):ye(Rt,null,e)}function tt(e){return e==null||typeof e=="boolean"?ye(Rt):U(e)?ye(xe,null,e.slice()):Un(e)?wt(e):ye(es,null,String(e))}function wt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Wt(e)}function $s(e,t){let s=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(U(t))s=16;else if(typeof t=="object")if(n&65){const o=t.default;o&&(o._c&&(o._d=!1),$s(e,o()),o._c&&(o._d=!0));return}else{s=32;const o=t._;!o&&!Gi(t)?t._ctx=qe:o===3&&qe&&(qe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else $(t)?(t={default:t,_ctx:qe},s=32):(t=String(t),n&64?(s=16,t=[ke(t)]):s=8);e.children=t,e.shapeFlag|=s}function ga(...e){const t={};for(let s=0;sIe||qe;let Kn,Rs;{const e=Jn(),t=(s,n)=>{let o;return(o=e[s])||(o=e[s]=[]),o.push(n),i=>{o.length>1?o.forEach(r=>r(i)):o[0](i)}};Kn=t("__VUE_INSTANCE_SETTERS__",s=>Ie=s),Rs=t("__VUE_SSR_SETTERS__",s=>_n=s)}const En=e=>{const t=Ie;return Kn(e),e.scope.on(),()=>{e.scope.off(),Kn(t)}},yo=()=>{Ie&&Ie.scope.off(),Kn(null)};function lr(e){return e.vnode.shapeFlag&4}let _n=!1;function ya(e,t=!1,s=!1){t&&Rs(t);const{props:n,children:o}=e.vnode,i=lr(e);zl(e,n,i,t),Zl(e,o,s||t);const r=i?wa(e,t):void 0;return t&&Rs(!1),r}function wa(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Bl);const{setup:n}=s;if(n){ht();const o=e.setupContext=n.length>1?ka(e):null,i=En(e),r=xn(n,e,0,[e.props,o]),l=si(r);if(pt(),i(),(l||e.sp)&&!ln(e)&&Fi(e),l){if(r.then(yo,yo),t)return r.then(u=>{wo(e,u)}).catch(u=>{Qn(u,e,0)});e.asyncDep=r}else wo(e,r)}else ar(e)}function wo(e,t,s){$(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ge(t)&&(e.setupState=Oi(t)),ar(e)}function ar(e,t,s){const n=e.type;e.render||(e.render=n.render||st);{const o=En(e);ht();try{Ll(e)}finally{pt(),o()}}}const Sa={get(e,t){return Me(e,"get",""),e[t]}};function ka(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,Sa),slots:e.slots,emit:e.emit,expose:t}}function ts(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Oi(Js(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in an)return an[s](e)},has(t,s){return s in t||s in an}})):e.proxy}function Ca(e,t=!0){return $(e)?e.displayName||e.name:e.name||t&&e.__name}function xa(e){return $(e)&&"__vccOpts"in e}const Ee=(e,t)=>ml(e,t,_n);function cr(e,t,s){const n=arguments.length;return n===2?ge(t)&&!U(t)?Un(t)?ye(e,null,[t]):ye(e,t):ye(e,null,t):(n>3?s=Array.prototype.slice.call(arguments,2):n===3&&Un(s)&&(s=[s]),ye(e,t,s))}const Ea="3.5.20";/** +* @vue/runtime-dom v3.5.20 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let As;const So=typeof window<"u"&&window.trustedTypes;if(So)try{As=So.createPolicy("vue",{createHTML:e=>e})}catch{}const ur=As?e=>As.createHTML(e):e=>e,Pa="http://www.w3.org/2000/svg",Ra="http://www.w3.org/1998/Math/MathML",at=typeof document<"u"?document:null,ko=at&&at.createElement("template"),Aa={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,n)=>{const o=t==="svg"?at.createElementNS(Pa,e):t==="mathml"?at.createElementNS(Ra,e):s?at.createElement(e,{is:s}):at.createElement(e);return e==="select"&&n&&n.multiple!=null&&o.setAttribute("multiple",n.multiple),o},createText:e=>at.createTextNode(e),createComment:e=>at.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>at.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,n,o,i){const r=s?s.previousSibling:t.lastChild;if(o&&(o===i||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),s),!(o===i||!(o=o.nextSibling)););else{ko.innerHTML=ur(n==="svg"?`${e}`:n==="mathml"?`${e}`:e);const l=ko.content;if(n==="svg"||n==="mathml"){const u=l.firstChild;for(;u.firstChild;)l.appendChild(u.firstChild);l.removeChild(u)}t.insertBefore(l,s)}return[r?r.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},Oa=Symbol("_vtc");function Ta(e,t,s){const n=e[Oa];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const Co=Symbol("_vod"),Ma=Symbol("_vsh"),Ia=Symbol(""),ja=/(^|;)\s*display\s*:/;function Da(e,t,s){const n=e.style,o=Se(s);let i=!1;if(s&&!o){if(t)if(Se(t))for(const r of t.split(";")){const l=r.slice(0,r.indexOf(":")).trim();s[l]==null&&jn(n,l,"")}else for(const r in t)s[r]==null&&jn(n,r,"");for(const r in s)r==="display"&&(i=!0),jn(n,r,s[r])}else if(o){if(t!==s){const r=n[Ia];r&&(s+=";"+r),n.cssText=s,i=ja.test(s)}}else t&&e.removeAttribute("style");Co in e&&(e[Co]=i?n.display:"",e[Ma]&&(n.display="none"))}const xo=/\s*!important$/;function jn(e,t,s){if(U(s))s.forEach(n=>jn(e,t,n));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const n=Va(e,t);xo.test(s)?e.setProperty(Dt(n),s.replace(xo,""),"important"):e[n]=s}}const Eo=["Webkit","Moz","ms"],ps={};function Va(e,t){const s=ps[t];if(s)return s;let n=Ge(t);if(n!=="filter"&&n in e)return ps[t]=n;n=zn(n);for(let o=0;oms||(Na.then(()=>ms=0),ms=Date.now());function qa(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;it(Ua(n,s.value),t,5,[n])};return s.value=e,s.attached=Ha(),s}function Ua(e,t){if(U(t)){const s=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{s.call(e),e._stopped=!0},t.map(n=>o=>!o._stopped&&n&&n(o))}else return t}const Mo=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ka=(e,t,s,n,o,i)=>{const r=o==="svg";t==="class"?Ta(e,n,r):t==="style"?Da(e,s,n):Wn(t)?Vs(t)||Ba(e,t,s,n,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Wa(e,t,n,r))?(Ao(e,t,n),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Ro(e,t,n,r,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!Se(n))?Ao(e,Ge(t),n,i,t):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),Ro(e,t,n,r))};function Wa(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&Mo(t)&&$(s));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return Mo(t)&&Se(s)?!1:t in e}const Gt=e=>{const t=e.props["onUpdate:modelValue"]||!1;return U(t)?s=>On(t,s):t};function Ga(e){e.target.composing=!0}function Io(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const dt=Symbol("_assign"),be={created(e,{modifiers:{lazy:t,trim:s,number:n}},o){e[dt]=Gt(o);const i=n||o.props&&o.props.type==="number";Ct(e,t?"change":"input",r=>{if(r.target.composing)return;let l=e.value;s&&(l=l.trim()),i&&(l=Dn(l)),e[dt](l)}),s&&Ct(e,"change",()=>{e.value=e.value.trim()}),t||(Ct(e,"compositionstart",Ga),Ct(e,"compositionend",Io),Ct(e,"change",Io))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:n,trim:o,number:i}},r){if(e[dt]=Gt(r),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?Dn(e.value):e.value,u=t??"";l!==u&&(document.activeElement===e&&e.type!=="range"&&(n&&t===s||o&&e.value.trim()===u)||(e.value=u))}},za={deep:!0,created(e,t,s){e[dt]=Gt(s),Ct(e,"change",()=>{const n=e._modelValue,o=bn(e),i=e.checked,r=e[dt];if(U(n)){const l=Ns(n,o),u=l!==-1;if(i&&!u)r(n.concat(o));else if(!i&&u){const p=[...n];p.splice(l,1),r(p)}}else if(Yt(n)){const l=new Set(n);i?l.add(o):l.delete(o),r(l)}else r(fr(e,i))})},mounted:jo,beforeUpdate(e,t,s){e[dt]=Gt(s),jo(e,t,s)}};function jo(e,{value:t,oldValue:s},n){e._modelValue=t;let o;if(U(t))o=Ns(t,n.props.value)>-1;else if(Yt(t))o=t.has(n.props.value);else{if(t===s)return;o=kn(t,fr(e,!0))}e.checked!==o&&(e.checked=o)}const Ja={deep:!0,created(e,{value:t,modifiers:{number:s}},n){const o=Yt(t);Ct(e,"change",()=>{const i=Array.prototype.filter.call(e.options,r=>r.selected).map(r=>s?Dn(bn(r)):bn(r));e[dt](e.multiple?o?new Set(i):i:i[0]),e._assigning=!0,Zn(()=>{e._assigning=!1})}),e[dt]=Gt(n)},mounted(e,{value:t}){Do(e,t)},beforeUpdate(e,t,s){e[dt]=Gt(s)},updated(e,{value:t}){e._assigning||Do(e,t)}};function Do(e,t){const s=e.multiple,n=U(t);if(!(s&&!n&&!Yt(t))){for(let o=0,i=e.options.length;oString(p)===String(l)):r.selected=Ns(t,l)>-1}else r.selected=t.has(l);else if(kn(bn(r),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!s&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function bn(e){return"_value"in e?e._value:e.value}function fr(e,t){const s=t?"_trueValue":"_falseValue";return s in e?e[s]:t}const Ya=["ctrl","shift","alt","meta"],Qa={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Ya.some(s=>e[`${s}Key`]&&!t.includes(s))},ct=(e,t)=>{const s=e._withMods||(e._withMods={}),n=t.join(".");return s[n]||(s[n]=(o,...i)=>{for(let r=0;r{const t=Xa().createApp(...e),{mount:s}=t;return t.mount=n=>{const o=tc(n);if(!o)return;const i=t._component;!$(i)&&!i.render&&!i.template&&(i.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const r=s(o,!1,ec(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),r},t};function ec(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function tc(e){return Se(e)?document.querySelector(e):e}/*! + * pinia v2.3.1 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */let dr;const ns=e=>dr=e,hr=Symbol();function Os(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var fn;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(fn||(fn={}));function nc(){const e=fi(!0),t=e.run(()=>Q({}));let s=[],n=[];const o=Js({install(i){ns(o),o._a=i,i.provide(hr,o),i.config.globalProperties.$pinia=o,n.forEach(r=>s.push(r)),n=[]},use(i){return this._a?s.push(i):n.push(i),this},_p:s,_a:null,_e:e,_s:new Map,state:t});return o}const pr=()=>{};function Fo(e,t,s,n=pr){e.push(t);const o=()=>{const i=e.indexOf(t);i>-1&&(e.splice(i,1),n())};return!s&&di()&&qr(o),o}function Bt(e,...t){e.slice().forEach(s=>{s(...t)})}const sc=e=>e(),Bo=Symbol(),gs=Symbol();function Ts(e,t){e instanceof Map&&t instanceof Map?t.forEach((s,n)=>e.set(n,s)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const s in t){if(!t.hasOwnProperty(s))continue;const n=t[s],o=e[s];Os(o)&&Os(n)&&e.hasOwnProperty(s)&&!we(n)&&!Et(n)?e[s]=Ts(o,n):e[s]=n}return e}const oc=Symbol();function ic(e){return!Os(e)||!e.hasOwnProperty(oc)}const{assign:bt}=Object;function rc(e){return!!(we(e)&&e.effect)}function lc(e,t,s,n){const{state:o,actions:i,getters:r}=t,l=s.state.value[e];let u;function p(){l||(s.state.value[e]=o?o():{});const d=fl(s.state.value[e]);return bt(d,i,Object.keys(r||{}).reduce((m,v)=>(m[v]=Js(Ee(()=>{ns(s);const c=s._s.get(e);return r[v].call(c,c)})),m),{}))}return u=mr(e,p,t,s,n,!0),u}function mr(e,t,s={},n,o,i){let r;const l=bt({actions:{}},s),u={deep:!0};let p,d,m=[],v=[],c;const C=n.state.value[e];!i&&!C&&(n.state.value[e]={}),Q({});let T;function G(Z){let Y;p=d=!1,typeof Z=="function"?(Z(n.state.value[e]),Y={type:fn.patchFunction,storeId:e,events:c}):(Ts(n.state.value[e],Z),Y={type:fn.patchObject,payload:Z,storeId:e,events:c});const oe=T=Symbol();Zn().then(()=>{T===oe&&(p=!0)}),d=!0,Bt(m,Y,n.state.value[e])}const x=i?function(){const{state:Y}=s,oe=Y?Y():{};this.$patch(he=>{bt(he,oe)})}:pr;function I(){r.stop(),m=[],v=[],n._s.delete(e)}const V=(Z,Y="")=>{if(Bo in Z)return Z[gs]=Y,Z;const oe=function(){ns(n);const he=Array.from(arguments),ae=[],_e=[];function ze(X){ae.push(X)}function Je(X){_e.push(X)}Bt(v,{args:he,name:oe[gs],store:P,after:ze,onError:Je});let pe;try{pe=Z.apply(this&&this.$id===e?this:P,he)}catch(X){throw Bt(_e,X),X}return pe instanceof Promise?pe.then(X=>(Bt(ae,X),X)).catch(X=>(Bt(_e,X),Promise.reject(X))):(Bt(ae,pe),pe)};return oe[Bo]=!0,oe[gs]=Y,oe},D={_p:n,$id:e,$onAction:Fo.bind(null,v),$patch:G,$reset:x,$subscribe(Z,Y={}){const oe=Fo(m,Z,Y.detached,()=>he()),he=r.run(()=>cn(()=>n.state.value[e],ae=>{(Y.flush==="sync"?d:p)&&Z({storeId:e,type:fn.direct,events:c},ae)},bt({},u,Y)));return oe},$dispose:I},P=Cn(D);n._s.set(e,P);const z=(n._a&&n._a.runWithContext||sc)(()=>n._e.run(()=>(r=fi()).run(()=>t({action:V}))));for(const Z in z){const Y=z[Z];if(we(Y)&&!rc(Y)||Et(Y))i||(C&&ic(Y)&&(we(Y)?Y.value=C[Z]:Ts(Y,C[Z])),n.state.value[e][Z]=Y);else if(typeof Y=="function"){const oe=V(Y,Z);z[Z]=oe,l.actions[Z]=Y}}return bt(P,z),bt(se(P),z),Object.defineProperty(P,"$state",{get:()=>n.state.value[e],set:Z=>{G(Y=>{bt(Y,Z)})}}),n._p.forEach(Z=>{bt(P,r.run(()=>Z({store:P,app:n._a,pinia:n,options:l})))}),C&&i&&s.hydrate&&s.hydrate(P.$state,C),p=!0,d=!0,P}/*! #__NO_SIDE_EFFECTS__ */function ac(e,t,s){let n,o;const i=typeof t=="function";n=e,o=i?s:t;function r(l,u){const p=Gl();return l=l||(p?Qe(hr,null):null),l&&ns(l),l=dr,l._s.has(n)||(i?mr(n,t,o,l):lc(n,o,l)),l._s.get(n)}return r.$id=n,r}/*! + * vue-router v4.5.1 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */const Nt=typeof document<"u";function gr(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function cc(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&gr(e.default)}const re=Object.assign;function vs(e,t){const s={};for(const n in t){const o=t[n];s[n]=Ze(o)?o.map(e):e(o)}return s}const dn=()=>{},Ze=Array.isArray,vr=/#/g,uc=/&/g,fc=/\//g,dc=/=/g,hc=/\?/g,_r=/\+/g,pc=/%5B/g,mc=/%5D/g,br=/%5E/g,gc=/%60/g,yr=/%7B/g,vc=/%7C/g,wr=/%7D/g,_c=/%20/g;function eo(e){return encodeURI(""+e).replace(vc,"|").replace(pc,"[").replace(mc,"]")}function bc(e){return eo(e).replace(yr,"{").replace(wr,"}").replace(br,"^")}function Ms(e){return eo(e).replace(_r,"%2B").replace(_c,"+").replace(vr,"%23").replace(uc,"%26").replace(gc,"`").replace(yr,"{").replace(wr,"}").replace(br,"^")}function yc(e){return Ms(e).replace(dc,"%3D")}function wc(e){return eo(e).replace(vr,"%23").replace(hc,"%3F")}function Sc(e){return e==null?"":wc(e).replace(fc,"%2F")}function yn(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const kc=/\/$/,Cc=e=>e.replace(kc,"");function _s(e,t,s="/"){let n,o={},i="",r="";const l=t.indexOf("#");let u=t.indexOf("?");return l=0&&(u=-1),u>-1&&(n=t.slice(0,u),i=t.slice(u+1,l>-1?l:t.length),o=e(i)),l>-1&&(n=n||t.slice(0,l),r=t.slice(l,t.length)),n=Rc(n??t,s),{fullPath:n+(i&&"?")+i+r,path:n,query:o,hash:yn(r)}}function xc(e,t){const s=t.query?e(t.query):"";return t.path+(s&&"?")+s+(t.hash||"")}function Lo(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Ec(e,t,s){const n=t.matched.length-1,o=s.matched.length-1;return n>-1&&n===o&&zt(t.matched[n],s.matched[o])&&Sr(t.params,s.params)&&e(t.query)===e(s.query)&&t.hash===s.hash}function zt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Sr(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const s in e)if(!Pc(e[s],t[s]))return!1;return!0}function Pc(e,t){return Ze(e)?No(e,t):Ze(t)?No(t,e):e===t}function No(e,t){return Ze(t)?e.length===t.length&&e.every((s,n)=>s===t[n]):e.length===1&&e[0]===t}function Rc(e,t){if(e.startsWith("/"))return e;if(!e)return t;const s=t.split("/"),n=e.split("/"),o=n[n.length-1];(o===".."||o===".")&&n.push("");let i=s.length-1,r,l;for(r=0;r1&&i--;else break;return s.slice(0,i).join("/")+"/"+n.slice(r).join("/")}const _t={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var wn;(function(e){e.pop="pop",e.push="push"})(wn||(wn={}));var hn;(function(e){e.back="back",e.forward="forward",e.unknown=""})(hn||(hn={}));function Ac(e){if(!e)if(Nt){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Cc(e)}const Oc=/^[^#]+#/;function Tc(e,t){return e.replace(Oc,"#")+t}function Mc(e,t){const s=document.documentElement.getBoundingClientRect(),n=e.getBoundingClientRect();return{behavior:t.behavior,left:n.left-s.left-(t.left||0),top:n.top-s.top-(t.top||0)}}const ss=()=>({left:window.scrollX,top:window.scrollY});function Ic(e){let t;if("el"in e){const s=e.el,n=typeof s=="string"&&s.startsWith("#"),o=typeof s=="string"?n?document.getElementById(s.slice(1)):document.querySelector(s):s;if(!o)return;t=Mc(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Ho(e,t){return(history.state?history.state.position-t:-1)+e}const Is=new Map;function jc(e,t){Is.set(e,t)}function Dc(e){const t=Is.get(e);return Is.delete(e),t}let Vc=()=>location.protocol+"//"+location.host;function kr(e,t){const{pathname:s,search:n,hash:o}=t,i=e.indexOf("#");if(i>-1){let l=o.includes(e.slice(i))?e.slice(i).length:1,u=o.slice(l);return u[0]!=="/"&&(u="/"+u),Lo(u,"")}return Lo(s,e)+n+o}function Fc(e,t,s,n){let o=[],i=[],r=null;const l=({state:v})=>{const c=kr(e,location),C=s.value,T=t.value;let G=0;if(v){if(s.value=c,t.value=v,r&&r===C){r=null;return}G=T?v.position-T.position:0}else n(c);o.forEach(x=>{x(s.value,C,{delta:G,type:wn.pop,direction:G?G>0?hn.forward:hn.back:hn.unknown})})};function u(){r=s.value}function p(v){o.push(v);const c=()=>{const C=o.indexOf(v);C>-1&&o.splice(C,1)};return i.push(c),c}function d(){const{history:v}=window;v.state&&v.replaceState(re({},v.state,{scroll:ss()}),"")}function m(){for(const v of i)v();i=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",d)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",d,{passive:!0}),{pauseListeners:u,listen:p,destroy:m}}function qo(e,t,s,n=!1,o=!1){return{back:e,current:t,forward:s,replaced:n,position:window.history.length,scroll:o?ss():null}}function Bc(e){const{history:t,location:s}=window,n={value:kr(e,s)},o={value:t.state};o.value||i(n.value,{back:null,current:n.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(u,p,d){const m=e.indexOf("#"),v=m>-1?(s.host&&document.querySelector("base")?e:e.slice(m))+u:Vc()+e+u;try{t[d?"replaceState":"pushState"](p,"",v),o.value=p}catch(c){console.error(c),s[d?"replace":"assign"](v)}}function r(u,p){const d=re({},t.state,qo(o.value.back,u,o.value.forward,!0),p,{position:o.value.position});i(u,d,!0),n.value=u}function l(u,p){const d=re({},o.value,t.state,{forward:u,scroll:ss()});i(d.current,d,!0);const m=re({},qo(n.value,u,null),{position:d.position+1},p);i(u,m,!1),n.value=u}return{location:n,state:o,push:l,replace:r}}function Lc(e){e=Ac(e);const t=Bc(e),s=Fc(e,t.state,t.location,t.replace);function n(i,r=!0){r||s.pauseListeners(),history.go(i)}const o=re({location:"",base:e,go:n,createHref:Tc.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}function Nc(e){return typeof e=="string"||e&&typeof e=="object"}function Cr(e){return typeof e=="string"||typeof e=="symbol"}const xr=Symbol("");var Uo;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Uo||(Uo={}));function Jt(e,t){return re(new Error,{type:e,[xr]:!0},t)}function lt(e,t){return e instanceof Error&&xr in e&&(t==null||!!(e.type&t))}const Ko="[^/]+?",Hc={sensitive:!1,strict:!1,start:!0,end:!0},qc=/[.+*?^${}()[\]/\\]/g;function Uc(e,t){const s=re({},Hc,t),n=[];let o=s.start?"^":"";const i=[];for(const p of e){const d=p.length?[]:[90];s.strict&&!p.length&&(o+="/");for(let m=0;mt.length?t.length===1&&t[0]===80?1:-1:0}function Er(e,t){let s=0;const n=e.score,o=t.score;for(;s0&&t[t.length-1]<0}const Wc={type:0,value:""},Gc=/[a-zA-Z0-9_]/;function zc(e){if(!e)return[[]];if(e==="/")return[[Wc]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(c){throw new Error(`ERR (${s})/"${p}": ${c}`)}let s=0,n=s;const o=[];let i;function r(){i&&o.push(i),i=[]}let l=0,u,p="",d="";function m(){p&&(s===0?i.push({type:0,value:p}):s===1||s===2||s===3?(i.length>1&&(u==="*"||u==="+")&&t(`A repeatable param (${p}) must be alone in its segment. eg: '/:ids+.`),i.push({type:1,value:p,regexp:d,repeatable:u==="*"||u==="+",optional:u==="*"||u==="?"})):t("Invalid state to consume buffer"),p="")}function v(){p+=u}for(;l{r(V)}:dn}function r(m){if(Cr(m)){const v=n.get(m);v&&(n.delete(m),s.splice(s.indexOf(v),1),v.children.forEach(r),v.alias.forEach(r))}else{const v=s.indexOf(m);v>-1&&(s.splice(v,1),m.record.name&&n.delete(m.record.name),m.children.forEach(r),m.alias.forEach(r))}}function l(){return s}function u(m){const v=Xc(m,s);s.splice(v,0,m),m.record.name&&!Jo(m)&&n.set(m.record.name,m)}function p(m,v){let c,C={},T,G;if("name"in m&&m.name){if(c=n.get(m.name),!c)throw Jt(1,{location:m});G=c.record.name,C=re(Go(v.params,c.keys.filter(V=>!V.optional).concat(c.parent?c.parent.keys.filter(V=>V.optional):[]).map(V=>V.name)),m.params&&Go(m.params,c.keys.map(V=>V.name))),T=c.stringify(C)}else if(m.path!=null)T=m.path,c=s.find(V=>V.re.test(T)),c&&(C=c.parse(T),G=c.record.name);else{if(c=v.name?n.get(v.name):s.find(V=>V.re.test(v.path)),!c)throw Jt(1,{location:m,currentLocation:v});G=c.record.name,C=re({},v.params,m.params),T=c.stringify(C)}const x=[];let I=c;for(;I;)x.unshift(I.record),I=I.parent;return{name:G,path:T,params:C,matched:x,meta:Zc(x)}}e.forEach(m=>i(m));function d(){s.length=0,n.clear()}return{addRoute:i,resolve:p,removeRoute:r,clearRoutes:d,getRoutes:l,getRecordMatcher:o}}function Go(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:Qc(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 Qc(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 Jo(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Zc(e){return e.reduce((t,s)=>re(t,s.meta),{})}function Yo(e,t){const s={};for(const n in e)s[n]=n in t?t[n]:e[n];return s}function Xc(e,t){let s=0,n=t.length;for(;s!==n;){const i=s+n>>1;Er(e,t[i])<0?n=i:s=i+1}const o=$c(e);return o&&(n=t.lastIndexOf(o,n-1)),n}function $c(e){let t=e;for(;t=t.parent;)if(Pr(t)&&Er(e,t)===0)return t}function Pr({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function eu(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;oi&&Ms(i)):[n&&Ms(n)]).forEach(i=>{i!==void 0&&(t+=(t.length?"&":"")+s,i!=null&&(t+="="+i))})}return t}function tu(e){const t={};for(const s in e){const n=e[s];n!==void 0&&(t[s]=Ze(n)?n.map(o=>o==null?null:""+o):n==null?n:""+n)}return t}const nu=Symbol(""),Zo=Symbol(""),os=Symbol(""),Rr=Symbol(""),js=Symbol("");function en(){let e=[];function t(n){return e.push(n),()=>{const o=e.indexOf(n);o>-1&&e.splice(o,1)}}function s(){e=[]}return{add:t,list:()=>e.slice(),reset:s}}function St(e,t,s,n,o,i=r=>r()){const r=n&&(n.enterCallbacks[o]=n.enterCallbacks[o]||[]);return()=>new Promise((l,u)=>{const p=v=>{v===!1?u(Jt(4,{from:s,to:t})):v instanceof Error?u(v):Nc(v)?u(Jt(2,{from:t,to:v})):(r&&n.enterCallbacks[o]===r&&typeof v=="function"&&r.push(v),l())},d=i(()=>e.call(n&&n.instances[o],t,s,p));let m=Promise.resolve(d);e.length<3&&(m=m.then(p)),m.catch(v=>u(v))})}function bs(e,t,s,n,o=i=>i()){const i=[];for(const r of e)for(const l in r.components){let u=r.components[l];if(!(t!=="beforeRouteEnter"&&!r.instances[l]))if(gr(u)){const d=(u.__vccOpts||u)[t];d&&i.push(St(d,s,n,r,l,o))}else{let p=u();i.push(()=>p.then(d=>{if(!d)throw new Error(`Couldn't resolve component "${l}" at "${r.path}"`);const m=cc(d)?d.default:d;r.mods[l]=d,r.components[l]=m;const c=(m.__vccOpts||m)[t];return c&&St(c,s,n,r,l,o)()}))}}return i}function Xo(e){const t=Qe(os),s=Qe(Rr),n=Ee(()=>{const u=Ut(e.to);return t.resolve(u)}),o=Ee(()=>{const{matched:u}=n.value,{length:p}=u,d=u[p-1],m=s.matched;if(!d||!m.length)return-1;const v=m.findIndex(zt.bind(null,d));if(v>-1)return v;const c=$o(u[p-2]);return p>1&&$o(d)===c&&m[m.length-1].path!==c?m.findIndex(zt.bind(null,u[p-2])):v}),i=Ee(()=>o.value>-1&&lu(s.params,n.value.params)),r=Ee(()=>o.value>-1&&o.value===s.matched.length-1&&Sr(s.params,n.value.params));function l(u={}){if(ru(u)){const p=t[Ut(e.replace)?"replace":"push"](Ut(e.to)).catch(dn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>p),p}return Promise.resolve()}return{route:n,href:Ee(()=>n.value.href),isActive:i,isExactActive:r,navigate:l}}function su(e){return e.length===1?e[0]:e}const ou=Vi({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:Xo,setup(e,{slots:t}){const s=Cn(Xo(e)),{options:n}=Qe(os),o=Ee(()=>({[ei(e.activeClass,n.linkActiveClass,"router-link-active")]:s.isActive,[ei(e.exactActiveClass,n.linkExactActiveClass,"router-link-exact-active")]:s.isExactActive}));return()=>{const i=t.default&&su(t.default(s));return e.custom?i:cr("a",{"aria-current":s.isExactActive?e.ariaCurrentValue:null,href:s.href,onClick:s.navigate,class:o.value},i)}}}),iu=ou;function ru(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 lu(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(!Ze(o)||o.length!==n.length||n.some((i,r)=>i!==o[r]))return!1}return!0}function $o(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const ei=(e,t,s)=>e??t??s,au=Vi({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:s}){const n=Qe(js),o=Ee(()=>e.route||n.value),i=Qe(Zo,0),r=Ee(()=>{let p=Ut(i);const{matched:d}=o.value;let m;for(;(m=d[p])&&!m.components;)p++;return p}),l=Ee(()=>o.value.matched[r.value]);Tn(Zo,Ee(()=>r.value+1)),Tn(nu,l),Tn(js,o);const u=Q();return cn(()=>[u.value,l.value,e.name],([p,d,m],[v,c,C])=>{d&&(d.instances[m]=p,c&&c!==d&&p&&p===v&&(d.leaveGuards.size||(d.leaveGuards=c.leaveGuards),d.updateGuards.size||(d.updateGuards=c.updateGuards))),p&&d&&(!c||!zt(d,c)||!v)&&(d.enterCallbacks[m]||[]).forEach(T=>T(p))},{flush:"post"}),()=>{const p=o.value,d=e.name,m=l.value,v=m&&m.components[d];if(!v)return ti(s.default,{Component:v,route:p});const c=m.props[d],C=c?c===!0?p.params:typeof c=="function"?c(p):c:null,G=cr(v,re({},C,t,{onVnodeUnmounted:x=>{x.component.isUnmounted&&(m.instances[d]=null)},ref:u}));return ti(s.default,{Component:G,route:p})||G}}});function ti(e,t){if(!e)return null;const s=e(t);return s.length===1?s[0]:s}const cu=au;function uu(e){const t=Yc(e.routes,e),s=e.parseQuery||eu,n=e.stringifyQuery||Qo,o=e.history,i=en(),r=en(),l=en(),u=al(_t);let p=_t;Nt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=vs.bind(null,y=>""+y),m=vs.bind(null,Sc),v=vs.bind(null,yn);function c(y,j){let O,B;return Cr(y)?(O=t.getRecordMatcher(y),B=j):B=y,t.addRoute(B,O)}function C(y){const j=t.getRecordMatcher(y);j&&t.removeRoute(j)}function T(){return t.getRoutes().map(y=>y.record)}function G(y){return!!t.getRecordMatcher(y)}function x(y,j){if(j=re({},j||u.value),typeof y=="string"){const g=_s(s,y,j.path),w=t.resolve({path:g.path},j),S=o.createHref(g.fullPath);return re(g,w,{params:v(w.params),hash:yn(g.hash),redirectedFrom:void 0,href:S})}let O;if(y.path!=null)O=re({},y,{path:_s(s,y.path,j.path).path});else{const g=re({},y.params);for(const w in g)g[w]==null&&delete g[w];O=re({},y,{params:m(g)}),j.params=m(j.params)}const B=t.resolve(O,j),ce=y.hash||"";B.params=d(v(B.params));const f=xc(n,re({},y,{hash:bc(ce),path:B.path})),h=o.createHref(f);return re({fullPath:f,hash:ce,query:n===Qo?tu(y.query):y.query||{}},B,{redirectedFrom:void 0,href:h})}function I(y){return typeof y=="string"?_s(s,y,u.value.path):re({},y)}function V(y,j){if(p!==y)return Jt(8,{from:j,to:y})}function D(y){return z(y)}function P(y){return D(re(I(y),{replace:!0}))}function ne(y){const j=y.matched[y.matched.length-1];if(j&&j.redirect){const{redirect:O}=j;let B=typeof O=="function"?O(y):O;return typeof B=="string"&&(B=B.includes("?")||B.includes("#")?B=I(B):{path:B},B.params={}),re({query:y.query,hash:y.hash,params:B.path!=null?{}:y.params},B)}}function z(y,j){const O=p=x(y),B=u.value,ce=y.state,f=y.force,h=y.replace===!0,g=ne(O);if(g)return z(re(I(g),{state:typeof g=="object"?re({},ce,g.state):ce,force:f,replace:h}),j||O);const w=O;w.redirectedFrom=j;let S;return!f&&Ec(n,B,O)&&(S=Jt(16,{to:w,from:B}),Le(B,B,!0,!1)),(S?Promise.resolve(S):oe(w,B)).catch(b=>lt(b)?lt(b,2)?b:Xe(b):ee(b,w,B)).then(b=>{if(b){if(lt(b,2))return z(re({replace:h},I(b.to),{state:typeof b.to=="object"?re({},ce,b.to.state):ce,force:f}),j||w)}else b=ae(w,B,!0,h,ce);return he(w,B,b),b})}function Z(y,j){const O=V(y,j);return O?Promise.reject(O):Promise.resolve()}function Y(y){const j=vt.values().next().value;return j&&typeof j.runWithContext=="function"?j.runWithContext(y):y()}function oe(y,j){let O;const[B,ce,f]=fu(y,j);O=bs(B.reverse(),"beforeRouteLeave",y,j);for(const g of B)g.leaveGuards.forEach(w=>{O.push(St(w,y,j))});const h=Z.bind(null,y,j);return O.push(h),De(O).then(()=>{O=[];for(const g of i.list())O.push(St(g,y,j));return O.push(h),De(O)}).then(()=>{O=bs(ce,"beforeRouteUpdate",y,j);for(const g of ce)g.updateGuards.forEach(w=>{O.push(St(w,y,j))});return O.push(h),De(O)}).then(()=>{O=[];for(const g of f)if(g.beforeEnter)if(Ze(g.beforeEnter))for(const w of g.beforeEnter)O.push(St(w,y,j));else O.push(St(g.beforeEnter,y,j));return O.push(h),De(O)}).then(()=>(y.matched.forEach(g=>g.enterCallbacks={}),O=bs(f,"beforeRouteEnter",y,j,Y),O.push(h),De(O))).then(()=>{O=[];for(const g of r.list())O.push(St(g,y,j));return O.push(h),De(O)}).catch(g=>lt(g,8)?g:Promise.reject(g))}function he(y,j,O){l.list().forEach(B=>Y(()=>B(y,j,O)))}function ae(y,j,O,B,ce){const f=V(y,j);if(f)return f;const h=j===_t,g=Nt?history.state:{};O&&(B||h?o.replace(y.fullPath,re({scroll:h&&g&&g.scroll},ce)):o.push(y.fullPath,ce)),u.value=y,Le(y,j,O,h),Xe()}let _e;function ze(){_e||(_e=o.listen((y,j,O)=>{if(!Vt.listening)return;const B=x(y),ce=ne(B);if(ce){z(re(ce,{replace:!0,force:!0}),B).catch(dn);return}p=B;const f=u.value;Nt&&jc(Ho(f.fullPath,O.delta),ss()),oe(B,f).catch(h=>lt(h,12)?h:lt(h,2)?(z(re(I(h.to),{force:!0}),B).then(g=>{lt(g,20)&&!O.delta&&O.type===wn.pop&&o.go(-1,!1)}).catch(dn),Promise.reject()):(O.delta&&o.go(-O.delta,!1),ee(h,B,f))).then(h=>{h=h||ae(B,f,!1),h&&(O.delta&&!lt(h,8)?o.go(-O.delta,!1):O.type===wn.pop&<(h,20)&&o.go(-1,!1)),he(B,f,h)}).catch(dn)}))}let Je=en(),pe=en(),X;function ee(y,j,O){Xe(y);const B=pe.list();return B.length?B.forEach(ce=>ce(y,j,O)):console.error(y),Promise.reject(y)}function Ne(){return X&&u.value!==_t?Promise.resolve():new Promise((y,j)=>{Je.add([y,j])})}function Xe(y){return X||(X=!y,ze(),Je.list().forEach(([j,O])=>y?O(y):j()),Je.reset()),y}function Le(y,j,O,B){const{scrollBehavior:ce}=e;if(!Nt||!ce)return Promise.resolve();const f=!O&&Dc(Ho(y.fullPath,0))||(B||!O)&&history.state&&history.state.scroll||null;return Zn().then(()=>ce(y,j,f)).then(h=>h&&Ic(h)).catch(h=>ee(h,y,j))}const Pe=y=>o.go(y);let gt;const vt=new Set,Vt={currentRoute:u,listening:!0,addRoute:c,removeRoute:C,clearRoutes:t.clearRoutes,hasRoute:G,getRoutes:T,resolve:x,options:e,push:D,replace:P,go:Pe,back:()=>Pe(-1),forward:()=>Pe(1),beforeEach:i.add,beforeResolve:r.add,afterEach:l.add,onError:pe.add,isReady:Ne,install(y){const j=this;y.component("RouterLink",iu),y.component("RouterView",cu),y.config.globalProperties.$router=j,Object.defineProperty(y.config.globalProperties,"$route",{enumerable:!0,get:()=>Ut(u)}),Nt&&!gt&&u.value===_t&&(gt=!0,D(o.location).catch(ce=>{}));const O={};for(const ce in _t)Object.defineProperty(O,ce,{get:()=>u.value[ce],enumerable:!0});y.provide(os,j),y.provide(Rr,Pi(O)),y.provide(js,u);const B=y.unmount;vt.add(y),y.unmount=function(){vt.delete(y),vt.size<1&&(p=_t,_e&&_e(),_e=null,u.value=_t,gt=!1,X=!1),B()}}};function De(y){return y.reduce((j,O)=>j.then(()=>Y(O)),Promise.resolve())}return Vt}function fu(e,t){const s=[],n=[],o=[],i=Math.max(t.matched.length,e.matched.length);for(let r=0;rzt(p,l))?n.push(l):s.push(l));const u=e.matched[r];u&&(t.matched.find(p=>zt(p,u))||o.push(u))}return[s,n,o]}function Ar(){return Qe(os)}const is=ac("auth",()=>{const e=Q(null),t=Q(null),s=Q(!1),n=(l,u)=>{e.value=l,t.value=u,s.value=!0,localStorage.setItem("auth_token",u),localStorage.setItem("user",JSON.stringify(l))},o=()=>{e.value=null,t.value=null,s.value=!1,localStorage.removeItem("auth_token"),localStorage.removeItem("user")};return{user:e,token:t,isAuthenticated:s,login:n,logout:o,checkAuth:()=>{const l=localStorage.getItem("auth_token"),u=localStorage.getItem("user");l&&u?(t.value=l,e.value=JSON.parse(u),s.value=!0):o()},getAuthHeaders:()=>t.value?{"Content-Type":"application/json",Authorization:`Bearer ${t.value}`}:{}}}),Zt=(e,t)=>{const s=e.__vccOpts||e;for(const[n,o]of t)s[n]=o;return s},du={name:"Home",setup(){const e=Q({}),t=async()=>{try{const s=await fetch("/api/public/page-content");s.ok&&(e.value=await s.json())}catch(s){console.error("Failed to fetch page content:",s)}};return Qt(()=>{t()}),{content:e}}},hu={class:"home"},pu={class:"hero"},mu={class:"features"},gu={class:"feature-card"},vu={class:"feature-card"},_u={class:"feature-card"},bu={class:"feature-card"},yu={class:"cta"},wu={class:"cta-buttons"};function Su(e,t,s,n,o,i){const r=Hn("router-link");return q(),W("div",hu,[a("div",pu,[a("h1",null,F(n.content.home_hero_title||"Welkom bij Fiets Service Centrum"),1),a("p",null,F(n.content.home_hero_subtitle||"Professionele fietsreparatie en onderhoudsdiensten"),1)]),a("div",mu,[a("div",gu,[a("h3",null,F(n.content.home_feature_1_title||"🔧 Deskundige Reparaties"),1),a("p",null,F(n.content.home_feature_1_text||"Professionele fietsmonteurs met jarenlange ervaring"),1)]),a("div",vu,[a("h3",null,F(n.content.home_feature_2_title||"⚡ Snelle Service"),1),a("p",null,F(n.content.home_feature_2_text||"Snelle doorlooptijden voor de meeste reparaties"),1)]),a("div",_u,[a("h3",null,F(n.content.home_feature_3_title||"💰 Eerlijke Prijzen"),1),a("p",null,F(n.content.home_feature_3_text||"Concurrerende tarieven zonder verborgen kosten"),1)]),a("div",bu,[a("h3",null,F(n.content.home_feature_4_title||"📅 Eenvoudig Boeken"),1),a("p",null,F(n.content.home_feature_4_text||"Eenvoudig online boekingssysteem"),1)])]),a("div",yu,[a("h2",null,F(n.content.home_cta_title||"Klaar om je fiets te laten repareren?"),1),a("p",null,F(n.content.home_cta_subtitle||"Boek je afspraak online en krijg je fiets weer in topconditie."),1),a("div",wu,[ye(r,{to:"/booking",class:"cta-button"},{default:nt(()=>[ke(F(n.content.home_cta_button_1_text||"Nu Service Boeken"),1)]),_:1}),ye(r,{to:"/pricelist",class:"cta-button secondary"},{default:nt(()=>[ke(F(n.content.home_cta_button_2_text||"💰 Prijslijst Bekijken"),1)]),_:1})])])])}const ku=Zt(du,[["render",Su],["__scopeId","data-v-677cbdbe"]]),Cu={name:"Booking",setup(){const e=Q({name:"",address:"",place:"",email:"",phone:"",repair_description:"",requested_date:"",requested_time:""}),t=Q(!1),s=Q(""),n=Q(!1),o=Q(null),i=Q({}),r=Q(new Date),l=Q([]),u=["Zo","Ma","Di","Wo","Do","Vr","Za"],p=Ee(()=>{const P=new Date;return P.setDate(P.getDate()+1),P.toISOString().split("T")[0]}),d=Ee(()=>r.value.toLocaleDateString("nl-NL",{month:"long",year:"numeric"})),m=Ee(()=>{const P=r.value.getFullYear(),ne=r.value.getMonth(),z=new Date(P,ne,1),Z=new Date(P,ne+1,0),Y=z.getDay(),oe=Z.getDay(),he=[];for(let ae=Y-1;ae>=0;ae--){const _e=new Date(P,ne,-ae);he.push(v(_e,!1))}for(let ae=1;ae<=Z.getDate();ae++){const _e=new Date(P,ne,ae);he.push(v(_e,!0))}for(let ae=1;ae<=6-oe;ae++){const _e=new Date(P,ne+1,ae);he.push(v(_e,!1))}return he}),v=(P,ne)=>{const z=P.toISOString().split("T")[0],Z=new Date,Y=new Date;Y.setDate(Y.getDate()+1);const oe=z===Z.toISOString().split("T")[0],he=znew Date(ze.date).toISOString().split("T")[0]===z),_e=z===e.value.requested_date;return{date:z,day:P.getDate(),key:z,isCurrentMonth:ne,isToday:oe,isDisabled:he,isBlocked:ae,isSelected:_e}},c=async()=>{try{const P=await fetch("/api/public/blocked-dates");P.ok&&(l.value=await P.json())}catch(P){console.error("Failed to fetch blocked dates:",P)}},C=async()=>{try{const P=await fetch("/api/public/page-content");P.ok&&(i.value=await P.json())}catch(P){console.error("Failed to fetch page content:",P)}},T=()=>{r.value=new Date(r.value.getFullYear(),r.value.getMonth()-1,1)},G=()=>{r.value=new Date(r.value.getFullYear(),r.value.getMonth()+1,1)},x=P=>{P.isDisabled||P.isBlocked||(e.value.requested_date=P.date)},I=()=>!e.value.email&&!e.value.phone?(s.value="Geef alstublieft een e-mailadres of telefoonnummer op",!1):(s.value="",!0),V=async()=>{if(I()){t.value=!0,s.value="";try{const P=await fetch("/api/public/service-requests",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e.value)});if(!P.ok){const z=await P.json();throw new Error(z.message||"Aanvraag versturen mislukt")}const ne=await P.json();o.value=ne,n.value=!0,Object.keys(e.value).forEach(z=>{e.value[z]=""})}catch(P){s.value=P.message}finally{t.value=!1}}},D=()=>{n.value=!1,o.value=null};return Qt(()=>{const P=new Date;P.setDate(P.getDate()+1),e.value.requested_date=P.toISOString().split("T")[0],c(),C()}),{form:e,loading:t,formError:s,showSuccessModal:n,submittedRequest:o,content:i,minDate:p,submitForm:V,closeSuccessModal:D,currentDate:r,blockedDates:l,weekdays:u,calendarDates:m,currentMonthYear:d,previousMonth:T,nextMonth:G,selectDate:x}}},xu={class:"booking"},Eu={class:"booking-header"},Pu={class:"booking-form-container"},Ru={class:"form-row"},Au={class:"form-group"},Ou={class:"form-row"},Tu={class:"form-group"},Mu={class:"form-row"},Iu={class:"form-group"},ju={class:"form-row"},Du={class:"form-group"},Vu={class:"form-group"},Fu={class:"form-row"},Bu={class:"form-group full-width"},Lu={class:"form-row"},Nu={class:"form-group"},Hu={class:"custom-date-picker"},qu={class:"date-picker-header"},Uu={class:"current-month"},Ku={class:"date-picker-grid"},Wu=["onClick"],Gu={class:"form-group"},zu={key:0,class:"form-error"},Ju={class:"form-actions"},Yu=["disabled"],Qu={class:"modal-body"},Zu={class:"modal-footer"};function Xu(e,t,s,n,o,i){return q(),W("div",xu,[a("div",Eu,[a("h1",null,F(n.content.booking_header_title||"🚲 Boek Je Fiets Service"),1),a("p",null,F(n.content.booking_header_subtitle||"Vul het onderstaande formulier in om je fietsreparatie of onderhoud in te plannen"),1)]),a("div",Pu,[a("form",{onSubmit:t[10]||(t[10]=ct((...r)=>n.submitForm&&n.submitForm(...r),["prevent"])),class:"booking-form"},[a("div",Ru,[a("div",Au,[t[14]||(t[14]=a("label",{for:"name"},"Volledige Naam *",-1)),ve(a("input",{type:"text",id:"name","onUpdate:modelValue":t[0]||(t[0]=r=>n.form.name=r),required:"",placeholder:"Voer je volledige naam in"},null,512),[[be,n.form.name]])])]),a("div",Ou,[a("div",Tu,[t[15]||(t[15]=a("label",{for:"address"},"Adres *",-1)),ve(a("textarea",{id:"address","onUpdate:modelValue":t[1]||(t[1]=r=>n.form.address=r),required:"",placeholder:"Voer je volledige adres in",rows:"3"},null,512),[[be,n.form.address]])])]),a("div",Mu,[a("div",Iu,[t[16]||(t[16]=a("label",{for:"place"},"Plaats *",-1)),ve(a("input",{type:"text",id:"place","onUpdate:modelValue":t[2]||(t[2]=r=>n.form.place=r),required:"",placeholder:"Voer je plaats in"},null,512),[[be,n.form.place]])])]),a("div",ju,[a("div",Du,[t[17]||(t[17]=a("label",{for:"email"},"E-mail",-1)),ve(a("input",{type:"email",id:"email","onUpdate:modelValue":t[3]||(t[3]=r=>n.form.email=r),placeholder:"Voer je e-mailadres in"},null,512),[[be,n.form.email]])]),a("div",Vu,[t[18]||(t[18]=a("label",{for:"phone"},"Telefoon",-1)),ve(a("input",{type:"tel",id:"phone","onUpdate:modelValue":t[4]||(t[4]=r=>n.form.phone=r),placeholder:"Voer je telefoonnummer in"},null,512),[[be,n.form.phone]])])]),a("div",Fu,[a("div",Bu,[t[19]||(t[19]=a("label",{for:"repair_description"},"Wat moet er gerepareerd worden? *",-1)),ve(a("textarea",{id:"repair_description","onUpdate:modelValue":t[5]||(t[5]=r=>n.form.repair_description=r),required:"",placeholder:"Beschrijf het probleem met je fiets of welke service je nodig hebt",rows:"4"},null,512),[[be,n.form.repair_description]])])]),a("div",Lu,[a("div",Nu,[t[20]||(t[20]=a("label",{for:"requested_date"},"Gewenste Datum *",-1)),a("div",Hu,[a("div",qu,[a("button",{type:"button",onClick:t[6]||(t[6]=(...r)=>n.previousMonth&&n.previousMonth(...r)),class:"nav-btn"},"‹"),a("span",Uu,F(n.currentMonthYear),1),a("button",{type:"button",onClick:t[7]||(t[7]=(...r)=>n.nextMonth&&n.nextMonth(...r)),class:"nav-btn"},"›")]),a("div",Ku,[(q(!0),W(xe,null,kt(n.weekdays,r=>(q(),W("div",{class:"weekday-header",key:r},F(r),1))),128)),(q(!0),W(xe,null,kt(n.calendarDates,r=>(q(),W("div",{key:r.key,class:Mt(["calendar-date",{"other-month":!r.isCurrentMonth,disabled:r.isDisabled,blocked:r.isBlocked,selected:r.isSelected,today:r.isToday}]),onClick:l=>n.selectDate(r)},F(r.day),11,Wu))),128))]),ve(a("input",{type:"hidden",id:"requested_date","onUpdate:modelValue":t[8]||(t[8]=r=>n.form.requested_date=r),required:""},null,512),[[be,n.form.requested_date]])])]),a("div",Gu,[t[21]||(t[21]=a("label",{for:"requested_time"},"Gewenste Tijd *",-1)),ve(a("input",{type:"time",id:"requested_time","onUpdate:modelValue":t[9]||(t[9]=r=>n.form.requested_time=r),required:"",min:"08:00",max:"18:00"},null,512),[[be,n.form.requested_time]])])]),n.formError?(q(),W("div",zu,F(n.formError),1)):Oe("",!0),a("div",Ju,[a("button",{type:"submit",class:"submit-btn",disabled:n.loading},F(n.loading?"Versturen...":"Service Aanvraag Versturen"),9,Yu)])],32)]),n.showSuccessModal?(q(),W("div",{key:0,class:"modal-overlay",onClick:t[13]||(t[13]=(...r)=>n.closeSuccessModal&&n.closeSuccessModal(...r))},[a("div",{class:"modal-content",onClick:t[12]||(t[12]=ct(()=>{},["stop"]))},[t[24]||(t[24]=a("div",{class:"modal-header"},[a("h3",null,"✅ Service Aanvraag Verzonden!")],-1)),a("div",Qu,[t[23]||(t[23]=a("p",null,"Bedankt voor je service aanvraag. We nemen binnenkort contact met je op om je afspraak te bevestigen.",-1)),a("p",null,[t[22]||(t[22]=a("strong",null,"Aanvraag ID:",-1)),ke(" "+F(n.submittedRequest.id),1)])]),a("div",Zu,[a("button",{onClick:t[11]||(t[11]=(...r)=>n.closeSuccessModal&&n.closeSuccessModal(...r)),class:"btn-primary"},"Sluiten")])])])):Oe("",!0)])}const $u=Zt(Cu,[["render",Xu],["__scopeId","data-v-3d2c946f"]]),ef={name:"Admin",setup(){const e=Ar(),t=is(),s=Q("requests"),n=Q(!1),o=Q([]),i=Q([]),r=Q({}),l=Q([]),u=Q([]),p=Q(!1),d=Q(!1),m=Q(!1),v=Q(!1),c=Q(!1),C=Q(!1),T=Q(!1),G=Q(!1),x=Q(null),I=Q(null),V=Q(null),D=Q({date:"",reason:""}),P=Q({title:"",description:"",price:"",sort_order:0,is_active:!0}),ne=Q({message:""}),z=Q({message:""}),Z=Q([]),Y=Q(!1),oe=Q(!1),he=Q(!1),ae=[{id:"requests",label:"Service Aanvragen"},{id:"blocked",label:"Geblokkeerde Data"},{id:"pricelist",label:"Prijslijst"},{id:"content",label:"Pagina Teksten"},{id:"settings",label:"Instellingen"}],_e=Ee(()=>{const _=new Date;return _.setDate(_.getDate()+1),_.toISOString().split("T")[0]}),ze=_=>({pending:"In afwachting",confirmed:"Bevestigd",mail_sent:"Bevestigd mail verstuurd",completed:"Voltooid",cancelled:"Geannuleerd"})[_]||_,Je=_=>({email:"E-MAIL",sms:"SMS"})[_]||_.toUpperCase(),pe=_=>({admin_to_customer:"Naar Klant",customer_to_admin:"Van Klant"})[_]||_,X=async()=>{try{await fetch("/api/logout",{method:"POST",headers:t.getAuthHeaders()})}catch(_){console.error("Logout error:",_)}finally{t.logout(),e.push("/login")}},ee=async()=>{try{const _=await fetch("/api/service-requests",{headers:t.getAuthHeaders()});_.ok&&(o.value=await _.json())}catch(_){console.error("Failed to fetch requests:",_)}},Ne=async()=>{try{const _=await fetch("/api/blocked-dates",{headers:t.getAuthHeaders()});_.ok&&(i.value=await _.json())}catch(_){console.error("Failed to fetch blocked dates:",_)}},Xe=async()=>{try{const _=await fetch("/api/settings",{headers:t.getAuthHeaders()});_.ok&&(await _.json()).forEach(K=>{r.value[K.key]=K.value})}catch(_){console.error("Failed to fetch settings:",_)}},Le=async()=>{try{const _=await fetch("/api/admin/pricelist",{headers:t.getAuthHeaders()});_.ok&&(l.value=await _.json())}catch(_){console.error("Failed to fetch pricelist:",_)}},Pe=async()=>{try{const _=await fetch("/api/page-content",{headers:t.getAuthHeaders()});_.ok&&(u.value=await _.json())}catch(_){console.error("Failed to fetch page content:",_)}},gt=async()=>{n.value=!0,await ee(),n.value=!1},vt=async _=>{T.value=!0,p.value=!0;try{const L=await fetch(`/api/service-requests/${_.id}`,{headers:t.getAuthHeaders()});if(L.ok){const K=await L.json();K.actual_repair_date&&(K.actual_repair_date=K.actual_repair_date.split("T")[0]),x.value={...K}}else{const K=o.value.find(fe=>fe.id===_.id);K&&K.actual_repair_date&&(K.actual_repair_date=K.actual_repair_date.split("T")[0]),x.value=K?{...K}:{..._}}}catch(L){console.error("Failed to fetch latest request data:",L);const K=o.value.find(fe=>fe.id===_.id);K&&K.actual_repair_date&&(K.actual_repair_date=K.actual_repair_date.split("T")[0]),x.value=K?{...K}:{..._}}finally{T.value=!1}},Vt=()=>{p.value=!1,x.value=null},De=()=>{d.value=!1,I.value=null,D.value={date:"",reason:""}},y=()=>{m.value=!1,ne.value.message=""},j=()=>{v.value=!1,z.value.message=""},O=()=>{c.value=!1,Z.value=[]},B=()=>{C.value=!1,V.value=null,P.value={title:"",description:"",price:"",sort_order:0,is_active:!0}},ce=_=>{x.value=_,m.value=!0},f=_=>{x.value=_,v.value=!0},h=async _=>{x.value=_;try{const L=await fetch(`/api/service-requests/${_.id}/communications`,{headers:t.getAuthHeaders()});L.ok&&(Z.value=await L.json())}catch(L){console.error("Failed to fetch communications:",L)}c.value=!0},g=async()=>{if(ne.value.message.trim()){Y.value=!0;try{(await fetch(`/api/service-requests/${x.value.id}/send-email`,{method:"POST",headers:t.getAuthHeaders(),body:JSON.stringify({message:ne.value.message})})).ok&&(y(),await ee())}catch(_){console.error("Failed to send email:",_)}finally{Y.value=!1}}},w=async()=>{if(z.value.message.trim()){oe.value=!0;try{(await fetch(`/api/service-requests/${x.value.id}/send-sms`,{method:"POST",headers:t.getAuthHeaders(),body:JSON.stringify({message:z.value.message})})).ok&&(j(),await ee())}catch(_){console.error("Failed to send SMS:",_)}finally{oe.value=!1}}},S=async()=>{var _,L,K;if(!((_=x.value)!=null&&_.email)){alert("Geen e-mailadres beschikbaar voor deze klant");return}if(!((L=x.value)!=null&&L.actual_repair_date)||!((K=x.value)!=null&&K.actual_repair_time)){alert("Vul eerst de werkelijke ophaaldatum en tijd in");return}if(confirm("Weet u zeker dat u de ophaalbevestiging wilt versturen naar "+x.value.email+"?")){he.value=!0;try{const fe=await fetch(`/api/service-requests/${x.value.id}/send-pickup-confirmation`,{method:"POST",headers:t.getAuthHeaders()});if(fe.ok){const Ve=await fe.json();alert("Ophaalbevestiging succesvol verzonden!"),Ve.service_request&&(x.value=Ve.service_request),await ee()}else{const Ve=await fe.json();alert("Fout bij versturen: "+(Ve.message||"Onbekende fout"))}}catch(fe){console.error("Failed to send pickup confirmation:",fe),alert("Fout bij versturen van ophaalbevestiging")}finally{he.value=!1}}},b=_=>{I.value=_,D.value={date:_.date,reason:_.reason||""},d.value=!0},A=async()=>{try{const _=I.value?`/api/blocked-dates/${I.value.id}`:"/api/blocked-dates",L=I.value?"PUT":"POST";(await fetch(_,{method:L,headers:t.getAuthHeaders(),body:JSON.stringify(D.value)})).ok&&(De(),await Ne())}catch(_){console.error("Failed to save blocked date:",_)}},R=async _=>{if(confirm("Weet je zeker dat je deze geblokkeerde datum wilt verwijderen?"))try{(await fetch(`/api/blocked-dates/${_}`,{method:"DELETE",headers:t.getAuthHeaders()})).ok&&await Ne()}catch(L){console.error("Failed to delete blocked date:",L)}},E=async(_,L)=>{try{(await fetch(`/api/settings/key/${_}`,{method:"PUT",headers:t.getAuthHeaders(),body:JSON.stringify({value:L,description:""})})).ok&&console.log(`Setting ${_} updated successfully`)}catch(K){console.error("Failed to update setting:",K)}},k=async()=>{try{if((await fetch(`/api/service-requests/${x.value.id}`,{method:"PUT",headers:t.getAuthHeaders(),body:JSON.stringify({status:x.value.status})})).ok){const L=o.value.findIndex(K=>K.id===x.value.id);L!==-1&&(o.value[L].status=x.value.status),await ee()}}catch(_){console.error("Failed to update request status:",_)}},H=async()=>{try{if((await fetch(`/api/service-requests/${x.value.id}`,{method:"PUT",headers:t.getAuthHeaders(),body:JSON.stringify({actual_repair_date:x.value.actual_repair_date})})).ok){const L=o.value.findIndex(K=>K.id===x.value.id);L!==-1&&(o.value[L].actual_repair_date=x.value.actual_repair_date),await ee()}}catch(_){console.error("Failed to update request date:",_)}},M=async()=>{try{if((await fetch(`/api/service-requests/${x.value.id}`,{method:"PUT",headers:t.getAuthHeaders(),body:JSON.stringify({actual_repair_date:x.value.actual_repair_date,actual_repair_time:x.value.actual_repair_time})})).ok){const L=o.value.findIndex(K=>K.id===x.value.id);L!==-1&&(o.value[L].actual_repair_date=x.value.actual_repair_date,o.value[L].actual_repair_time=x.value.actual_repair_time),await ee()}}catch(_){console.error("Failed to update request time:",_)}},N=_=>{V.value=_,P.value={..._},C.value=!0},J=async()=>{try{const _=V.value?`/api/pricelist/${V.value.id}`:"/api/pricelist",L=V.value?"PUT":"POST";(await fetch(_,{method:L,headers:t.getAuthHeaders(),body:JSON.stringify(P.value)})).ok&&(B(),await Le())}catch(_){console.error("Failed to save pricelist item:",_)}},te=async _=>{if(confirm("Weet je zeker dat je dit prijslijst item wilt verwijderen?"))try{(await fetch(`/api/pricelist/${_}`,{method:"DELETE",headers:t.getAuthHeaders()})).ok&&await Le()}catch(L){console.error("Failed to delete pricelist item:",L)}},ue=_=>{const L=u.value.find(K=>K.key===_);return L?L.value:""},ie=(_,L)=>{const K=u.value.find(fe=>fe.key===_);K&&(K.value=L)},Re=async _=>{const L=u.value.find(K=>K.key===_);if(L)try{(await fetch(`/api/page-content/key/${_}`,{method:"PUT",headers:t.getAuthHeaders(),body:JSON.stringify({value:L.value,description:L.description})})).ok&&console.log(`Content ${_} updated successfully`)}catch(K){console.error("Failed to update page content:",K)}},Ae=(_,L)=>{if(!_)return"N/A";const fe=new Date(_).toLocaleDateString("nl-NL");return L?`${fe} ${L}`:fe},Ke=_=>new Date(_).toISOString().split("T")[0];return Qt(()=>{t.checkAuth(),ee(),Ne(),Le(),Pe(),Xe()}),{activeTab:s,tabs:ae,loading:n,requests:o,blockedDates:i,settings:r,pricelist:l,pageContent:u,user:Ee(()=>t.user),showRequestModal:p,showAddBlockedDate:d,showEmailModal:m,showSmsModal:v,showCommunicationsModal:c,showAddPricelistItem:C,requestModalLoading:T,pricelistLoading:G,selectedRequest:x,editingBlockedDate:I,editingPricelistItem:V,blockedDateForm:D,pricelistForm:P,emailForm:ne,smsForm:z,communications:Z,emailLoading:Y,smsLoading:oe,pickupConfirmationLoading:he,minDate:_e,getStatusText:ze,getCommTypeText:Je,getCommDirectionText:pe,handleLogout:X,refreshRequests:gt,viewRequest:vt,closeRequestModal:Vt,closeBlockedDateModal:De,closePricelistModal:B,closeEmailModal:y,closeSmsModal:j,closeCommunicationsModal:O,sendEmail:ce,sendSms:f,viewCommunications:h,submitEmail:g,submitSms:w,sendPickupConfirmation:S,editBlockedDate:b,saveBlockedDate:A,deleteBlockedDate:R,editPricelistItem:N,savePricelistItem:J,deletePricelistItem:te,updateSetting:E,updateRequestStatus:k,updateRequestDate:H,updateRequestTime:M,getContentValue:ue,updateContentValue:ie,savePageContent:Re,formatDateTime:Ae,formatDate:Ke}}},tf={class:"admin"},nf={class:"admin-header"},sf={class:"admin-user-info"},of={class:"admin-tabs"},rf=["onClick"],lf={key:0,class:"tab-content"},af={class:"section-header"},cf=["disabled","title"],uf={class:"requests-table"},ff={key:0,class:"loading-row"},df={key:1,class:"empty-row"},hf={class:"cell"},pf={class:"cell"},mf={class:"cell"},gf={class:"cell"},vf={class:"cell actions"},_f=["onClick"],bf=["onClick","disabled"],yf=["onClick","disabled"],wf=["onClick"],Sf={key:1,class:"tab-content"},kf={class:"section-header"},Cf={class:"blocked-dates-list"},xf={class:"date-info"},Ef={class:"date"},Pf={key:0,class:"reason"},Rf={class:"date-actions"},Af=["onClick"],Of=["onClick"],Tf={key:2,class:"tab-content"},Mf={class:"section-header"},If={class:"pricelist-table"},jf={key:0,class:"loading-row"},Df={key:1,class:"empty-row"},Vf={class:"cell"},Ff={class:"cell"},Bf={class:"cell"},Lf={class:"cell"},Nf={class:"cell"},Hf={class:"cell actions"},qf=["onClick"],Uf=["onClick"],Kf={key:3,class:"tab-content"},Wf={class:"content-sections"},Gf={class:"content-section"},zf={class:"content-form"},Jf={class:"form-group"},Yf=["value"],Qf={class:"form-group"},Zf=["value"],Xf={class:"content-section"},$f={class:"content-form"},ed={class:"feature-group"},td={class:"form-group"},nd=["value"],sd={class:"form-group"},od=["value"],id={class:"feature-group"},rd={class:"form-group"},ld=["value"],ad={class:"form-group"},cd=["value"],ud={class:"feature-group"},fd={class:"form-group"},dd=["value"],hd={class:"form-group"},pd=["value"],md={class:"feature-group"},gd={class:"form-group"},vd=["value"],_d={class:"form-group"},bd=["value"],yd={class:"content-section"},wd={class:"content-form"},Sd={class:"form-group"},kd=["value"],Cd={class:"form-group"},xd=["value"],Ed={class:"form-group"},Pd=["value"],Rd={class:"form-group"},Ad=["value"],Od={class:"content-section"},Td={class:"content-form"},Md={class:"form-group"},Id=["value"],jd={class:"form-group"},Dd=["value"],Vd={key:4,class:"tab-content"},Fd={class:"settings-form"},Bd={class:"setting-group"},Ld={class:"setting-group"},Nd={class:"setting-group"},Hd={class:"modal-header"},qd={key:0,class:"modal-body"},Ud={key:0,class:"loading-state"},Kd={key:1,class:"request-details"},Wd={class:"detail-row"},Gd={class:"detail-row"},zd={class:"detail-row"},Jd={class:"detail-row"},Yd={class:"detail-row"},Qd={class:"detail-row"},Zd={class:"detail-row"},Xd={class:"detail-row"},$d={class:"detail-row"},eh={class:"detail-row"},th={class:"modal-footer"},nh=["disabled"],sh={class:"modal-header"},oh={class:"modal-body"},ih={class:"form-group"},rh=["min"],lh={class:"form-group"},ah={class:"modal-footer"},ch={class:"modal-header"},uh={class:"modal-body"},fh={class:"form-group"},dh={class:"modal-footer"},hh=["disabled"],ph={class:"modal-header"},mh={class:"modal-body"},gh={class:"form-group"},vh={class:"modal-footer"},_h=["disabled"],bh={class:"modal-header"},yh={class:"modal-body"},wh={key:0,class:"no-communications"},Sh={key:1,class:"communications-list"},kh={class:"comm-header"},Ch={class:"comm-type"},xh={class:"comm-direction"},Eh={class:"comm-date"},Ph={class:"comm-message"},Rh={class:"modal-footer"},Ah={class:"modal-header"},Oh={class:"modal-body"},Th={class:"form-group"},Mh={class:"form-group"},Ih={class:"form-group"},jh={class:"form-group"},Dh={class:"form-group"},Vh={class:"modal-footer"};function Fh(e,t,s,n,o,i){var r,l,u,p,d,m,v;return q(),W("div",tf,[a("div",nf,[t[86]||(t[86]=a("h1",null,"🔧 Beheer Dashboard",-1)),t[87]||(t[87]=a("p",null,"Beheer fiets service aanvragen, geblokkeerde data en instellingen",-1)),a("div",sf,[a("span",null,"Ingelogd als: "+F((r=n.user)==null?void 0:r.name),1),a("button",{onClick:t[0]||(t[0]=(...c)=>n.handleLogout&&n.handleLogout(...c)),class:"logout-btn"},"Uitloggen")])]),a("div",of,[(q(!0),W(xe,null,kt(n.tabs,c=>(q(),W("button",{key:c.id,onClick:C=>n.activeTab=c.id,class:Mt(["tab-button",{active:n.activeTab===c.id}])},F(c.label),11,rf))),128))]),n.activeTab==="requests"?(q(),W("div",lf,[a("div",af,[t[88]||(t[88]=a("h2",null,"Service Aanvragen",-1)),a("button",{onClick:t[1]||(t[1]=(...c)=>n.refreshRequests&&n.refreshRequests(...c)),class:"refresh-btn",disabled:n.loading,title:n.loading?"Verversen...":"Verversen"},F((n.loading,"🔄")),9,cf)]),a("div",uf,[t[91]||(t[91]=hs('
ID
Naam
Datum/Tijd
Status
Acties
',1)),n.loading?(q(),W("div",ff,[...t[89]||(t[89]=[a("div",{class:"loading-text"},"Aanvragen laden...",-1)])])):n.requests.length===0?(q(),W("div",df,[...t[90]||(t[90]=[a("div",{class:"empty-text"},"Geen service aanvragen gevonden",-1)])])):(q(!0),W(xe,{key:2},kt(n.requests,c=>(q(),W("div",{class:"table-row",key:c.id},[a("div",hf,F(c.id),1),a("div",pf,F(c.name),1),a("div",mf,F(n.formatDateTime(c.requested_date,c.requested_time)),1),a("div",gf,[a("span",{class:Mt(["status-badge",c.status])},F(n.getStatusText(c.status)),3)]),a("div",vf,[a("button",{onClick:C=>n.viewRequest(c),class:"action-btn view",title:"Bekijken"}," 👁️ ",8,_f),a("button",{onClick:C=>n.sendEmail(c),class:"action-btn email",disabled:!c.email,title:"E-mail versturen"}," 📧 ",8,bf),a("button",{onClick:C=>n.sendSms(c),class:"action-btn sms",disabled:!c.phone,title:"SMS versturen"}," 📱 ",8,yf),a("button",{onClick:C=>n.viewCommunications(c),class:"action-btn comm",title:"Communicatie bekijken"}," 💬 ",8,wf)])]))),128))])])):Oe("",!0),n.activeTab==="blocked"?(q(),W("div",Sf,[a("div",kf,[t[92]||(t[92]=a("h2",null,"Geblokkeerde Data",-1)),a("button",{onClick:t[2]||(t[2]=c=>n.showAddBlockedDate=!0),class:"add-btn",title:"Geblokkeerde Datum Toevoegen"},"➕")]),a("div",Cf,[(q(!0),W(xe,null,kt(n.blockedDates,c=>(q(),W("div",{key:c.id,class:"blocked-date-item"},[a("div",xf,[a("span",Ef,F(n.formatDate(c.date)),1),c.reason?(q(),W("span",Pf,F(c.reason),1)):Oe("",!0)]),a("div",Rf,[a("button",{onClick:C=>n.editBlockedDate(c),class:"edit-btn",title:"Bewerken"},"✏️",8,Af),a("button",{onClick:C=>n.deleteBlockedDate(c.id),class:"delete-btn",title:"Verwijderen"},"🗑️",8,Of)])]))),128))])])):Oe("",!0),n.activeTab==="pricelist"?(q(),W("div",Tf,[a("div",Mf,[t[93]||(t[93]=a("h2",null,"Prijslijst Beheer",-1)),a("button",{onClick:t[3]||(t[3]=c=>n.showAddPricelistItem=!0),class:"add-btn",title:"Prijslijst Item Toevoegen"},"➕")]),a("div",If,[t[96]||(t[96]=hs('
Titel
Beschrijving
Prijs
Volgorde
Status
Acties
',1)),n.pricelistLoading?(q(),W("div",jf,[...t[94]||(t[94]=[a("div",{class:"loading-text"},"Prijslijst laden...",-1)])])):n.pricelist.length===0?(q(),W("div",Df,[...t[95]||(t[95]=[a("div",{class:"empty-text"},"Geen prijslijst items gevonden",-1)])])):(q(!0),W(xe,{key:2},kt(n.pricelist,c=>(q(),W("div",{class:"table-row",key:c.id},[a("div",Vf,F(c.title),1),a("div",Ff,F(c.description),1),a("div",Bf,"€"+F(c.price),1),a("div",Lf,F(c.sort_order),1),a("div",Nf,[a("span",{class:Mt(["status-badge",c.is_active?"active":"inactive"])},F(c.is_active?"Actief":"Inactief"),3)]),a("div",Hf,[a("button",{onClick:C=>n.editPricelistItem(c),class:"action-btn edit",title:"Bewerken"},"✏️",8,qf),a("button",{onClick:C=>n.deletePricelistItem(c.id),class:"action-btn delete",title:"Verwijderen"},"🗑️",8,Uf)])]))),128))])])):Oe("",!0),n.activeTab==="content"?(q(),W("div",Kf,[t[121]||(t[121]=a("div",{class:"section-header"},[a("h2",null,"Pagina Teksten Beheer")],-1)),a("div",Wf,[a("div",Gf,[t[99]||(t[99]=a("h3",null,"Openingspagina - Hero Sectie",-1)),a("div",zf,[a("div",Jf,[t[97]||(t[97]=a("label",null,"Hoofdtekst (Header)",-1)),a("input",{type:"text",value:n.getContentValue("home_hero_title"),onInput:t[4]||(t[4]=c=>n.updateContentValue("home_hero_title",c.target.value)),onBlur:t[5]||(t[5]=c=>n.savePageContent("home_hero_title"))},null,40,Yf)]),a("div",Qf,[t[98]||(t[98]=a("label",null,"Subtekst (Subheader)",-1)),a("input",{type:"text",value:n.getContentValue("home_hero_subtitle"),onInput:t[6]||(t[6]=c=>n.updateContentValue("home_hero_subtitle",c.target.value)),onBlur:t[7]||(t[7]=c=>n.savePageContent("home_hero_subtitle"))},null,40,Zf)])])]),a("div",Xf,[t[112]||(t[112]=a("h3",null,"Openingspagina - Panelen",-1)),a("div",$f,[a("div",ed,[t[102]||(t[102]=a("h4",null,"Paneel 1",-1)),a("div",td,[t[100]||(t[100]=a("label",null,"Koptekst",-1)),a("input",{type:"text",value:n.getContentValue("home_feature_1_title"),onInput:t[8]||(t[8]=c=>n.updateContentValue("home_feature_1_title",c.target.value)),onBlur:t[9]||(t[9]=c=>n.savePageContent("home_feature_1_title"))},null,40,nd)]),a("div",sd,[t[101]||(t[101]=a("label",null,"Onderschrift",-1)),a("textarea",{value:n.getContentValue("home_feature_1_text"),onInput:t[10]||(t[10]=c=>n.updateContentValue("home_feature_1_text",c.target.value)),onBlur:t[11]||(t[11]=c=>n.savePageContent("home_feature_1_text")),rows:"2"},null,40,od)])]),a("div",id,[t[105]||(t[105]=a("h4",null,"Paneel 2",-1)),a("div",rd,[t[103]||(t[103]=a("label",null,"Koptekst",-1)),a("input",{type:"text",value:n.getContentValue("home_feature_2_title"),onInput:t[12]||(t[12]=c=>n.updateContentValue("home_feature_2_title",c.target.value)),onBlur:t[13]||(t[13]=c=>n.savePageContent("home_feature_2_title"))},null,40,ld)]),a("div",ad,[t[104]||(t[104]=a("label",null,"Onderschrift",-1)),a("textarea",{value:n.getContentValue("home_feature_2_text"),onInput:t[14]||(t[14]=c=>n.updateContentValue("home_feature_2_text",c.target.value)),onBlur:t[15]||(t[15]=c=>n.savePageContent("home_feature_2_text")),rows:"2"},null,40,cd)])]),a("div",ud,[t[108]||(t[108]=a("h4",null,"Paneel 3",-1)),a("div",fd,[t[106]||(t[106]=a("label",null,"Koptekst",-1)),a("input",{type:"text",value:n.getContentValue("home_feature_3_title"),onInput:t[16]||(t[16]=c=>n.updateContentValue("home_feature_3_title",c.target.value)),onBlur:t[17]||(t[17]=c=>n.savePageContent("home_feature_3_title"))},null,40,dd)]),a("div",hd,[t[107]||(t[107]=a("label",null,"Onderschrift",-1)),a("textarea",{value:n.getContentValue("home_feature_3_text"),onInput:t[18]||(t[18]=c=>n.updateContentValue("home_feature_3_text",c.target.value)),onBlur:t[19]||(t[19]=c=>n.savePageContent("home_feature_3_text")),rows:"2"},null,40,pd)])]),a("div",md,[t[111]||(t[111]=a("h4",null,"Paneel 4",-1)),a("div",gd,[t[109]||(t[109]=a("label",null,"Koptekst",-1)),a("input",{type:"text",value:n.getContentValue("home_feature_4_title"),onInput:t[20]||(t[20]=c=>n.updateContentValue("home_feature_4_title",c.target.value)),onBlur:t[21]||(t[21]=c=>n.savePageContent("home_feature_4_title"))},null,40,vd)]),a("div",_d,[t[110]||(t[110]=a("label",null,"Onderschrift",-1)),a("textarea",{value:n.getContentValue("home_feature_4_text"),onInput:t[22]||(t[22]=c=>n.updateContentValue("home_feature_4_text",c.target.value)),onBlur:t[23]||(t[23]=c=>n.savePageContent("home_feature_4_text")),rows:"2"},null,40,bd)])])])]),a("div",yd,[t[117]||(t[117]=a("h3",null,"Openingspagina - Knoppen Container",-1)),a("div",wd,[a("div",Sd,[t[113]||(t[113]=a("label",null,"Hoofdtekst",-1)),a("input",{type:"text",value:n.getContentValue("home_cta_title"),onInput:t[24]||(t[24]=c=>n.updateContentValue("home_cta_title",c.target.value)),onBlur:t[25]||(t[25]=c=>n.savePageContent("home_cta_title"))},null,40,kd)]),a("div",Cd,[t[114]||(t[114]=a("label",null,"Subtekst",-1)),a("textarea",{value:n.getContentValue("home_cta_subtitle"),onInput:t[26]||(t[26]=c=>n.updateContentValue("home_cta_subtitle",c.target.value)),onBlur:t[27]||(t[27]=c=>n.savePageContent("home_cta_subtitle")),rows:"2"},null,40,xd)]),a("div",Ed,[t[115]||(t[115]=a("label",null,"Knop 1 Tekst",-1)),a("input",{type:"text",value:n.getContentValue("home_cta_button_1_text"),onInput:t[28]||(t[28]=c=>n.updateContentValue("home_cta_button_1_text",c.target.value)),onBlur:t[29]||(t[29]=c=>n.savePageContent("home_cta_button_1_text"))},null,40,Pd)]),a("div",Rd,[t[116]||(t[116]=a("label",null,"Knop 2 Tekst",-1)),a("input",{type:"text",value:n.getContentValue("home_cta_button_2_text"),onInput:t[30]||(t[30]=c=>n.updateContentValue("home_cta_button_2_text",c.target.value)),onBlur:t[31]||(t[31]=c=>n.savePageContent("home_cta_button_2_text"))},null,40,Ad)])])]),a("div",Od,[t[120]||(t[120]=a("h3",null,"Boekingspagina - Header",-1)),a("div",Td,[a("div",Md,[t[118]||(t[118]=a("label",null,"Hoofdtekst (Header)",-1)),a("input",{type:"text",value:n.getContentValue("booking_header_title"),onInput:t[32]||(t[32]=c=>n.updateContentValue("booking_header_title",c.target.value)),onBlur:t[33]||(t[33]=c=>n.savePageContent("booking_header_title"))},null,40,Id)]),a("div",jd,[t[119]||(t[119]=a("label",null,"Onderschrift",-1)),a("textarea",{value:n.getContentValue("booking_header_subtitle"),onInput:t[34]||(t[34]=c=>n.updateContentValue("booking_header_subtitle",c.target.value)),onBlur:t[35]||(t[35]=c=>n.savePageContent("booking_header_subtitle")),rows:"2"},null,40,Dd)])])])])])):Oe("",!0),n.activeTab==="settings"?(q(),W("div",Vd,[t[125]||(t[125]=a("div",{class:"section-header"},[a("h2",null,"Applicatie Instellingen")],-1)),a("div",Fd,[a("div",Bd,[t[122]||(t[122]=a("label",{for:"admin_email"},"Beheer Notificatie E-mail",-1)),ve(a("input",{type:"email",id:"admin_email","onUpdate:modelValue":t[36]||(t[36]=c=>n.settings.admin_notification_email=c),placeholder:"admin@voorbeeld.com"},null,512),[[be,n.settings.admin_notification_email]]),a("button",{onClick:t[37]||(t[37]=c=>n.updateSetting("admin_notification_email",n.settings.admin_notification_email)),class:"save-btn",title:"Opslaan"}," 💾 ")]),a("div",Ld,[t[123]||(t[123]=a("label",{for:"business_name"},"Bedrijfsnaam",-1)),ve(a("input",{type:"text",id:"business_name","onUpdate:modelValue":t[38]||(t[38]=c=>n.settings.business_name=c),placeholder:"Fiets Service Centrum"},null,512),[[be,n.settings.business_name]]),a("button",{onClick:t[39]||(t[39]=c=>n.updateSetting("business_name",n.settings.business_name)),class:"save-btn",title:"Opslaan"}," 💾 ")]),a("div",Nd,[t[124]||(t[124]=a("label",{for:"pickup_confirmation_email_text"},"Ophaalbevestiging E-mail Tekst",-1)),ve(a("textarea",{id:"pickup_confirmation_email_text","onUpdate:modelValue":t[40]||(t[40]=c=>n.settings.pickup_confirmation_email_text=c),rows:"8",placeholder:"Standaard tekst voor ophaalbevestiging e-mail"},null,512),[[be,n.settings.pickup_confirmation_email_text]]),a("button",{onClick:t[41]||(t[41]=c=>n.updateSetting("pickup_confirmation_email_text",n.settings.pickup_confirmation_email_text)),class:"save-btn",title:"Opslaan"}," 💾 ")])])])):Oe("",!0),n.showRequestModal?(q(),W("div",{key:5,class:"modal-overlay",onClick:t[52]||(t[52]=(...c)=>n.closeRequestModal&&n.closeRequestModal(...c))},[a("div",{class:"modal-content large",onClick:t[51]||(t[51]=ct(()=>{},["stop"]))},[a("div",Hd,[t[126]||(t[126]=a("h3",null,"Service Aanvraag Details",-1)),a("button",{onClick:t[42]||(t[42]=(...c)=>n.closeRequestModal&&n.closeRequestModal(...c)),class:"close-btn",title:"Sluiten"},"×")]),n.selectedRequest?(q(),W("div",qd,[n.requestModalLoading?(q(),W("div",Ud,[...t[127]||(t[127]=[a("div",{class:"loading-spinner"},null,-1),a("p",null,"Gegevens laden...",-1)])])):(q(),W("div",Kd,[a("div",Wd,[t[128]||(t[128]=a("strong",null,"Naam:",-1)),ke(" "+F(n.selectedRequest.name),1)]),a("div",Gd,[t[129]||(t[129]=a("strong",null,"Adres:",-1)),ke(" "+F(n.selectedRequest.address),1)]),a("div",zd,[t[130]||(t[130]=a("strong",null,"Plaats:",-1)),ke(" "+F(n.selectedRequest.place),1)]),a("div",Jd,[t[131]||(t[131]=a("strong",null,"E-mail:",-1)),ke(" "+F(n.selectedRequest.email||"Niet opgegeven"),1)]),a("div",Yd,[t[132]||(t[132]=a("strong",null,"Telefoon:",-1)),ke(" "+F(n.selectedRequest.phone||"Niet opgegeven"),1)]),a("div",Qd,[t[133]||(t[133]=a("strong",null,"Reparatie Beschrijving:",-1)),ke(" "+F(n.selectedRequest.repair_description),1)]),a("div",Zd,[t[134]||(t[134]=a("strong",null,"Gewenste Datum/Tijd:",-1)),ke(" "+F(n.formatDateTime(n.selectedRequest.requested_date,n.selectedRequest.requested_time)),1)]),a("div",Xd,[t[136]||(t[136]=a("strong",null,"Status:",-1)),ve(a("select",{"onUpdate:modelValue":t[43]||(t[43]=c=>n.selectedRequest.status=c),onChange:t[44]||(t[44]=(...c)=>n.updateRequestStatus&&n.updateRequestStatus(...c))},[...t[135]||(t[135]=[hs('',5)])],544),[[Ja,n.selectedRequest.status]])]),a("div",$d,[t[137]||(t[137]=a("strong",null,"Werkelijke ophaalDatum:",-1)),ve(a("input",{type:"date","onUpdate:modelValue":t[45]||(t[45]=c=>n.selectedRequest.actual_repair_date=c),onChange:t[46]||(t[46]=(...c)=>n.updateRequestDate&&n.updateRequestDate(...c))},null,544),[[be,n.selectedRequest.actual_repair_date]])]),a("div",eh,[t[138]||(t[138]=a("strong",null,"Werkelijke ophaaltijd:",-1)),ve(a("input",{type:"time","onUpdate:modelValue":t[47]||(t[47]=c=>n.selectedRequest.actual_repair_time=c),onChange:t[48]||(t[48]=(...c)=>n.updateRequestTime&&n.updateRequestTime(...c))},null,544),[[be,n.selectedRequest.actual_repair_time]])])]))])):Oe("",!0),a("div",th,[a("button",{onClick:t[49]||(t[49]=(...c)=>n.sendPickupConfirmation&&n.sendPickupConfirmation(...c)),class:"btn-pickup-confirmation",disabled:!((l=n.selectedRequest)!=null&&l.email)||!((u=n.selectedRequest)!=null&&u.actual_repair_date)||!((p=n.selectedRequest)!=null&&p.actual_repair_time)||n.pickupConfirmationLoading,title:"Verstuur ophaalbevestiging e-mail naar klant"},F(n.pickupConfirmationLoading?"📧 Versturen...":"📧 Ophaalbevestiging Versturen"),9,nh),a("button",{onClick:t[50]||(t[50]=(...c)=>n.closeRequestModal&&n.closeRequestModal(...c)),class:"btn-primary"},"Sluiten")])])])):Oe("",!0),n.showAddBlockedDate?(q(),W("div",{key:6,class:"modal-overlay",onClick:t[59]||(t[59]=(...c)=>n.closeBlockedDateModal&&n.closeBlockedDateModal(...c))},[a("div",{class:"modal-content",onClick:t[58]||(t[58]=ct(()=>{},["stop"]))},[a("div",sh,[a("h3",null,F(n.editingBlockedDate?"Bewerken":"Toevoegen")+" Geblokkeerde Datum",1),a("button",{onClick:t[53]||(t[53]=(...c)=>n.closeBlockedDateModal&&n.closeBlockedDateModal(...c)),class:"close-btn",title:"Sluiten"},"×")]),a("div",oh,[a("div",ih,[t[139]||(t[139]=a("label",{for:"blocked_date"},"Datum",-1)),ve(a("input",{type:"date",id:"blocked_date","onUpdate:modelValue":t[54]||(t[54]=c=>n.blockedDateForm.date=c),min:n.minDate},null,8,rh),[[be,n.blockedDateForm.date]])]),a("div",lh,[t[140]||(t[140]=a("label",{for:"blocked_reason"},"Reden (Optioneel)",-1)),ve(a("textarea",{id:"blocked_reason","onUpdate:modelValue":t[55]||(t[55]=c=>n.blockedDateForm.reason=c),rows:"3"},null,512),[[be,n.blockedDateForm.reason]])])]),a("div",ah,[a("button",{onClick:t[56]||(t[56]=(...c)=>n.saveBlockedDate&&n.saveBlockedDate(...c)),class:"btn-primary"},"Opslaan"),a("button",{onClick:t[57]||(t[57]=(...c)=>n.closeBlockedDateModal&&n.closeBlockedDateModal(...c)),class:"btn-secondary"},"Annuleren")])])])):Oe("",!0),n.showEmailModal?(q(),W("div",{key:7,class:"modal-overlay",onClick:t[65]||(t[65]=(...c)=>n.closeEmailModal&&n.closeEmailModal(...c))},[a("div",{class:"modal-content",onClick:t[64]||(t[64]=ct(()=>{},["stop"]))},[a("div",ch,[a("h3",null,"E-mail Versturen naar "+F((d=n.selectedRequest)==null?void 0:d.name),1),a("button",{onClick:t[60]||(t[60]=(...c)=>n.closeEmailModal&&n.closeEmailModal(...c)),class:"close-btn",title:"Sluiten"},"×")]),a("div",uh,[a("div",fh,[t[141]||(t[141]=a("label",{for:"email_message"},"Bericht",-1)),ve(a("textarea",{id:"email_message","onUpdate:modelValue":t[61]||(t[61]=c=>n.emailForm.message=c),rows:"6",placeholder:"Voer je bericht in..."},null,512),[[be,n.emailForm.message]])])]),a("div",dh,[a("button",{onClick:t[62]||(t[62]=(...c)=>n.submitEmail&&n.submitEmail(...c)),class:"btn-primary",disabled:n.emailLoading},F(n.emailLoading?"Versturen...":"E-mail Versturen"),9,hh),a("button",{onClick:t[63]||(t[63]=(...c)=>n.closeEmailModal&&n.closeEmailModal(...c)),class:"btn-secondary"},"Annuleren")])])])):Oe("",!0),n.showSmsModal?(q(),W("div",{key:8,class:"modal-overlay",onClick:t[71]||(t[71]=(...c)=>n.closeSmsModal&&n.closeSmsModal(...c))},[a("div",{class:"modal-content",onClick:t[70]||(t[70]=ct(()=>{},["stop"]))},[a("div",ph,[a("h3",null,"SMS Versturen naar "+F((m=n.selectedRequest)==null?void 0:m.name),1),a("button",{onClick:t[66]||(t[66]=(...c)=>n.closeSmsModal&&n.closeSmsModal(...c)),class:"close-btn",title:"Sluiten"},"×")]),a("div",mh,[a("div",gh,[t[142]||(t[142]=a("label",{for:"sms_message"},"Bericht",-1)),ve(a("textarea",{id:"sms_message","onUpdate:modelValue":t[67]||(t[67]=c=>n.smsForm.message=c),rows:"6",placeholder:"Voer je bericht in..."},null,512),[[be,n.smsForm.message]])])]),a("div",vh,[a("button",{onClick:t[68]||(t[68]=(...c)=>n.submitSms&&n.submitSms(...c)),class:"btn-primary",disabled:n.smsLoading},F(n.smsLoading?"Versturen...":"SMS Versturen"),9,_h),a("button",{onClick:t[69]||(t[69]=(...c)=>n.closeSmsModal&&n.closeSmsModal(...c)),class:"btn-secondary"},"Annuleren")])])])):Oe("",!0),n.showCommunicationsModal?(q(),W("div",{key:9,class:"modal-overlay",onClick:t[75]||(t[75]=(...c)=>n.closeCommunicationsModal&&n.closeCommunicationsModal(...c))},[a("div",{class:"modal-content large",onClick:t[74]||(t[74]=ct(()=>{},["stop"]))},[a("div",bh,[a("h3",null,"Communicatie Geschiedenis - "+F((v=n.selectedRequest)==null?void 0:v.name),1),a("button",{onClick:t[72]||(t[72]=(...c)=>n.closeCommunicationsModal&&n.closeCommunicationsModal(...c)),class:"close-btn",title:"Sluiten"},"×")]),a("div",yh,[n.communications.length===0?(q(),W("div",wh," Geen communicatie gevonden voor deze aanvraag. ")):(q(),W("div",Sh,[(q(!0),W(xe,null,kt(n.communications,c=>(q(),W("div",{key:c.id,class:"communication-item"},[a("div",kh,[a("span",Ch,F(n.getCommTypeText(c.type)),1),a("span",xh,F(n.getCommDirectionText(c.direction)),1),a("span",Eh,F(n.formatDateTime(c.created_at)),1)]),a("div",Ph,F(c.message),1)]))),128))]))]),a("div",Rh,[a("button",{onClick:t[73]||(t[73]=(...c)=>n.closeCommunicationsModal&&n.closeCommunicationsModal(...c)),class:"btn-primary"},"Sluiten")])])])):Oe("",!0),n.showAddPricelistItem?(q(),W("div",{key:10,class:"modal-overlay",onClick:t[85]||(t[85]=(...c)=>n.closePricelistModal&&n.closePricelistModal(...c))},[a("div",{class:"modal-content",onClick:t[84]||(t[84]=ct(()=>{},["stop"]))},[a("div",Ah,[a("h3",null,F(n.editingPricelistItem?"Bewerken":"Toevoegen")+" Prijslijst Item",1),a("button",{onClick:t[76]||(t[76]=(...c)=>n.closePricelistModal&&n.closePricelistModal(...c)),class:"close-btn",title:"Sluiten"},"×")]),a("div",Oh,[a("div",Th,[t[143]||(t[143]=a("label",{for:"pricelist_title"},"Titel",-1)),ve(a("input",{type:"text",id:"pricelist_title","onUpdate:modelValue":t[77]||(t[77]=c=>n.pricelistForm.title=c),placeholder:"Bijv. Banden vervangen"},null,512),[[be,n.pricelistForm.title]])]),a("div",Mh,[t[144]||(t[144]=a("label",{for:"pricelist_description"},"Beschrijving",-1)),ve(a("textarea",{id:"pricelist_description","onUpdate:modelValue":t[78]||(t[78]=c=>n.pricelistForm.description=c),rows:"3",placeholder:"Beschrijving van de service"},null,512),[[be,n.pricelistForm.description]])]),a("div",Ih,[t[145]||(t[145]=a("label",{for:"pricelist_price"},"Prijs (€)",-1)),ve(a("input",{type:"number",id:"pricelist_price","onUpdate:modelValue":t[79]||(t[79]=c=>n.pricelistForm.price=c),step:"0.01",min:"0",placeholder:"25.00"},null,512),[[be,n.pricelistForm.price]])]),a("div",jh,[t[146]||(t[146]=a("label",{for:"pricelist_sort_order"},"Volgorde",-1)),ve(a("input",{type:"number",id:"pricelist_sort_order","onUpdate:modelValue":t[80]||(t[80]=c=>n.pricelistForm.sort_order=c),min:"0",placeholder:"1"},null,512),[[be,n.pricelistForm.sort_order]])]),a("div",Dh,[a("label",null,[ve(a("input",{type:"checkbox","onUpdate:modelValue":t[81]||(t[81]=c=>n.pricelistForm.is_active=c)},null,512),[[za,n.pricelistForm.is_active]]),t[147]||(t[147]=ke(" Actief ",-1))])])]),a("div",Vh,[a("button",{onClick:t[82]||(t[82]=(...c)=>n.savePricelistItem&&n.savePricelistItem(...c)),class:"btn-primary"},"Opslaan"),a("button",{onClick:t[83]||(t[83]=(...c)=>n.closePricelistModal&&n.closePricelistModal(...c)),class:"btn-secondary"},"Annuleren")])])])):Oe("",!0)])}const Bh=Zt(ef,[["render",Fh],["__scopeId","data-v-ee522cc2"]]),Lh={name:"Login",setup(){const e=Ar(),t=is(),s=Q({email:"",password:""}),n=Q(!1),o=Q("");return{form:s,loading:n,error:o,handleLogin:async()=>{n.value=!0,o.value="";try{const r=await fetch("/api/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s.value)});if(!r.ok){const u=await r.json();throw new Error(u.message||"Inloggen mislukt")}const l=await r.json();t.login(l.user,l.token),e.push("/admin")}catch(r){o.value=r.message}finally{n.value=!1}}}}},Nh={class:"login"},Hh={class:"login-container"},qh={class:"form-group"},Uh=["disabled"],Kh={class:"form-group"},Wh=["disabled"],Gh={key:0,class:"form-error"},zh=["disabled"];function Jh(e,t,s,n,o,i){return q(),W("div",Nh,[a("div",Hh,[t[5]||(t[5]=a("div",{class:"login-header"},[a("h1",null,"🔐 Beheerder Login"),a("p",null,"Log in om toegang te krijgen tot het beheerpaneel")],-1)),a("form",{onSubmit:t[2]||(t[2]=ct((...r)=>n.handleLogin&&n.handleLogin(...r),["prevent"])),class:"login-form"},[a("div",qh,[t[3]||(t[3]=a("label",{for:"email"},"E-mail",-1)),ve(a("input",{type:"email",id:"email","onUpdate:modelValue":t[0]||(t[0]=r=>n.form.email=r),required:"",placeholder:"admin@fietservice.nl",disabled:n.loading},null,8,Uh),[[be,n.form.email]])]),a("div",Kh,[t[4]||(t[4]=a("label",{for:"password"},"Wachtwoord",-1)),ve(a("input",{type:"password",id:"password","onUpdate:modelValue":t[1]||(t[1]=r=>n.form.password=r),required:"",placeholder:"Voer je wachtwoord in",disabled:n.loading},null,8,Wh),[[be,n.form.password]])]),n.error?(q(),W("div",Gh,F(n.error),1)):Oe("",!0),a("button",{type:"submit",class:"login-btn",disabled:n.loading},F(n.loading?"Inloggen...":"Inloggen"),9,zh)],32)])])}const Yh=Zt(Lh,[["render",Jh],["__scopeId","data-v-2b41928d"]]),Qh={name:"Pricelist",setup(){const e=Q([]),t=Q(!0),s=async()=>{try{const n=await fetch("/api/pricelist");n.ok&&(e.value=await n.json())}catch(n){console.error("Failed to fetch pricelist:",n)}finally{t.value=!1}};return Qt(()=>{s()}),{pricelist:e,loading:t}}},Zh={class:"pricelist"},Xh={class:"pricelist-header"},$h={key:0,class:"loading-state"},ep={key:1,class:"empty-state"},tp={key:2,class:"pricelist-grid"},np={class:"price-header"},sp={class:"price"},op={class:"description"},ip={class:"cta-section"};function rp(e,t,s,n,o,i){const r=Hn("router-link");return q(),W("div",Zh,[a("div",Xh,[t[1]||(t[1]=a("h1",null,"💰 Prijslijst",-1)),t[2]||(t[2]=a("p",null,"Transparante prijzen voor al onze fiets service diensten",-1)),ye(r,{to:"/",class:"back-btn"},{default:nt(()=>[...t[0]||(t[0]=[ke("← Terug naar Home",-1)])]),_:1})]),n.loading?(q(),W("div",$h,[...t[3]||(t[3]=[a("div",{class:"loading-spinner"},null,-1),a("p",null,"Prijzen laden...",-1)])])):n.pricelist.length===0?(q(),W("div",ep,[...t[4]||(t[4]=[a("p",null,"Geen prijzen beschikbaar op dit moment.",-1)])])):(q(),W("div",tp,[(q(!0),W(xe,null,kt(n.pricelist,l=>(q(),W("div",{key:l.id,class:"price-card"},[a("div",np,[a("h3",null,F(l.title),1),a("div",sp,"€"+F(l.price),1)]),a("p",op,F(l.description),1)]))),128))])),a("div",ip,[t[6]||(t[6]=a("h2",null,"Klaar om je afspraak te boeken?",-1)),t[7]||(t[7]=a("p",null,"Boek nu je service afspraak online!",-1)),ye(r,{to:"/booking",class:"cta-button"},{default:nt(()=>[...t[5]||(t[5]=[ke("Nu Boeken",-1)])]),_:1})])])}const lp=Zt(Qh,[["render",rp],["__scopeId","data-v-a4add45b"]]),ap=[{path:"/",name:"Home",component:ku},{path:"/pricelist",name:"Pricelist",component:lp},{path:"/booking",name:"Booking",component:$u},{path:"/login",name:"Login",component:Yh},{path:"/admin",name:"Admin",component:Bh,meta:{requiresAuth:!0}}],Or=uu({history:Lc(),routes:ap});Or.beforeEach((e,t,s)=>{if(e.meta.requiresAuth&&!is().isAuthenticated){s("/login");return}s()});const cp="/images/bikeservice_logo_navbar.svg",up={name:"App",setup(){const e=is();return Qt(()=>{e.checkAuth()}),{isAuthenticated:e.isAuthenticated}}},fp={id:"app"},dp={class:"navbar"},hp={class:"nav-container"},pp={class:"nav-menu"},mp={class:"main-content"};function gp(e,t,s,n,o,i){const r=Hn("router-link"),l=Hn("router-view");return q(),W("div",fp,[a("nav",dp,[a("div",hp,[ye(r,{to:"/",class:"nav-logo"},{default:nt(()=>[...t[0]||(t[0]=[a("img",{src:cp,alt:"Bike Service Logo",class:"logo-image"},null,-1)])]),_:1}),a("div",pp,[ye(r,{to:"/",class:"nav-link"},{default:nt(()=>[...t[1]||(t[1]=[ke("Home",-1)])]),_:1}),ye(r,{to:"/booking",class:"nav-link"},{default:nt(()=>[...t[2]||(t[2]=[ke("Service Boeken",-1)])]),_:1}),n.isAuthenticated?(q(),Ps(r,{key:0,to:"/admin",class:"nav-link"},{default:nt(()=>[...t[3]||(t[3]=[ke("Beheer",-1)])]),_:1})):(q(),Ps(r,{key:1,to:"/login",class:"nav-link"},{default:nt(()=>[...t[4]||(t[4]=[ke("Beheer Login",-1)])]),_:1}))])])]),a("main",mp,[ye(l)])])}const vp=Zt(up,[["render",gp]]),to=$a(vp),_p=nc();to.use(_p);to.use(Or);to.mount("#app"); diff --git a/backend/public/assets/index-jfsEyp3I.css b/backend/public/assets/index-jfsEyp3I.css deleted file mode 100644 index 60a28dd..0000000 --- a/backend/public/assets/index-jfsEyp3I.css +++ /dev/null @@ -1 +0,0 @@ -.home[data-v-677cbdbe]{text-align:center}.hero[data-v-677cbdbe]{background:linear-gradient(135deg,var(--primary-color) 0%,var(--primary-light) 100%);color:#fff;padding:4rem 2rem;border-radius:15px;margin-bottom:3rem;box-shadow:0 4px 20px #2c5f5d4d}.hero h1[data-v-677cbdbe]{font-size:3rem;margin-bottom:1rem}.hero p[data-v-677cbdbe]{font-size:1.2rem;opacity:.9}.features[data-v-677cbdbe]{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:2rem;margin-bottom:3rem}.feature-card[data-v-677cbdbe]{background:#fff;padding:2rem;border-radius:10px;box-shadow:0 4px 15px #0000001a;transition:transform .3s ease}.feature-card[data-v-677cbdbe]:hover{transform:translateY(-5px)}.feature-card h3[data-v-677cbdbe]{color:var(--primary-color);margin-bottom:1rem;font-size:1.3rem}.feature-card p[data-v-677cbdbe]{color:var(--text-gray);line-height:1.6}.cta[data-v-677cbdbe]{background:linear-gradient(135deg,#f8f9fa,#fff);padding:3rem 2rem;border-radius:15px;border:3px solid var(--primary-color);box-shadow:0 4px 20px #2c5f5d26}.cta h2[data-v-677cbdbe]{color:var(--primary-color);margin-bottom:1rem}.cta p[data-v-677cbdbe]{color:var(--text-gray);font-size:1.1rem;margin-bottom:2rem}.cta-buttons[data-v-677cbdbe]{display:flex;gap:1rem;justify-content:center}.cta-button[data-v-677cbdbe]{display:inline-block;background:var(--primary-color);color:#fff;padding:1rem 2rem;text-decoration:none;border-radius:10px;font-size:1.1rem;font-weight:700;transition:all .3s ease;box-shadow:0 4px 10px #2c5f5d4d}.cta-button[data-v-677cbdbe]:hover{background:var(--primary-dark);transform:translateY(-2px);box-shadow:0 6px 15px #2c5f5d66}.cta-button.secondary[data-v-677cbdbe]{background:var(--secondary-color);box-shadow:0 4px 10px #8b6f474d}.cta-button.secondary[data-v-677cbdbe]:hover{background:var(--secondary-dark);box-shadow:0 6px 15px #8b6f4766}.booking[data-v-3d2c946f]{max-width:800px;margin:0 auto}.booking-header[data-v-3d2c946f]{text-align:center;margin-bottom:3rem}.booking-header h1[data-v-3d2c946f]{color:var(--primary-color);font-size:2.5rem;margin-bottom:1rem}.booking-header p[data-v-3d2c946f]{color:var(--text-gray);font-size:1.2rem}.booking-form-container[data-v-3d2c946f]{background:#fff;border-radius:15px;padding:2rem;box-shadow:0 4px 15px #0000001a}.booking-form[data-v-3d2c946f]{display:flex;flex-direction:column;gap:1.5rem}.form-row[data-v-3d2c946f]{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem}.form-row .full-width[data-v-3d2c946f]{grid-column:1 / -1}.form-group[data-v-3d2c946f]{display:flex;flex-direction:column}.form-group label[data-v-3d2c946f]{font-weight:700;color:var(--primary-color);margin-bottom:.5rem}.form-group input[data-v-3d2c946f],.form-group textarea[data-v-3d2c946f]{padding:.75rem;border:2px solid #e1e8ed;border-radius:8px;font-size:1rem;transition:border-color .3s ease}.form-group input[data-v-3d2c946f]:focus,.form-group textarea[data-v-3d2c946f]:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 3px #2c5f5d1a}.form-group textarea[data-v-3d2c946f]{resize:vertical;min-height:80px}.custom-date-picker[data-v-3d2c946f]{border:2px solid #e1e8ed;border-radius:8px;overflow:hidden;background:#fff}.date-picker-header[data-v-3d2c946f]{display:flex;justify-content:space-between;align-items:center;padding:1rem;background:#f8f9fa;border-bottom:1px solid #e1e8ed}.nav-btn[data-v-3d2c946f]{background:none;border:none;font-size:1.5rem;cursor:pointer;padding:.5rem;border-radius:4px;transition:background-color .3s ease}.nav-btn[data-v-3d2c946f]:hover{background:#e1e8ed}.current-month[data-v-3d2c946f]{font-weight:700;color:var(--primary-color);text-transform:capitalize}.date-picker-grid[data-v-3d2c946f]{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:#e1e8ed}.weekday-header[data-v-3d2c946f]{background:#f8f9fa;padding:.75rem;text-align:center;font-weight:700;color:var(--primary-color);font-size:.875rem}.calendar-date[data-v-3d2c946f]{background:#fff;padding:.75rem;text-align:center;cursor:pointer;transition:all .3s ease;border:none;font-size:.875rem}.calendar-date[data-v-3d2c946f]:hover:not(.disabled):not(.blocked){background:#e3f2fd}.calendar-date.other-month[data-v-3d2c946f]{color:#bdc3c7;background:#f8f9fa}.calendar-date.disabled[data-v-3d2c946f]{color:#bdc3c7;background:#f8f9fa;cursor:not-allowed}.calendar-date.blocked[data-v-3d2c946f]{color:#dc3545;background:#f8d7da;cursor:not-allowed;position:relative}.calendar-date.blocked[data-v-3d2c946f]:after{content:"🚫";position:absolute;top:2px;right:2px;font-size:.75rem}.calendar-date.selected[data-v-3d2c946f]{background:var(--primary-color);color:#fff;font-weight:700}.calendar-date.today[data-v-3d2c946f]{font-weight:700;color:var(--primary-color);border:2px solid var(--primary-color)}.calendar-date.today.selected[data-v-3d2c946f]{color:#fff}.form-error[data-v-3d2c946f]{background:#fee;color:#c53030;padding:1rem;border-radius:8px;border:1px solid #feb2b2;text-align:center}.form-actions[data-v-3d2c946f]{text-align:center;margin-top:1rem}.submit-btn[data-v-3d2c946f]{background:var(--primary-color);color:#fff;border:none;padding:1rem 2rem;border-radius:10px;font-size:1.1rem;font-weight:700;cursor:pointer;transition:all .3s ease;box-shadow:0 4px 10px #2c5f5d4d}.submit-btn[data-v-3d2c946f]:hover:not(:disabled){background:var(--primary-dark);transform:translateY(-2px);box-shadow:0 6px 15px #2c5f5d66}.submit-btn[data-v-3d2c946f]:disabled{background:#bdc3c7;cursor:not-allowed}.modal-overlay[data-v-3d2c946f]{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-content[data-v-3d2c946f]{background:#fff;border-radius:15px;padding:2rem;max-width:500px;width:90%;box-shadow:0 10px 30px #0000004d}.modal-header[data-v-3d2c946f]{text-align:center;margin-bottom:1.5rem}.modal-header h3[data-v-3d2c946f]{color:var(--primary-color);font-size:1.5rem}.modal-body[data-v-3d2c946f]{margin-bottom:2rem}.modal-body p[data-v-3d2c946f]{color:#666;line-height:1.6;margin-bottom:1rem}.modal-footer[data-v-3d2c946f]{text-align:center}.btn-primary[data-v-3d2c946f]{background:var(--primary-color);color:#fff;border:none;padding:.75rem 1.5rem;border-radius:8px;cursor:pointer;font-size:1rem;transition:all .3s ease;box-shadow:0 2px 6px #2c5f5d4d}.btn-primary[data-v-3d2c946f]:hover{background:var(--primary-dark);transform:translateY(-1px);box-shadow:0 4px 10px #2c5f5d66}@media (max-width: 768px){.form-row[data-v-3d2c946f]{grid-template-columns:1fr}.booking-form-container[data-v-3d2c946f]{padding:1.5rem}}.admin[data-v-c28c01c6]{max-width:1200px;margin:0 auto}.admin-header[data-v-c28c01c6]{text-align:center;margin-bottom:3rem}.admin-header h1[data-v-c28c01c6]{color:var(--primary-color);font-size:2.5rem;margin-bottom:1rem}.admin-header p[data-v-c28c01c6]{color:var(--text-gray);font-size:1.2rem;margin-bottom:1rem}.admin-user-info[data-v-c28c01c6]{display:flex;justify-content:center;align-items:center;gap:1rem;background:#f8f9fa;padding:1rem;border-radius:8px;border:1px solid #e1e8ed}.admin-user-info span[data-v-c28c01c6]{color:#2c3e50;font-weight:500}.logout-btn[data-v-c28c01c6]{background:#dc3545;color:#fff;border:none;padding:.5rem 1rem;border-radius:6px;cursor:pointer;font-size:.9rem;transition:background-color .3s ease}.logout-btn[data-v-c28c01c6]:hover{background:#c82333}.admin-tabs[data-v-c28c01c6]{display:flex;gap:.5rem;margin-bottom:2rem;border-bottom:2px solid #e1e8ed}.tab-button[data-v-c28c01c6]{background:none;border:none;padding:1rem 2rem;font-size:1rem;cursor:pointer;border-bottom:3px solid transparent;transition:all .3s ease}.tab-button.active[data-v-c28c01c6]{border-bottom-color:var(--primary-color);color:var(--primary-color);font-weight:700}.tab-button[data-v-c28c01c6]:hover{background:#f8f9fa}.tab-content[data-v-c28c01c6]{background:#fff;border-radius:15px;padding:2rem;box-shadow:0 4px 15px #0000001a}.section-header[data-v-c28c01c6]{display:flex;justify-content:space-between;align-items:center;margin-bottom:2rem}.section-header h2[data-v-c28c01c6]{color:var(--primary-color);margin:0}.refresh-btn[data-v-c28c01c6],.add-btn[data-v-c28c01c6]{background:var(--primary-color);color:#fff;border:none;width:40px;height:40px;border-radius:8px;cursor:pointer;font-size:1.2rem;transition:all .3s ease;display:flex;align-items:center;justify-content:center;position:relative}.refresh-btn[data-v-c28c01c6]:hover:not(:disabled),.add-btn[data-v-c28c01c6]:hover{background:var(--primary-dark);transform:translateY(-2px);box-shadow:0 4px 8px #2c5f5d4d}.refresh-btn[data-v-c28c01c6]:disabled{background:#bdc3c7;cursor:not-allowed;opacity:.6}.refresh-btn[title][data-v-c28c01c6]:hover:after,.add-btn[title][data-v-c28c01c6]:hover:after{content:attr(title);position:absolute;bottom:100%;left:50%;transform:translate(-50%);background:#333;color:#fff;padding:.5rem;border-radius:4px;font-size:.75rem;white-space:nowrap;z-index:1000;margin-bottom:.5rem;box-shadow:0 2px 8px #0000004d}.refresh-btn[title][data-v-c28c01c6]:hover:before,.add-btn[title][data-v-c28c01c6]:hover:before{content:"";position:absolute;bottom:100%;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:#333;margin-bottom:-.5rem;z-index:1000}.requests-table[data-v-c28c01c6]{border:1px solid #e1e8ed;border-radius:8px;overflow:hidden}.table-header[data-v-c28c01c6]{display:grid;grid-template-columns:80px 1fr 200px 120px 200px;background:#f8f9fa;font-weight:700;color:#2c3e50}.header-cell[data-v-c28c01c6]{padding:1rem;border-right:1px solid #e1e8ed}.header-cell[data-v-c28c01c6]:last-child{border-right:none}.table-row[data-v-c28c01c6]{display:grid;grid-template-columns:80px 1fr 200px 120px 200px;border-bottom:1px solid #e1e8ed;transition:background-color .3s ease}.table-row[data-v-c28c01c6]:hover{background:#f8f9fa}.table-row[data-v-c28c01c6]:last-child{border-bottom:none}.cell[data-v-c28c01c6]{padding:1rem;border-right:1px solid #e1e8ed;display:flex;align-items:center}.cell[data-v-c28c01c6]:last-child{border-right:none}.status-badge[data-v-c28c01c6]{padding:.25rem .75rem;border-radius:20px;font-size:.875rem;font-weight:700;text-transform:capitalize}.status-badge.pending[data-v-c28c01c6]{background:#fff3cd;color:#856404}.status-badge.confirmed[data-v-c28c01c6]{background:#d1ecf1;color:#0c5460}.status-badge.completed[data-v-c28c01c6]{background:#d4edda;color:#155724}.status-badge.cancelled[data-v-c28c01c6]{background:#f8d7da;color:#721c24}.actions[data-v-c28c01c6]{gap:.5rem;justify-content:center}.action-btn[data-v-c28c01c6]{background:#6c757d;color:#fff;border:none;width:40px;height:40px;border-radius:6px;cursor:pointer;font-size:1.2rem;transition:all .3s ease;display:flex;align-items:center;justify-content:center;position:relative}.action-btn[data-v-c28c01c6]:hover:not(:disabled){background:#5a6268;transform:translateY(-2px);box-shadow:0 4px 8px #0003}.action-btn[data-v-c28c01c6]:disabled{background:#bdc3c7;cursor:not-allowed;opacity:.6}.action-btn.view[data-v-c28c01c6]{background:#17a2b8}.action-btn.view[data-v-c28c01c6]:hover:not(:disabled){background:#138496}.action-btn.email[data-v-c28c01c6]{background:#28a745}.action-btn.email[data-v-c28c01c6]:hover:not(:disabled){background:#218838}.action-btn.sms[data-v-c28c01c6]{background:#ffc107;color:#212529}.action-btn.sms[data-v-c28c01c6]:hover:not(:disabled){background:#e0a800}.action-btn.comm[data-v-c28c01c6]{background:#6f42c1}.action-btn.comm[data-v-c28c01c6]:hover:not(:disabled){background:#5a32a3}.action-btn.edit[data-v-c28c01c6]{background:#17a2b8}.action-btn.edit[data-v-c28c01c6]:hover:not(:disabled){background:#138496}.action-btn.delete[data-v-c28c01c6]{background:#dc3545}.action-btn.delete[data-v-c28c01c6]:hover:not(:disabled){background:#c82333}.pricelist-table[data-v-c28c01c6]{border:1px solid #e1e8ed;border-radius:8px;overflow:hidden}.pricelist-table .table-header[data-v-c28c01c6]{display:grid;grid-template-columns:1fr 2fr 100px 80px 100px 120px;background:#f8f9fa;font-weight:700;color:#2c3e50}.pricelist-table .table-row[data-v-c28c01c6]{display:grid;grid-template-columns:1fr 2fr 100px 80px 100px 120px;border-bottom:1px solid #e1e8ed;transition:background-color .3s ease}.pricelist-table .table-row[data-v-c28c01c6]:hover{background:#f8f9fa}.pricelist-table .table-row[data-v-c28c01c6]:last-child{border-bottom:none}.status-badge.active[data-v-c28c01c6]{background:#d4edda;color:#155724}.status-badge.inactive[data-v-c28c01c6]{background:#f8d7da;color:#721c24}.action-btn[title][data-v-c28c01c6]:hover:after{content:attr(title);position:absolute;bottom:100%;left:50%;transform:translate(-50%);background:#333;color:#fff;padding:.5rem;border-radius:4px;font-size:.75rem;white-space:nowrap;z-index:1000;margin-bottom:.5rem;box-shadow:0 2px 8px #0000004d}.action-btn[title][data-v-c28c01c6]:hover:before{content:"";position:absolute;bottom:100%;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:#333;margin-bottom:-.5rem;z-index:1000}.loading-row[data-v-c28c01c6],.empty-row[data-v-c28c01c6]{grid-column:1 / -1;padding:2rem;text-align:center;color:#666}.blocked-dates-list[data-v-c28c01c6]{display:flex;flex-direction:column;gap:1rem}.blocked-date-item[data-v-c28c01c6]{display:flex;justify-content:space-between;align-items:center;padding:1rem;border:1px solid #e1e8ed;border-radius:8px;background:#f8f9fa}.date-info[data-v-c28c01c6]{display:flex;flex-direction:column;gap:.5rem}.date[data-v-c28c01c6]{font-weight:700;color:#2c3e50}.reason[data-v-c28c01c6]{color:#666;font-size:.875rem}.date-actions[data-v-c28c01c6]{display:flex;gap:.5rem}.edit-btn[data-v-c28c01c6],.delete-btn[data-v-c28c01c6]{border:none;width:40px;height:40px;border-radius:6px;cursor:pointer;font-size:1.2rem;transition:all .3s ease;display:flex;align-items:center;justify-content:center;position:relative}.edit-btn[data-v-c28c01c6]{background:#17a2b8;color:#fff}.edit-btn[data-v-c28c01c6]:hover{background:#138496;transform:translateY(-2px);box-shadow:0 4px 8px #0003}.delete-btn[data-v-c28c01c6]{background:#dc3545;color:#fff}.delete-btn[data-v-c28c01c6]:hover{background:#c82333;transform:translateY(-2px);box-shadow:0 4px 8px #0003}.edit-btn[title][data-v-c28c01c6]:hover:after,.delete-btn[title][data-v-c28c01c6]:hover:after{content:attr(title);position:absolute;bottom:100%;left:50%;transform:translate(-50%);background:#333;color:#fff;padding:.5rem;border-radius:4px;font-size:.75rem;white-space:nowrap;z-index:1000;margin-bottom:.5rem;box-shadow:0 2px 8px #0000004d}.edit-btn[title][data-v-c28c01c6]:hover:before,.delete-btn[title][data-v-c28c01c6]:hover:before{content:"";position:absolute;bottom:100%;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:#333;margin-bottom:-.5rem;z-index:1000}.settings-form[data-v-c28c01c6]{display:flex;flex-direction:column;gap:2rem}.setting-group[data-v-c28c01c6]{display:flex;flex-direction:column;gap:.5rem}.setting-group label[data-v-c28c01c6]{font-weight:700;color:#2c3e50}.setting-group input[data-v-c28c01c6]{padding:.75rem;border:2px solid #e1e8ed;border-radius:8px;font-size:1rem}.setting-group input[data-v-c28c01c6]:focus{outline:none;border-color:#3498db}.save-btn[data-v-c28c01c6]{background:#28a745;color:#fff;border:none;width:40px;height:40px;border-radius:8px;cursor:pointer;align-self:flex-start;font-size:1.2rem;transition:all .3s ease;display:flex;align-items:center;justify-content:center;position:relative}.save-btn[data-v-c28c01c6]:hover{background:#218838;transform:translateY(-2px);box-shadow:0 4px 8px #0003}.save-btn[title][data-v-c28c01c6]:hover:after{content:attr(title);position:absolute;bottom:100%;left:50%;transform:translate(-50%);background:#333;color:#fff;padding:.5rem;border-radius:4px;font-size:.75rem;white-space:nowrap;z-index:1000;margin-bottom:.5rem;box-shadow:0 2px 8px #0000004d}.save-btn[title][data-v-c28c01c6]:hover:before{content:"";position:absolute;bottom:100%;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:#333;margin-bottom:-.5rem;z-index:1000}.modal-overlay[data-v-c28c01c6]{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-content[data-v-c28c01c6]{background:#fff;border-radius:15px;padding:2rem;max-width:500px;width:90%;max-height:90vh;overflow-y:auto;box-shadow:0 10px 30px #0000004d}.modal-content.large[data-v-c28c01c6]{max-width:800px}.modal-header[data-v-c28c01c6]{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem;padding-bottom:1rem;border-bottom:1px solid #e1e8ed}.modal-header h3[data-v-c28c01c6]{color:#2c3e50;margin:0}.close-btn[data-v-c28c01c6]{background:none;border:none;font-size:1.5rem;cursor:pointer;color:#666;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all .3s ease;position:relative}.close-btn[data-v-c28c01c6]:hover{color:#333;background:#f8f9fa}.close-btn[title][data-v-c28c01c6]:hover:after{content:attr(title);position:absolute;bottom:100%;left:50%;transform:translate(-50%);background:#333;color:#fff;padding:.5rem;border-radius:4px;font-size:.75rem;white-space:nowrap;z-index:1000;margin-bottom:.5rem;box-shadow:0 2px 8px #0000004d}.close-btn[title][data-v-c28c01c6]:hover:before{content:"";position:absolute;bottom:100%;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:#333;margin-bottom:-.5rem;z-index:1000}.modal-body[data-v-c28c01c6]{margin-bottom:2rem}.modal-footer[data-v-c28c01c6]{display:flex;gap:1rem;justify-content:flex-end}.btn-primary[data-v-c28c01c6],.btn-secondary[data-v-c28c01c6]{padding:.75rem 1.5rem;border:none;border-radius:8px;cursor:pointer;font-size:1rem;transition:background-color .3s ease}.btn-primary[data-v-c28c01c6]{background:var(--primary-color);color:#fff}.btn-primary[data-v-c28c01c6]:hover:not(:disabled){background:var(--primary-dark);box-shadow:0 4px 10px #2c5f5d4d}.btn-secondary[data-v-c28c01c6]{background:#6c757d;color:#fff}.btn-secondary[data-v-c28c01c6]:hover{background:#5a6268}.form-group[data-v-c28c01c6]{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem}.form-group label[data-v-c28c01c6]{font-weight:700;color:#2c3e50}.form-group input[data-v-c28c01c6],.form-group textarea[data-v-c28c01c6]{padding:.75rem;border:2px solid #e1e8ed;border-radius:8px;font-size:1rem}.form-group input[data-v-c28c01c6]:focus,.form-group textarea[data-v-c28c01c6]:focus{outline:none;border-color:#3498db}.form-group textarea[data-v-c28c01c6]{resize:vertical;min-height:80px}.request-details[data-v-c28c01c6]{display:flex;flex-direction:column;gap:1rem}.detail-row[data-v-c28c01c6]{display:flex;gap:1rem;align-items:center}.detail-row strong[data-v-c28c01c6]{min-width:150px;color:#2c3e50}.detail-row input[data-v-c28c01c6],.detail-row select[data-v-c28c01c6]{padding:.5rem;border:1px solid #e1e8ed;border-radius:4px;flex:1}.no-communications[data-v-c28c01c6]{text-align:center;color:#666;padding:2rem}.communications-list[data-v-c28c01c6]{display:flex;flex-direction:column;gap:1rem}.communication-item[data-v-c28c01c6]{border:1px solid #e1e8ed;border-radius:8px;padding:1rem;background:#f8f9fa}.comm-header[data-v-c28c01c6]{display:flex;gap:1rem;margin-bottom:.5rem;font-size:.875rem}.comm-type[data-v-c28c01c6]{background:#3498db;color:#fff;padding:.25rem .5rem;border-radius:4px;font-weight:700}.comm-direction[data-v-c28c01c6]{color:#666}.comm-date[data-v-c28c01c6]{color:#666;margin-left:auto}.comm-message[data-v-c28c01c6]{color:#2c3e50;line-height:1.5}.loading-state[data-v-c28c01c6]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem;color:#666}.loading-spinner[data-v-c28c01c6]{border:4px solid #f3f3f3;border-top:4px solid #3498db;border-radius:50%;width:40px;height:40px;animation:spin-c28c01c6 1s linear infinite;margin-bottom:1rem}@keyframes spin-c28c01c6{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (max-width: 768px){.admin-tabs[data-v-c28c01c6]{flex-direction:column}.table-header[data-v-c28c01c6],.table-row[data-v-c28c01c6]{grid-template-columns:1fr;gap:.5rem}.header-cell[data-v-c28c01c6],.cell[data-v-c28c01c6]{border-right:none;border-bottom:1px solid #e1e8ed}.actions[data-v-c28c01c6]{flex-direction:row;justify-content:center;gap:.5rem}.blocked-date-item[data-v-c28c01c6]{flex-direction:column;gap:1rem;align-items:flex-start}.modal-content[data-v-c28c01c6]{margin:1rem;width:calc(100% - 2rem)}.admin-user-info[data-v-c28c01c6]{flex-direction:column;gap:.5rem}}.content-sections[data-v-c28c01c6]{display:flex;flex-direction:column;gap:2rem}.content-section[data-v-c28c01c6]{background:#f8f9fa;padding:1.5rem;border-radius:10px;border:1px solid #e1e8ed}.content-section h3[data-v-c28c01c6]{color:#2c3e50;margin-bottom:1rem;font-size:1.3rem}.content-section h4[data-v-c28c01c6]{color:#2c3e50;margin-bottom:.75rem;font-size:1.1rem}.content-form[data-v-c28c01c6]{display:flex;flex-direction:column;gap:1rem}.feature-group[data-v-c28c01c6]{background:#fff;padding:1rem;border-radius:8px;border:1px solid #e1e8ed}.feature-group[data-v-c28c01c6]:not(:last-child){margin-bottom:1rem}.content-form .form-group[data-v-c28c01c6]{margin-bottom:.5rem}.content-form .form-group label[data-v-c28c01c6]{font-weight:600;color:#2c3e50;margin-bottom:.5rem;display:block}.content-form .form-group input[data-v-c28c01c6],.content-form .form-group textarea[data-v-c28c01c6]{width:100%;padding:.75rem;border:2px solid #e1e8ed;border-radius:8px;font-size:1rem;transition:border-color .3s ease}.content-form .form-group input[data-v-c28c01c6]:focus,.content-form .form-group textarea[data-v-c28c01c6]:focus{outline:none;border-color:var(--primary-color);background:#f8f9fa;box-shadow:0 0 0 3px #2c5f5d1a}.content-form .form-group textarea[data-v-c28c01c6]{resize:vertical;font-family:inherit}.login[data-v-2b41928d]{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--primary-color) 0%,var(--primary-light) 100%);padding:2rem}.login-container[data-v-2b41928d]{background:#fff;border-radius:15px;padding:3rem;box-shadow:0 10px 30px #0000004d;max-width:400px;width:100%}.login-header[data-v-2b41928d]{text-align:center;margin-bottom:2rem}.login-header h1[data-v-2b41928d]{color:var(--primary-color);font-size:2rem;margin-bottom:.5rem}.login-header p[data-v-2b41928d]{color:var(--text-gray);font-size:1rem}.login-form[data-v-2b41928d]{display:flex;flex-direction:column;gap:1.5rem}.form-group[data-v-2b41928d]{display:flex;flex-direction:column;gap:.5rem}.form-group label[data-v-2b41928d]{font-weight:700;color:var(--primary-color);font-size:.9rem}.form-group input[data-v-2b41928d]{padding:.75rem;border:2px solid #e1e8ed;border-radius:8px;font-size:1rem;transition:border-color .3s ease}.form-group input[data-v-2b41928d]:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 3px #2c5f5d1a}.form-group input[data-v-2b41928d]:disabled{background:#f8f9fa;cursor:not-allowed}.form-error[data-v-2b41928d]{background:#fee;color:#c53030;padding:1rem;border-radius:8px;border:1px solid #feb2b2;text-align:center;font-size:.9rem}.login-btn[data-v-2b41928d]{background:var(--primary-color);color:#fff;border:none;padding:1rem;border-radius:8px;font-size:1rem;font-weight:700;cursor:pointer;transition:all .3s ease;box-shadow:0 4px 10px #2c5f5d4d}.login-btn[data-v-2b41928d]:hover:not(:disabled){background:var(--primary-dark);transform:translateY(-2px);box-shadow:0 6px 15px #2c5f5d66}.login-btn[data-v-2b41928d]:disabled{background:#bdc3c7;cursor:not-allowed}.login-info[data-v-2b41928d]{margin-top:2rem;padding:1.5rem;background:#f8f9fa;border-radius:8px;border:1px solid #e1e8ed}.login-info p[data-v-2b41928d]{margin:.5rem 0;color:#666;font-size:.9rem}.login-info strong[data-v-2b41928d]{color:var(--primary-color)}@media (max-width: 480px){.login-container[data-v-2b41928d]{padding:2rem}.login-header h1[data-v-2b41928d]{font-size:1.75rem}}.pricelist[data-v-5946fc5a]{max-width:1200px;margin:0 auto;padding:2rem}.pricelist-header[data-v-5946fc5a]{text-align:center;margin-bottom:3rem}.pricelist-header h1[data-v-5946fc5a]{color:#2c3e50;font-size:3rem;margin-bottom:1rem}.pricelist-header p[data-v-5946fc5a]{color:#666;font-size:1.2rem;margin-bottom:2rem}.back-btn[data-v-5946fc5a]{display:inline-block;background:#6c757d;color:#fff;padding:.75rem 1.5rem;text-decoration:none;border-radius:8px;font-size:1rem;transition:background-color .3s ease}.back-btn[data-v-5946fc5a]:hover{background:#5a6268}.loading-state[data-v-5946fc5a],.empty-state[data-v-5946fc5a]{text-align:center;padding:4rem;color:#666}.loading-spinner[data-v-5946fc5a]{border:4px solid #f3f3f3;border-top:4px solid #3498db;border-radius:50%;width:50px;height:50px;animation:spin-5946fc5a 1s linear infinite;margin:0 auto 1rem}@keyframes spin-5946fc5a{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.pricelist-grid[data-v-5946fc5a]{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:2rem;margin-bottom:4rem}.price-card[data-v-5946fc5a]{background:#fff;border:2px solid #e1e8ed;border-radius:15px;padding:2rem;box-shadow:0 4px 15px #0000001a;transition:all .3s ease}.price-card[data-v-5946fc5a]:hover{transform:translateY(-5px);box-shadow:0 8px 25px #00000026;border-color:#3498db}.price-header[data-v-5946fc5a]{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;padding-bottom:1rem;border-bottom:2px solid #f8f9fa}.price-header h3[data-v-5946fc5a]{color:#2c3e50;margin:0;font-size:1.3rem}.price[data-v-5946fc5a]{background:#3498db;color:#fff;padding:.5rem 1rem;border-radius:25px;font-size:1.2rem;font-weight:700}.description[data-v-5946fc5a]{color:#666;line-height:1.6;margin:0}.cta-section[data-v-5946fc5a]{text-align:center;background:#f8f9fa;padding:3rem 2rem;border-radius:15px;border:2px dashed #3498db}.cta-section h2[data-v-5946fc5a]{color:#2c3e50;margin-bottom:1rem}.cta-section p[data-v-5946fc5a]{color:#666;font-size:1.1rem;margin-bottom:2rem}.cta-button[data-v-5946fc5a]{display:inline-block;background:#3498db;color:#fff;padding:1rem 2rem;text-decoration:none;border-radius:10px;font-size:1.1rem;font-weight:700;transition:background-color .3s ease}.cta-button[data-v-5946fc5a]:hover{background:#2980b9}@media (max-width: 768px){.pricelist[data-v-5946fc5a]{padding:1rem}.pricelist-header h1[data-v-5946fc5a]{font-size:2rem}.pricelist-grid[data-v-5946fc5a]{grid-template-columns:1fr;gap:1rem}.price-header[data-v-5946fc5a]{flex-direction:column;text-align:center;gap:1rem}}:root{--primary-color: #2c5f5d;--primary-dark: #1f4443;--primary-light: #3d7a77;--secondary-color: #8b6f47;--secondary-dark: #6d5637;--secondary-light: #a68a5f;--text-dark: #2c3e50;--text-gray: #666;--bg-light: #f5f5f5;--bg-white: #ffffff}body{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;background-color:var(--bg-light)}.navbar{background:linear-gradient(135deg,var(--primary-color) 0%,var(--primary-light) 100%);padding:.5rem 0;box-shadow:0 2px 10px #2c5f5d33}.nav-container{max-width:1200px;margin:0 auto;display:flex;justify-content:space-between;align-items:center;padding:0 2rem}.nav-logo{display:flex;align-items:center;text-decoration:none}.logo-image{height:70px;width:auto;filter:drop-shadow(0 2px 4px rgba(0,0,0,.1));transition:transform .3s ease}.logo-image:hover{transform:scale(1.05)}.nav-menu{display:flex;gap:2rem;align-items:center}.nav-link{color:#fff;text-decoration:none;padding:.5rem 1rem;border-radius:5px;transition:all .3s ease;font-weight:500}.nav-link:hover{background-color:#ffffff26;transform:translateY(-1px)}.nav-link.router-link-active{background-color:var(--secondary-color)}.main-content{max-width:1200px;margin:2rem auto;padding:0 2rem}@media (max-width: 768px){.nav-container{flex-direction:column;gap:1rem;padding:1rem}.logo-image{height:75px}.nav-menu{flex-wrap:wrap;justify-content:center;gap:1rem}.nav-link{padding:.4rem .8rem;font-size:.9rem}}*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth}body{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;line-height:1.6;color:#333;background-color:#f5f5f5}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.mb-1{margin-bottom:.5rem}.mb-2{margin-bottom:1rem}.mb-3{margin-bottom:1.5rem}.mb-4{margin-bottom:2rem}.mt-1{margin-top:.5rem}.mt-2{margin-top:1rem}.mt-3{margin-top:1.5rem}.mt-4{margin-top:2rem}.p-1{padding:.5rem}.p-2{padding:1rem}.p-3{padding:1.5rem}.p-4{padding:2rem}.btn{display:inline-block;padding:.5rem 1rem;border:none;border-radius:5px;cursor:pointer;text-decoration:none;font-size:1rem;transition:all .3s ease}.btn-primary{background:#667eea;color:#fff}.btn-primary:hover{background:#5a6fd8}.btn-secondary{background:#6c757d;color:#fff}.btn-secondary:hover{background:#5a6268}.card{background:#fff;border-radius:10px;box-shadow:0 2px 10px #0000001a;padding:1.5rem;margin-bottom:1rem}@media (max-width: 768px){.nav-container{flex-direction:column;gap:1rem}.nav-menu{gap:1rem}.hero h1{font-size:2rem}.features{grid-template-columns:1fr}} diff --git a/backend/public/index.html b/backend/public/index.html index 7133d6d..0ba7bc4 100644 --- a/backend/public/index.html +++ b/backend/public/index.html @@ -6,8 +6,8 @@ Bike Service - Jouw fiets, onze zorg - - + +
diff --git a/backend/resources/views/emails/pickup-confirmation.blade.php b/backend/resources/views/emails/pickup-confirmation.blade.php new file mode 100644 index 0000000..67c0bd4 --- /dev/null +++ b/backend/resources/views/emails/pickup-confirmation.blade.php @@ -0,0 +1,201 @@ + + + + + + Uw fiets is klaar voor ophalen + + + +
+
+ +

🚲 Uw fiets is klaar!

+
+ +
+
+ {{ $customMessage }} +
+ +
+

📅 Ophaalgegevens

+ +
+
📅
+
+
Datum van ophalen:
+
{{ $pickupDate }}
+
+
+ +
+
🕐
+
+
Tijd van ophalen:
+
{{ $pickupTime }}
+
+
+
+ +
+ Vergeet niet uw afhaalbewijs mee te nemen! +
+ +
+

Uw gegevens

+
+
Naam:
+
{{ $serviceRequest->name }}
+
+
+
Adres:
+
{{ $serviceRequest->address }}, {{ $serviceRequest->place }}
+
+ @if($serviceRequest->phone) +
+
Telefoon:
+
{{ $serviceRequest->phone }}
+
+ @endif +
+
+ + +
+ + diff --git a/backend/routes/api.php b/backend/routes/api.php index 3819f54..e4634f3 100644 --- a/backend/routes/api.php +++ b/backend/routes/api.php @@ -48,6 +48,7 @@ Route::middleware('auth:sanctum')->group(function () { Route::apiResource('service-requests', ServiceRequestController::class); Route::post('service-requests/{serviceRequest}/send-email', [ServiceRequestController::class, 'sendEmail']); Route::post('service-requests/{serviceRequest}/send-sms', [ServiceRequestController::class, 'sendSms']); + Route::post('service-requests/{serviceRequest}/send-pickup-confirmation', [ServiceRequestController::class, 'sendPickupConfirmation']); Route::get('service-requests/{serviceRequest}/communications', [ServiceRequestController::class, 'communications']); Route::apiResource('blocked-dates', BlockedDateController::class); diff --git a/frontend/src/views/Admin.vue b/frontend/src/views/Admin.vue index e5a17d4..5a43a07 100644 --- a/frontend/src/views/Admin.vue +++ b/frontend/src/views/Admin.vue @@ -283,6 +283,19 @@ 💾 + +
+ + + +
@@ -321,25 +334,34 @@ Gewenste Datum/Tijd: {{ formatDateTime(selectedRequest.requested_date, selectedRequest.requested_time) }}
- Status: + Status:
- Werkelijke Reparatie Datum: + Werkelijke ophaalDatum:
- Werkelijke Reparatie Tijd: + Werkelijke ophaaltijd:
@@ -522,6 +544,7 @@ export default { // Loading states const emailLoading = ref(false) const smsLoading = ref(false) + const pickupConfirmationLoading = ref(false) const tabs = [ { id: 'requests', label: 'Service Aanvragen' }, @@ -542,6 +565,7 @@ export default { const statusMap = { 'pending': 'In afwachting', 'confirmed': 'Bevestigd', + 'mail_sent': 'Bevestigd mail verstuurd', 'completed': 'Voltooid', 'cancelled': 'Geannuleerd' } @@ -658,7 +682,7 @@ export default { const viewRequest = async (request) => { requestModalLoading.value = true showRequestModal.value = true - + // Get the latest data from the database to ensure we have the most current information try { const response = await fetch(`/api/service-requests/${request.id}`, { @@ -666,16 +690,29 @@ export default { }) if (response.ok) { const latestRequest = await response.json() + + // Format dates for HTML date inputs (YYYY-MM-DD) + if (latestRequest.actual_repair_date) { + // Extract just the date part if it's a datetime string + latestRequest.actual_repair_date = latestRequest.actual_repair_date.split('T')[0] + } + selectedRequest.value = { ...latestRequest } } else { // Fallback to local data if API call fails const latestRequest = requests.value.find(r => r.id === request.id) + if (latestRequest && latestRequest.actual_repair_date) { + latestRequest.actual_repair_date = latestRequest.actual_repair_date.split('T')[0] + } selectedRequest.value = latestRequest ? { ...latestRequest } : { ...request } } } catch (error) { console.error('Failed to fetch latest request data:', error) // Fallback to local data if API call fails const latestRequest = requests.value.find(r => r.id === request.id) + if (latestRequest && latestRequest.actual_repair_date) { + latestRequest.actual_repair_date = latestRequest.actual_repair_date.split('T')[0] + } selectedRequest.value = latestRequest ? { ...latestRequest } : { ...request } } finally { requestModalLoading.value = false @@ -764,7 +801,7 @@ export default { const submitSms = async () => { if (!smsForm.value.message.trim()) return - + smsLoading.value = true try { const response = await fetch(`/api/service-requests/${selectedRequest.value.id}/send-sms`, { @@ -772,7 +809,7 @@ export default { headers: authStore.getAuthHeaders(), body: JSON.stringify({ message: smsForm.value.message }) }) - + if (response.ok) { closeSmsModal() await fetchRequests() // Refresh to show new communication @@ -783,6 +820,51 @@ export default { smsLoading.value = false } } + + const sendPickupConfirmation = async () => { + if (!selectedRequest.value?.email) { + alert('Geen e-mailadres beschikbaar voor deze klant') + return + } + + if (!selectedRequest.value?.actual_repair_date || !selectedRequest.value?.actual_repair_time) { + alert('Vul eerst de werkelijke ophaaldatum en tijd in') + return + } + + if (!confirm('Weet u zeker dat u de ophaalbevestiging wilt versturen naar ' + selectedRequest.value.email + '?')) { + return + } + + pickupConfirmationLoading.value = true + try { + const response = await fetch(`/api/service-requests/${selectedRequest.value.id}/send-pickup-confirmation`, { + method: 'POST', + headers: authStore.getAuthHeaders() + }) + + if (response.ok) { + const data = await response.json() + alert('Ophaalbevestiging succesvol verzonden!') + + // Update the selected request with the new status + if (data.service_request) { + selectedRequest.value = data.service_request + } + + // Refresh the requests list + await fetchRequests() + } else { + const error = await response.json() + alert('Fout bij versturen: ' + (error.message || 'Onbekende fout')) + } + } catch (error) { + console.error('Failed to send pickup confirmation:', error) + alert('Fout bij versturen van ophaalbevestiging') + } finally { + pickupConfirmationLoading.value = false + } + } const editBlockedDate = (date) => { editingBlockedDate.value = date @@ -1045,6 +1127,7 @@ export default { communications, emailLoading, smsLoading, + pickupConfirmationLoading, minDate, getStatusText, getCommTypeText, @@ -1063,6 +1146,7 @@ export default { viewCommunications, submitEmail, submitSms, + sendPickupConfirmation, editBlockedDate, saveBlockedDate, deleteBlockedDate, @@ -1311,6 +1395,12 @@ export default { color: #0c5460; } +.status-badge.mail_sent { + background: #e7d4c5; + color: #6d5637; + font-weight: bold; +} + .status-badge.completed { background: #d4edda; color: #155724; @@ -1604,16 +1694,24 @@ export default { color: #2c3e50; } -.setting-group input { +.setting-group input, +.setting-group textarea { padding: 0.75rem; border: 2px solid #e1e8ed; border-radius: 8px; font-size: 1rem; + font-family: inherit; } -.setting-group input:focus { +.setting-group input:focus, +.setting-group textarea:focus { outline: none; - border-color: #3498db; + border-color: var(--primary-color); +} + +.setting-group textarea { + resize: vertical; + min-height: 120px; } .save-btn { @@ -1801,6 +1899,30 @@ export default { background: #5a6268; } +.btn-pickup-confirmation { + padding: 0.75rem 1.5rem; + border: none; + border-radius: 8px; + cursor: pointer; + font-size: 1rem; + transition: all 0.3s ease; + background: var(--secondary-color); + color: white; + font-weight: bold; +} + +.btn-pickup-confirmation:hover:not(:disabled) { + background: var(--secondary-dark); + box-shadow: 0 4px 10px rgba(139, 111, 71, 0.3); + transform: translateY(-2px); +} + +.btn-pickup-confirmation:disabled { + background: #bdc3c7; + cursor: not-allowed; + opacity: 0.6; +} + /* Form Styles */ .form-group { display: flex; diff --git a/frontend/src/views/Pricelist.vue b/frontend/src/views/Pricelist.vue index 71aa2c5..1c4bc11 100644 --- a/frontend/src/views/Pricelist.vue +++ b/frontend/src/views/Pricelist.vue @@ -93,7 +93,7 @@ export default { .back-btn { display: inline-block; - background: #6c757d; + background: var(--secondary-color); color: white; padding: 0.75rem 1.5rem; text-decoration: none; @@ -103,7 +103,7 @@ export default { } .back-btn:hover { - background: #5a6268; + background: var(--secondary-dark); } .loading-state, .empty-state { @@ -114,7 +114,7 @@ export default { .loading-spinner { border: 4px solid #f3f3f3; - border-top: 4px solid #3498db; + border-top: 4px solid var(--primary-color); border-radius: 50%; width: 50px; height: 50px; @@ -146,7 +146,7 @@ export default { .price-card:hover { transform: translateY(-5px); box-shadow: 0 8px 25px rgba(0,0,0,0.15); - border-color: #3498db; + border-color: var(--primary-color); } .price-header { @@ -165,7 +165,7 @@ export default { } .price { - background: #3498db; + background: var(--primary-color); color: white; padding: 0.5rem 1rem; border-radius: 25px; @@ -184,7 +184,7 @@ export default { background: #f8f9fa; padding: 3rem 2rem; border-radius: 15px; - border: 2px dashed #3498db; + border: 2px dashed var(--primary-color); } .cta-section h2 { @@ -200,7 +200,7 @@ export default { .cta-button { display: inline-block; - background: #3498db; + background: var(--primary-color); color: white; padding: 1rem 2rem; text-decoration: none; @@ -211,7 +211,7 @@ export default { } .cta-button:hover { - background: #2980b9; + background: var(--primary-dark); } @media (max-width: 768px) {