1import{b as Y,e as ae,i as W}from"./chunk-DLGRV5T3.js";import{$ as N,B as A,C as f,D as _,Da as G,Ea as J,F as $,Fa as K,G as k,Ga as Q,H as x,Ha as X,I as u,Ia as Z,J as a,Ja as ee,K as n,Ka as te,L as V,La as ie,M as C,Ma as oe,N as S,Oa as ne,Pa as re,Q as T,R as v,S as R,T as g,Z as I,_ as r,aa as M,ba as H,ca as D,da as P,e as j,ea as E,g as q,h,i as O,j as w,ja as d,p as m,u as c,w as B,xa as U}from"./chunk-THA5B2ZL.js";import{a as p,b}from"./chunk-2NFLSA4Y.js";var se={isOpen:!1,step:1,category:"dental",clinicId:null,serviceId:null,treatment:null,patientName:"",patientEmail:"",patientPhone:"",preferredDate:"",preferredTime:"",message:""},y=class o{request=h(re);submittedBooking=m(null);hasSubmittedBooking=d(()=>this.submittedBooking()!==null);state=m(p({},se));isOpen=d(()=>this.state().isOpen);step=d(()=>this.state().step);category=d(()=>this.state().category);clinicId=d(()=>this.state().clinicId);serviceId=d(()=>this.state().serviceId);treatment=d(()=>this.state().treatment);patientName=d(()=>this.state().patientName);patientEmail=d(()=>this.state().patientEmail);patientPhone=d(()=>this.state().patientPhone);preferredDate=d(()=>this.state().preferredDate);preferredTime=d(()=>this.state().preferredTime);message=d(()=>this.state().message);open(e){this.submittedBooking.set(null),this.state.update(t=>b(p({},t),{isOpen:!0,step:1,category:e??"dental"}))}close(){this.submittedBooking.set(null),this.state.update(e=>b(p({},e),{isOpen:!1}))}nextStep(){this.state.update(e=>b(p({},e),{step:Math.min(e.step+1,2)}))}previousStep(){this.state.update(e=>b(p({},e),{step:Math.max(e.step-1,1)}))}setCategory(e){this.state.update(t=>b(p({},t),{category:e}))}setClinic(e){this.state.update(t=>b(p({},t),{clinicId:e}))}listClinics(){return this.request.get("/clinics/public")}setService(e){this.state.update(t=>b(p({},t),{serviceId:e}))}setTreatment(e){this.state.update(t=>b(p({},t),{treatment:e}))}setPatientDetails(e){this.state.update(t=>p(p({},t),e))}reset(){this.submittedBooking.set(null),this.state.set(p({},se))}getAvailableSlots(e,t,i){return this.request.get(`/clinics/${i}/appointments/available-slots`,{date_start:e,date_end:t})}submitBooking(){let e=this.state();if(!e.category)throw new Error("Booking category is required before submitting.");if(!e.clinicId)throw new Error("A clinic must be selected before submitting.");let t=e.clinicId,i={patient_name:e.patientName,patient_email:e.patientEmail,patient_phone:e.patientPhone,preferred_date:e.preferredDate,preferred_time:e.preferredTime,category:e.category,service_id:e.serviceId,treatment:e.treatment,message:e.message||null};return this.request.post(`/clinics/${t}/appointments/public-booking`,i).pipe(j(s=>this.submittedBooking.set(s)))}static \u0275fac=function(t){return new(t||o)};static \u0275prov=q({token:o,factory:o.\u0275fac,providedIn:"root"})};var F=class o{booking=h(y);selectService(e){this.booking.setService(e),this.booking.nextStep()}goBack(){this.booking.previousStep()}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=B({type:o,selectors:[["app-booking-service-step"]],decls:16,vars:0,consts:[[1,"step"],[1,"hint"],[1,"service-options"],[1,"service-option",3,"click"]],template:function(t,i){t&1&&(C(0,"div",0)(1,"h2"),r(2,"Elige tu servicio"),S(),C(3,"p",1),r(4,"Selecciona el tratamiento que te interesa."),S(),C(5,"div",2)(6,"button",3),R("click",function(){return i.selectService("consultation")}),C(7,"h3"),r(8,"Consulta inicial"),S(),C(9,"p"),r(10,"Primera valoraci\xF3n personalizada sin compromiso."),S()(),C(11,"button",3),R("click",function(){return i.selectService("advice")}),C(12,"h3"),r(13,"Asesoramiento"),S(),C(14,"p"),r(15,"Necesito que me orienten sobre las opciones disponibles."),S()()()())},styles:[".step[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-family:var(--font-heading);font-size:var(--fs-h2);font-weight:var(--fw-regular);color:var(--color-text-primary);text-align:center}.step[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{text-align:center;color:var(--color-text-muted);margin-top:var(--space-sm);margin-bottom:var(--space-md)}.service-options[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:var(--space-md)}.service-option[_ngcontent-%COMP%]{display:block;width:100%;text-align:left;padding:var(--space-md) var(--space-lg);border:1px solid var(--color-border);border-radius:var(--border-radius-md);background-color:var(--color-bg-primary);cursor:pointer;transition:border-color var(--duration-base) var(--ease-out-expo),background-color var(--duration-base) var(--ease-out-expo)}.service-option[_ngcontent-%COMP%]:hover{border-color:var(--color-text-primary);background-color:var(--color-bg-secondary)}.service-option[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-family:var(--font-heading);font-size:var(--fs-h3);font-weight:var(--fw-medium);color:var(--color-text-primary)}.service-option[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{font-size:var(--fs-small);color:var(--color-text-secondary);margin-top:var(--space-xs)}.step-nav[_ngcontent-%COMP%]{margin-top:var(--space-xl)}.back-btn[_ngcontent-%COMP%]{font-size:var(--fs-small);color:var(--color-text-muted);cursor:pointer;transition:color var(--duration-fast) ease}.back-btn[_ngcontent-%COMP%]:hover{color:var(--color-text-primary)}"],changeDetection:0})};var ge=(o,e)=>e.code,pe=(o,e)=>e.id,ue=(o,e)=>e.isoDate,ce=(o,e)=>e.time;function ve(o,e){if(o&1&&(a(0,"option",11),r(1),n()),o&2){let t=e.$implicit;u("value",t.code),c(),H("",t.code," \xB7 ",t.label)}}function be(o,e){o&1&&(a(0,"p",13),r(1,"Cargando cl\xEDnicas..."),n())}function he(o,e){if(o&1&&(a(0,"p",14),r(1),n()),o&2){let t=g();c(),N(t.clinicsError())}}function fe(o,e){if(o&1&&(a(0,"option",11),r(1),n()),o&2){let t=e.$implicit;u("value",t.id),c(),N(t.name)}}function _e(o,e){if(o&1){let t=T();a(0,"div",3)(1,"label",26),r(2,"Cl\xEDnica"),n(),a(3,"select",27),v("ngModelChange",function(s){O(t);let l=g();return w(l.selectClinic(s))}),k(4,fe,2,2,"option",11,pe),n()()}if(o&2){let t=g();c(3),u("ngModel",t.selectedClinicId()),c(),x(t.clinics())}}function Ce(o,e){if(o&1&&(a(0,"option",11),r(1),n()),o&2){let t=e.$implicit;u("value",t),c(),N(t)}}function ye(o,e){o&1&&(a(0,"p",13),r(1,"Cargando disponibilidad..."),n())}function ke(o,e){if(o&1&&(a(0,"p",14),r(1),n()),o&2){let t=g();c(),N(t.slotsError())}}function xe(o,e){if(o&1){let t=T();a(0,"button",29),v("click",function(){let s=O(t).$implicit,l=g(2);return w(l.selectDay(s.isoDate))}),r(1),n()}if(o&2){let t=e.$implicit,i=g(2);
1I("is-selected",i.selectedDate()===t.isoDate)("is-unavailable",!t.isAvailable),u("disabled",!t.isAvailable),A("aria-pressed",i.selectedDate()===t.isoDate),c(),M(" ",t.label," ")}}function Se(o,e){if(o&1&&(a(0,"div",18),k(1,xe,2,7,"button",28,ue),n()),o&2){let t=g();c(),x(t.days())}}function Me(o,e){if(o&1){let t=T();a(0,"button",35),v("click",function(){let s=O(t).$implicit,l=g(2);return w(l.selectTime(s.time))}),r(1),n()}if(o&2){let t=e.$implicit,i=g(2);I("is-selected",i.selectedTime()===t.time)("is-unavailable",!t.isAvailable),u("disabled",!t.isAvailable),A("aria-pressed",i.selectedTime()===t.time),c(),M(" ",t.time," ")}}function De(o,e){if(o&1){let t=T();a(0,"button",35),v("click",function(){let s=O(t).$implicit,l=g(2);return w(l.selectTime(s.time))}),r(1),n()}if(o&2){let t=e.$implicit,i=g(2);I("is-selected",i.selectedTime()===t.time)("is-unavailable",!t.isAvailable),u("disabled",!t.isAvailable),A("aria-pressed",i.selectedTime()===t.time),c(),M(" ",t.time," ")}}function Pe(o,e){o&1&&(a(0,"p",13),r(1,"No quedan huecos libres para este d\xEDa."),n())}function Ee(o,e){if(o&1&&(a(0,"div",3)(1,"label"),r(2,"Hora preferida"),n(),a(3,"div",30)(4,"p",31),r(5,"Ma\xF1ana"),n(),a(6,"div",32),k(7,Me,2,7,"button",33,ce),n(),a(9,"p",31),r(10,"Tarde"),n(),a(11,"div",34),k(12,De,2,7,"button",33,ce),n(),f(14,Pe,2,0,"p",13),n()()),o&2){let t=g();c(7),x(t.timeSlotsM()),c(5),x(t.timeSlotsA()),c(2),_(t.hasAnyAvailableTimeSlots()?-1:14)}}function Oe(o,e){if(o&1&&(a(0,"p",14),r(1),n()),o&2){let t=g();c(),N(t.formError())}}function we(o,e){if(o&1){let t=T();a(0,"div",25)(1,"div",36)(2,"div",37),r(3,"\u2713"),n(),a(4,"h3",38),r(5,"\xA1Solicitud enviada!"),n(),a(6,"p"),r(7," Hemos recibido tu solicitud de cita. Nuestro equipo te contactar\xE1 para confirmarla lo antes posible. "),n(),a(8,"kensa-cta-button",39),v("click",function(){O(t);let s=g();return w(s.goHome())}),r(9,"Volver al inicio"),n()()()}}var Be=15,L=class o{booking=h(y);router=h(U);clinics=m([]);selectedClinicId=m("");isLoadingClinics=m(!0);clinicsError=m("");showClinicSelector=d(()=>this.clinics().length>1);availableSlots=m({});isLoadingSlots=m(!0);slotsError=m("");isSubmitting=m(!1);showSuccess=m(!1);formError=m("");consent=m(!1);commercial=m(!1);days=d(()=>Object.entries(this.availableSlots()).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>({isoDate:e,label:this.formatDayLabel(e),isAvailable:this.hasAvailableSlots(t)})));timeSlotsM=d(()=>this.getTimeSlots(this.selectedDate(),"Morning"));timeSlotsA=d(()=>this.getTimeSlots(this.selectedDate(),"Evening"));hasAnyAvailableTimeSlots=d(()=>this.timeSlotsM().some(e=>e.isAvailable)||this.timeSlotsA().some(e=>e.isAvailable));name;email;phone;phonePrefix="+34";treatment;message;treatments=["Implantes Dentales","Pr\xF3tesis Dentales","Ortodoncia","Est\xE9tica Dental","Periodoncia","Odontolog\xEDa General","Odontopediatr\xEDa","Tratamientos Avanzados","Otro / No lo s\xE9"];phonePrefixes=[{code:"+34",label:"Espa\xF1a"},{code:"+351",label:"Portugal"},{code:"+33",label:"Francia"},{code:"+44",label:"Reino Unido"},{code:"+49",label:"Alemania"},{code:"+39",label:"Italia"},{code:"+1",label:"EE. UU."},{code:"+212",label:"Marruecos"}];selectedDate;selectedTime;constructor(){let e=this.booking.state();this.name=e.patientName,this.email=e.patientEmail,this.phone=e.patientPhone,this.treatment=e.treatment??"",this.message=e.message,this.selectedDate=m(e.preferredDate),this.selectedTime=m(e.preferredTime),this.loadClinics()}loadClinics(){this.isLoadingClinics.set(!0),this.clinicsError.set(""),this.booking.listClinics().subscribe({next:e=>{if(this.clinics.set(e),this.isLoadingClinics.set(!1),e.length===0){this.clinicsError.set("No hay cl\xEDnicas disponibles en este momento."),this.isLoadingSlots.set(!1);return}let t=this.booking.clinicId(),i=e.find(s=>s.id===t)?.id??e[0].id;this.applyClinic(i)},error:()=>{this.clinics.set([]),this.clinicsError.set("No se pudieron cargar las cl\xEDnicas. Int\xE9ntalo de nuevo."),this.isLoadingClinics.set(!1),this.isLoadingSlots.set(!1)}})}selectClinic(e){!e||e===this.selectedClinicId()||(this.selectedDate.set(""),this.selectedTime.set(""),this.applyClinic(e))}applyClinic(e){this.selectedClinicId.set(e),this.booking.setClinic(e),this.loadAvailableSlots()}selectDay(e){this.isDateSelectable(e)&&(this.selectedDate.set(e),this.isTimeSelectable(this.selectedTime())||this.selectedTime.set(""))}selectTime(e){this.isTimeSelectable(e)&&this.selectedTime.set(e)}isFormValid(){return this.name.trim().length>0&&this.email.trim().length>
10&&W(this.phonePrefix,this.phone)&&this.selectedDate().length>0&&this.selectedTime().length>0&&this.consent()}goBack(){this.booking.previousStep()}goHome(){this.showSuccess.set(!1),this.booking.reset(),this.router.navigateByUrl("/")}saveAndContinue(){if(!this.isSubmitting()){if(this.formError.set(""),this.phone.trim().length>0&&!W(this.phonePrefix,this.phone)){this.formError.set("Introduce un tel\xE9fono espa\xF1ol v\xE1lido (9 d\xEDgitos que empiecen por 6 o 7).");return}if(!this.isFormValid()){this.formError.set("Completa nombre, email, tel\xE9fono, fecha y hora, y acepta la pol\xEDtica de privacidad antes de continuar.");return}this.booking.setTreatment(this.treatment||null),this.booking.setPatientDetails({patientName:this.name.trim(),patientEmail:this.email.trim(),patientPhone:this.composePhone(),preferredDate:this.selectedDate(),preferredTime:this.selectedTime(),message:this.message.trim()}),this.isSubmitting.set(!0);try{this.booking.submitBooking().subscribe({next:()=>{this.isSubmitting.set(!1),this.showSuccess.set(!0)},error:e=>{if(this.isSubmitting.set(!1),console.error("Booking submission failed",e),e.status===409){this.selectedTime.set(""),this.formError.set("Ese horario ya no est\xE1 disponible. Elige otro e int\xE9ntalo de nuevo."),this.loadAvailableSlots();return}this.formError.set("No se pudo enviar la solicitud. Int\xE9ntalo de nuevo.")}})}catch{this.isSubmitting.set(!1),console.error("Booking submission failed"),this.formError.set("No se pudo enviar la solicitud. Int\xE9ntalo de nuevo.")}}}composePhone(){let e=this.phonePrefix.replace(/\D/g,""),t=this.phone.replace(/\D/g,"");return t.startsWith("00")&&(t=t.slice(2)),t.length>9&&t.startsWith(e)&&(t=t.slice(e.length)),`+${e}${t}`}loadAvailableSlots(){let e=this.selectedClinicId();if(!e)return;let{dateStart:t,dateEnd:i}=this.getAvailabilityRange();this.isLoadingSlots.set(!0),this.slotsError.set(""),this.booking.getAvailableSlots(t,i,e).subscribe({next:s=>{this.availableSlots.set(s),this.reconcileSelection(s),this.isLoadingSlots.set(!1)},error:()=>{this.availableSlots.set({}),this.selectedDate.set(""),this.selectedTime.set(""),this.slotsError.set("No se pudo cargar la disponibilidad."),this.isLoadingSlots.set(!1)}})}reconcileSelection(e){this.isDateSelectable(this.selectedDate(),e)||this.selectedDate.set(this.findFirstAvailableDate(e)??""),this.isTimeSelectable(this.selectedTime(),this.selectedDate(),e)||this.selectedTime.set("")}getAvailabilityRange(){let e=new Date;e.setHours(0,0,0,0);let t=new Date(e);return t.setDate(t.getDate()+Be-1),{dateStart:this.toIsoDate(e),dateEnd:this.toIsoDate(t)}}toIsoDate(e){let t=e.getFullYear(),i=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0");return`${t}-${i}-${s}`}formatDayLabel(e){let[t,i,s]=e.split("-").map(me=>Number(me));return new Date(t,i-1,s).toLocaleDateString("es-ES",{weekday:"short",day:"numeric",month:"short"})}hasAvailableSlots(e){return[...Object.values(e.Morning),...Object.values(e.Evening)].some(Boolean)}findFirstAvailableDate(e){return Object.entries(e).sort(([t],[i])=>t.localeCompare(i)).find(([,t])=>this.hasAvailableSlots(t))?.[0]}isDateSelectable(e,t=this.availableSlots()){if(!e)return!1;let i=t[e];return i?this.hasAvailableSlots(i):!1}getTimeSlots(e,t){return!e||!this.availableSlots()[e]?[]:Object.entries(this.availableSlots()[e][t]).map(([i,s])=>({time:i,isAvailable:s}))}isTimeSelectable(e,t=this.selectedDate(),i=this.availableSlots()){return!e||!t||!i[t]?!1:!!(i[t].Morning[e]??i[t].Evening[e])}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=B({type:o,selectors:[["app-booking-details"]],decls:52,vars:15,consts:[[1,"step"],[1,"hint"],[1,"details-form",3,"ngSubmit"],[1,"form-group"],["for","name"],["type","text","id","name","name","name","placeholder","Tu nombre","required","",3,"ngModelChange","ngModel"],["for","email"],["type","email","id","email","name","email","placeholder","[email protected]","required","",3,"ngModelChange","ngModel"],["for","phone"],[1,"phone-row"],["id","phonePrefix","name","phonePrefix","aria-label","Prefijo de pa\xEDs",1,"phone-prefix",3,"ngModelChange","ngModel"],[3,"value"],["type","tel","id","phone","name","phone","placeholder","671 234 567","required","",3,"ngModelChange","ngModel"],[1,"availability-message"],[1,"availability-message","is-error"],["for","treatment"],["id","treatment","name","treatment",3,"ngModelChange","ngModel"],["value",""],["role","group","aria-label","Selecciona un d\xEDa",1,"day-picker"],["for","message"],["id","message","name","message","rows","3","placeholder","\xBFAlgo que debamos saber?",3,"ngModelChange","ngModel"],["idPrefix","booking",3,"consentChange","commercialChange","consent","commercial"],[1,"step-actions"],["type","button",1,"back-btn",3,"click"],[3,"click","disabled"],["role","dialog","aria-modal","true","aria-labelledby","booking-success-title",1,"booking-success-overlay"],["for","clinic"],["id","clinic","name","clinic",3,"ngModelChange","ngModel"],["type","button",1,"day-pill",3,"is-selected","is-unavailable","disabled"],["type","button",1,"day-pill",3,"click","disabled"],[1,"time-slots"],[1,"time-label"],["role","group","aria-label","Horario de ma\xF1ana",1,"slot-group"],["type","button",1,"time-slot",3,"is-selected","is-unavailable","disabled"],["role","group","aria-label","Horario de tarde",1,"slot-group"],["type","button",1,"time-slot",3,"click","disabled"],[1,"booking-success"],["aria-hidden","true",1,"booking-success__icon"],["id","booking-success-title"],[3,"click"]],template:function(t,i){t&1&&(a(0,"div",0)(1,"h2"),r(2,"Tus datos"),n(),a(3,"p",1),r(4,"Necesitamos algunos datos para confirmar tu cita."),n(),a(5,"form",2),v("ngSubmit",function(){return i.saveAndContinue()}),a(6,"div",3)(7,"label",4),r(8,"Nombre completo"),n(),a(9,"input",5),E("ngModelChange",function(l){return P(i.name,l)||(i.name=l),l}),n()(),a(10,"div",3)(11,"label",6),r(12,"Email"),n(),a(13,"input",7),E("ngModelChange",function(l){return P(i.email,l)||(i.email=l),l}),n()(),a(14,"div",3)(15,"label",8),r(16,"Tel\xE9fono"),n(),a(17,"div",9)(18,"select",10),E("ngModelChange",function(l){return P(i.phonePrefix,l)||(i.phonePrefix=l),l}),k(19,ve,2,3,"option",11,ge),n(),a(21,"input",12),E("ngModelChange",function(l){return P(i.phone,l)||(i.phone=l),l}),n()()(),f(22,be,2,0,"p",13)(23,he,2,1,"p",14)(24,_e,6,1,"div",3),a(25,"div",3)(26,"label",15),r(27,"Tratamiento de inter\xE9s"),n(),a(28,"select",16),E("ngModelChange",function(l){return P(i.treatment,l)||(i.treatment=l),l}),a(29,"option",17),r(30,"Selecciona una opci\xF3n"),n(),k(31,Ce,2,2,"option",11,$),n()(),a(33,"div",3)(34,"label"),r(35,"Fecha preferida"),n(),f(36,ye,2,0,"p",13)(37,ke,2,1,"p",14)(38,Se,3,0,"div",18),n(),f(39,Ee,15,1,"div",3),a(40,"div",3)(41,"label",19),r(42,"Mensaje (opcional)"),n(),a(43,"textarea",20),E("ngModelChange",function(l){return P(i.message,l)||(i.message=l),l}),n()(),a(44,"kensa-privacy-consent",21),v("consentChange",function(l){return i.consent.set(l)})("commercialChange",function(l){return i.commercial.set(l)}),n(),a(45,"div",22)(46,"button",23),v("click",function(){return i.goBack()}),r(47,"\u2190 Volver"),n(),a(48,"kensa-cta-button",24),v("click",function(){return i.saveAndContinue()}),r(49),n()(),f(50,Oe,2,1,"p",14),n(),f(51,we,10,0,"div",25),n()),t&2&&(c(9),D("ngModel",i.name),c(4),D("ngModel",i.email),c(5),D("ngModel",i.phonePrefix),c(),x(i.phonePrefixes
1),c(2),D("ngModel",i.phone),c(),_(i.isLoadingClinics()?22:i.clinicsError()?23:i.showClinicSelector()?24:-1),c(6),D("ngModel",i.treatment),c(3),x(i.treatments),c(5),_(i.isLoadingSlots()?36:i.slotsError()?37:38),c(3),_(i.selectedDate()?39:-1),c(4),D("ngModel",i.message),c(),u("consent",i.consent())("commercial",i.commercial()),c(4),u("disabled",i.isSubmitting()||!i.consent()),c(),M(" ",i.isSubmitting()?"Enviando...":"Continuar"," "),c(),_(i.formError()?50:-1),c(),_(i.showSuccess()?51:-1))},dependencies:[ne,Z,te,ie,G,ee,J,K,oe,X,Q,Y,ae],styles:[".step[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-family:var(--font-heading);font-size:var(--fs-h2);font-weight:var(--fw-regular);color:var(--color-text-primary);text-align:center}.step[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{text-align:center;color:var(--color-text-muted);margin-top:var(--space-sm);margin-bottom:var(--space-md)}.form-group[_ngcontent-%COMP%]{margin-bottom:var(--space-md)}.form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{display:block;font-size:var(--fs-small);color:var(--color-text-muted);margin-bottom:var(--space-xs);text-transform:uppercase;letter-spacing:.05em}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .form-group[_ngcontent-%COMP%] select[_ngcontent-%COMP%], .form-group[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{width:100%;padding:var(--space-sm);border:1px solid var(--color-border);border-radius:var(--border-radius-sm);background-color:var(--color-bg-primary);font-size:var(--fs-body);color:var(--color-text-primary);transition:border-color var(--duration-fast) ease}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus, .form-group[_ngcontent-%COMP%] select[_ngcontent-%COMP%]:focus, .form-group[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--color-text-muted)}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder, .form-group[_ngcontent-%COMP%] select[_ngcontent-%COMP%]::placeholder, .form-group[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]::placeholder{color:var(--color-border-dark)}.form-group[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{resize:vertical}.phone-row[_ngcontent-%COMP%]{display:flex;gap:var(--space-xs)}.phone-row[_ngcontent-%COMP%] .phone-prefix[_ngcontent-%COMP%]{flex:0 0 auto;width:auto;padding:var(--space-sm);border:1px solid var(--color-border);border-radius:var(--border-radius-sm);background-color:var(--color-bg-primary);font-size:var(--fs-body);color:var(--color-text-primary);transition:border-color var(--duration-fast) ease}.phone-row[_ngcontent-%COMP%] .phone-prefix[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--color-text-muted)}.phone-row[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{flex:1 1 auto}.availability-message[_ngcontent-%COMP%]{margin-top:var(--space-xs);color:var(--color-text-muted);font-size:var(--fs-small)}.availability-message.is-error[_ngcontent-%COMP%]{color:#a33a2b}.booking-success-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:var(--space-md);background-color:color-mix(in srgb,var(--kensa-charcoal) 45%,transparent);animation:fadeIn var(--duration-base) var(--ease-out-expo)}.booking-success[_ngcontent-%COMP%]{max-width:28rem;padding:var(--space-xl);text-align:center;background-color:var(--color-bg-primary);border-radius:var(--border-radius-sm);box-shadow:0 10px 40px #0000002e}.booking-success__icon[_ngcontent-%COMP%]{width:3rem;height:3rem;margin:0 auto var(--space-md);display:flex;align-items:center;justify-content:center;border-radius:var(--border-radius-full);background-color:var(--kensa-charcoal);color:var(--kensa-white);font-size:1.5rem}.booking-success[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-family:var(--font-heading);font-size:var(--fs-h2);font-weight:var(--fw-regular);color:var(--color-text-primary);margin-bottom:var(--space-sm)}.booking-success[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--color-text-muted);margin-bottom:var(--space-xl)}.step-actions[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-top:var(--space-xl)}.back-btn[_ngcontent-%COMP%]{font-size:var(--fs-small);color:var(--color-text-muted);cursor:pointer;transition:color var(--duration-fast) ease}.back-btn[_ngcontent-%COMP%]:hover{color:var(--color-text-primary)}.day-picker[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:var(--space-xs);margin-top:var(--space-xs)}.day-pill[_ngcontent-%COMP%]{padding:.375rem .875rem;border:1px solid var(--color-border);border-radius:var(--border-radius-full);background-color:var(--color-bg-primary);font-size:var(--fs-small);color:var(--color-text-secondary);cursor:pointer;white-space:nowrap;transition:border-color var(--duration-fast) var(--ease-out-expo),background-color var(--duration-fast) var(--ease-out-expo),color var(--duration-fast) var(--ease-out-expo)}.day-pill[_ngcontent-%COMP%]:hover{border-color:var(--color-border-dark);background-color:var(--color-bg-secondary)}.day-pill.is-selected[_ngcontent-%COMP%]{border-color:var(--kensa-charcoal);background-color:var(--kensa-charcoal);color:var(--kensa-white)}.day-pill.is-unavailable[_ngcontent-%COMP%], .day-pill[_ngcontent-%COMP%]:disabled{border-color:color-mix(in srgb,var(--color-border) 80%,white);background-color:color-mix(in srgb,var(--color-bg-secondary) 55%,white);color:color-mix(in srgb,var(--color-text-muted) 70%,white);cursor:not-allowed}.time-slots[_ngcontent-%COMP%]{margin-top:var(--space-xs);animation:fadeIn var(--duration-base) var(--ease-out-expo)}.time-label[_ngcontent-%COMP%]{font-size:var(--fs-caption);font-family:var(--font-mono);letter-spacing:var(--ls-section-label);text-transform:uppercase;color:var(--color-text-muted);margin-bottom:var(--space-xs)}.time-label[_ngcontent-%COMP%]:not(:first-child){margin-top:var(--space-sm)}.slot-group[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.time-slot[_ngcontent-%COMP%]{padding:.375rem .75rem;border:1px solid var(--color-border);border-radius:var(--border-radius-sm);background-color:var(--color-bg-primary);font-size:var(--fs-caption);font-family:var(--font-mono);color:var(--color-text-secondary);cursor:pointer;transition:border-color var(--duration-fast) var(--ease-out-expo),background-color var(--duration-fast) var(--ease-out-expo),color var(--duration-fast) var(--ease-out-expo)}.time-slot[_ngcontent-%COMP%]:hover{border-color:var(--color-border-dark);background-color:var(--color-bg-secondary)}.time-slot.is-selected[_ngcontent-%COMP%]{border-color:var(--kensa-charcoal);background-color:var(--kensa-charcoal);color:var(--kensa-white)}.time-slot.is-unavailable[_ngcontent-%COMP%], .time-slot[_ngcontent-%COMP%]:disabled{border-color:color-mix(in srgb,var(--color-border) 80%,white);background-color:color-mix(in srgb,var(--color-bg-secondary) 55%,white);color:color-mix(in srgb,var(--color-text-muted) 70%,white);cursor:not-allowed}"],changeDetection:0})};function Te(o,e){o&1&&V(0,"app-booking-service-step")}function Ne(o,e){o&1&&V(0,"app-booking-details")}var de=class o{booking=h(y);static \u0275fac=function(t){return new(t||o)};static \u0275cmp=B({type:o,selectors:[["app-booking-flow"]],decls:10,vars:2,consts:[[1,"booking"],[1,"container"],[1,"booking-header"],[1,"step-indicator"],[1,"booking-content"]],template:function(t,i){if(t&1&&(a(0,"section",0)(1,"div",1)(2,"div",2)(3,"h1"),r(4,"Pedir Cita"),n(),a(5,"p",3),r(6),n()(),a(7,"div",4),f(8,Te,1,0,"app-booking-service-step")(9,Ne,1,0,"app-booking-details"),n()()()),t&2){let s;c(6),M("Paso ",i.booking.step()," de 2"),c(2),_((s=i.booking.step())===1?8:s===2?9:-1)}},dependencies:[F,L],styles:[".booking[_ngcontent-%COMP%]{padding-block:calc(var(--header-height) + var(--space-lg)) var(--space-xl);min-height:80vh}.container[_ngcontent-%COMP%]{width:100%;max-width:720px;margin-inline:auto;padding-inline:var(--container-padding)}.booking-header[_ngcontent-%COMP%]{text-align:center;margin-bottom:var(--space-md)}.booking-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-family:var(--font-heading);font-size:var(--fs-h1);font-weight:var(--fw-regular);line-height:var(--lh-heading);letter-spacing:var(--ls-heading);color:var(--color-text-primary)}.booking-header[_ngcontent-%COMP%] .step-indicator[_ngcontent-%COMP%]{font-family:var(--font-mono);font-size:var(--fs-caption);letter-spacing:var(--ls-section-label);text-transform:uppercase;color:var(--color-text-muted);margin-top:var(--space-sm)}"],changeDetection:0})};export{de as BookingFlow};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.