PageSourceSearch

https://forestdental.org/assets/services.index-OReYq4VB.js

js forestdental.org collected 2026-10-08 16:33:06 UTC 14,075 bytes, 1 lines download raw bytes

1import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{t as n}from"./react-vt4WmSOl.js";import{n as r,r as i,t as a}from"./createServerFn-Bups_lUA.js";import{_ as o,c as s,d as c,f as l,g as u,h as d,i as f,l as p,m,o as h,p as g,s as _,t as v,u as y,v as b}from"./Footer-B97zMXdo.js";import{r as x}from"./index-B1of4K1i.js";import{a as S,g as C,n as w,r as T,t as E}from"./typography-DkJ_DhvR.js";import{t as D}from"./arrow-up-right-DAbOQygR.js";import{t as O}from"./sparkles-BDSQttLh.js";import{t as k}from"./x-zQCzbbSx.js";var A=h(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),j=h(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),M=e(n()),N=a({method:`POST`}).handler(i(`711d1c2e4a623ebdf3ee779115590dd84ffc97cbf86e75d50763288d59a82f54`)),P=t(),F=`https://flexdentalgroup.portal.dental/practices/Forestdental`,I=[{slug:`composite-bonding-blackwood`,size:`hero`,bg:`#E76F51`,fg:`light`,image:o.url,category:`Cosmetic`,blurb:`Reshape chips, gaps and worn edges in a single visit.`},{slug:`teeth-whitening-blackwood`,size:`wide`,bg:`#FCCA46`,fg:`dark`,image:d.url,category:`Cosmetic`,blurb:`Brighter, naturally — no zingers.`},{slug:`invisalign-blackwood`,size:`hero`,bg:`#8ECAE6`,fg:`dark`,image:u.url,category:`Orthodontics`,blurb:`Clear aligners that fit around your life.`},{slug:`emergency-dentist-blackwood`,size:`sm`,bg:`#FE7F2D`,fg:`light`,category:`Urgent`,blurb:`Same-day pain relief.`},{slug:`crowns-blackwood`,size:`sm`,bg:`#B08968`,fg:`light`,category:`Restorative`,blurb:`Strong, tooth-shaped covers.`},{slug:`dental-check-up-blackwood`,size:`wide`,bg:`#FFF8EC`,fg:`dark`,image:p.url,category:`Preventive`,blurb:`Twenty minutes to keep everything on track.`},{slug:`smile-makeover-blackwood`,size:`hero`,bg:`#A1C181`,fg:`dark`,image:c.url,category:`Signature`,blurb:`A full smile plan, mapped out before we start.`},{slug:`hygienist-blackwood`,size:`tall`,bg:`#C8D5B9`,fg:`dark`,image:g.url,category:`Preventive`,blurb:`Airflow cleans — kinder than a scale-and-polish.`},{slug:`veneers-blackwood`,size:`wide`,bg:`#6D597A`,fg:`light`,image:m.url,category:`Cosmetic`,blurb:`Ultra-thin porcelain, hand-crafted per tooth.`},{slug:`white-fillings-blackwood`,size:`sm`,bg:`#EEF4F1`,fg:`dark`,category:`Restorative`,blurb:`Tooth-coloured, mercury-free.`},{slug:`root-canal-blackwood`,size:`sm`,bg:`#7CB59B`,fg:`light`,category:`Restorative`,blurb:`Save the tooth, stop the pain.`},{slug:`dental-implants-blackwood`,size:`hero`,bg:`#233D4D`,fg:`light`,image:l.url,category:`Restorative`,blurb:`A permanent replacement — root, tooth and all.`},{slug:`dentures-blackwood`,size:`tall`,bg:`#619B8A`,fg:`light`,image:s.url,category:`Restorative`,blurb:`Modern, comfortable, natural-looking.`},{slug:`sedation-dentistry-blackwood`,size:`wide`,bg:`#355D75`,fg:`light`,image:y.url,category:`Nervous patients`,blurb:`Oral or IV — a genuinely gentle option.`},{slug:`bridges-blackwood`,size:`sm`,bg:`#8FC3B0`,fg:`dark`,category:`Restorative`,blurb:`Close a gap without an implant.`},{slug:`tooth-extraction-blackwood`,size:`sm`,bg:`#A98467`,fg:`light`,category:`Surgery`,blurb:`Careful, calm removals.`},{slug:`gum-disease-treatment-blackwood`,size:`sm`,bg:`#F4A261`,fg:`dark`,category:`Preventative`,blurb:`Stop bleeding gums progressing.`},{slug:`wisdom-tooth-extraction-blackwood`,size:`sm`,bg:`#D9E2E6`,fg:`dark`,category:`Oral Surgery`,blurb:`Expert wisdom tooth removal.`},{slug:`all-on-x-blackwood`,size:`wide`,bg:`#2D5268`,fg:`light`,category:`Restorative`,blurb:`Full-arch fixed teeth on implants.`}],L={sm:`col-span-1 row-span-1`,wide:`col-span-2 row-span-1`,tall:`col-span-1 row-span-2`,hero:`col-span-2 row-span-2`};function R(){return(0,P.jsxs)(`div`,{className:`min-h-screen bg-paper text-anchor`,children:[(0,P.jsx)(_,{}),(0,P.jsx)(z,{}),(0,P.jsx)(B,{}),(0,P.jsx)(`section`,{className:`pb-14 md:pb-24`,children:(0,P.jsx)(`div`,{className:`mx-auto max-w-4xl px-5 sm:px-8`})}),(0,P.jsx)(v,{})]})}function z(){let e=b(N),[t,n]=(0,M.useState)(``),[i,a]=(0,M.useState)(`idle`),[o,s]=(0,M.useState)(null);async function c(){let n=t.trim();if(!(!n||i===`loading`)){a(`loading`),s(null);try{s(await e({data:{query:n,page_url:typeof window<`u`?window.location.href:void 0}})),a(`idle`)}catch(e){console.error(e),a(`error`)}}}function l(){n(``),s(null),a(`idle`)}let u=i!==`idle`||o!==null;return(0,P.jsxs)(`section`,{className:`relative overflow-x-clip pt-24 pb-8 md:pt-40 md:pb-14`,children:[(0,P.jsx)(`div`,{"aria-hidden":!0,
1className:`pointer-events-none absolute inset-0 opacity-[0.05]`,style:{backgroundImage:`linear-gradient(to right, currentColor 1px, transparent 1px), linear-gradient(to bottom, currentColor 1px, transparent 1px)`,backgroundSize:`80px 80px`,maskImage:`radial-gradient(ellipse at 20% 10%, black 40%, transparent 75%)`}}),(0,P.jsxs)(`div`,{className:`relative mx-auto max-w-[1400px] px-5 sm:px-8 lg:px-12`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between gap-3 border-b border-anchor/15 pb-4 text-[10px] uppercase tracking-[0.22em] text-anchor/60 sm:pb-5 sm:text-[11px]`,children:[(0,P.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2 sm:gap-3`,children:[(0,P.jsx)(r,{to:`/`,className:`hover:text-anchor`,children:`Home`}),(0,P.jsx)(`span`,{className:`text-anchor/30`,children:`/`}),(0,P.jsx)(`span`,{className:`text-anchor`,children:`Treatments`})]}),(0,P.jsx)(`span`,{className:`shrink-0 font-mono tracking-widest text-anchor/50`,children:`TR–INDEX`})]}),(0,P.jsxs)(`div`,{className:`mt-8 grid ga
1p-8 lg:mt-14 lg:grid-cols-12 lg:gap-10`,children:[(0,P.jsxs)(`div`,{className:`lg:col-span-8`,children:[(0,P.jsx)(T,{className:`uppercase tracking-[0.18em] text-anchor/55`,children:`Every treatment we offer`}),(0,P.jsxs)(S,{className:`mt-3 font-display text-[34px] leading-[1.02] tracking-[-0.02em] text-anchor sm:mt-4 sm:text-[72px] md:text-[92px] lg:text-[108px]`,children:[`Find the right`,(0,P.jsx)(`br`,{}),(0,P.jsx)(`span`,{className:`italic font-light text-anchor/70`,children:`care for your smile.`})]})]}),(0,P.jsx)(`div`,{className:`lg:col-span-4 lg:pt-6`,children:(0,P.jsx)(`div`,{className:`max-w-sm border-l border-anchor/20 pl-4 sm:pl-5`,children:(0,P.jsx)(E,{className:`text-[15px] leading-[24px] text-anchor/80`,children:`Nineteen treatments, one calm team. Not sure where to start? Describe what's on your mind and our smart search will point you to the right page.`})})})]}),(0,P.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),c()},className:`relative mt-10 sm:mt-14`,children:[(0,P.jsxs)(`div`,{className:`relative flex items-center overflow-hidden rounded-full border border-anchor/20 bg-white shadow-[0_20px_60px_-20px_rgba(0,0,0,0.15)]`,children:[(0,P.jsx)(O,{className:`ml-5 h-4 w-4 text-anchor/50`}),(0,P.jsx)(`input`,{value:t,onChange:e=>n(e.target.value),placeholder:`Ask anything — 'I chipped my tooth'…`,className:`flex-1 bg-transparent px-4 py-4 text-[15px] text-anchor placeholder:text-anchor/40 focus:outline-none sm:py-5 sm:text-[16px]`,"aria-label":`Ask the Forest Dental smart search`}),(t||o)&&(0,P.jsx)(`button`,{type:`button`,onClick:l,className:`mr-2 flex h-9 w-9 items-center justify-center rounded-full text-anchor/50 hover:bg-anchor/5 hover:text-anchor`,"aria-label":`Clear search`,children:(0,P.jsx)(k,{className:`h-4 w-4`})}),(0,P.jsxs)(`button`,{type:`submit`,disabled:!t.trim()||i===`loading`,className:`mr-3 flex items-center gap-1.5 rounded-full px-4 py-2 text-[11px] font-medium uppercase tracking-[0.16em] text-paper transition disabled:cursor-not-allowed disabled:opacity-50 sm:mr-4 sm:px-5 sm:py-2.5 ${t.trim()&&i!==`loading`?`bg-[#EA6A2A] hover:bg-[#d55e23] shadow-[0_6px_18px_-6px_rgba(234,106,42,0.6)] animate-pulse`:`bg-anchor hover:bg-anchor/90`}`,children:[i===`loading`?(0,P.jsx)(A,{className:`h-3.5 w-3.5 animate-spin`}):(0,P.jsx)(j,{className:`h-3.5 w-3.5`}),(0,P.jsx)(`span`,{className:`hidden sm:inline`,children:`Smart search`})]})]}),u&&(0,P.jsxs)(`div`,{className:`absolute left-0 right-0 z-20 mt-3 overflow-hidden rounded-3xl border border-anchor/15 bg-white shadow-[0_30px_80px_-20px_rgba(0,0,0,0.25)]`,children:[i===`loading`&&(0,P.jsxs)(`div`,{className:`flex items-center gap-3 px-5 py-6 text-[14px] text-anchor/70`,children:[(0,P.jsx)(A,{className:`h-4 w-4 animate-spin text-anchor/50`}),`Thinking through your question…`]}),i===`error`&&(0,P.jsxs)(`div`,{className:`px-5 py-6 text-[14px] text-anchor/80`,children:[`Sorry — the assistant is unavailable right now. Please call`,` `,(0,P.jsx)(`a`,{href:`tel:01443807845`,className:`font-medium underline`,children:`01443 807 845`}),` `,`and the team will help.`]}),o&&i===`idle`&&(0,P.jsxs)(`div`,{className:`divide-y divide-anchor/10`,children:[(0,P.jsxs)(`div`,{className:C(`px-5 py-5 sm:px-6`,o.urgent&&`bg-[#FE7F2D]/[0.08]`),children:[o.urgent&&(0,P.jsxs)(`div`,{className:`mb-2 inline-flex items-center gap-1.5 rounded-full bg-[#FE7F2D] px-2.5 py-0.5 text-[10px] font-medium uppercase tracking-[0.16em] text-white`,children:[(0,P.jsx)(f,{className:`h-3 w-3`}),` Urgent — call us`]}),(0,P.jsx)(`p`,{className:`break-words text-[15px] leading-[22px] text-anchor [overflow-wrap:anywhere]`,children:o.reply}),o.urgent&&(0,P.jsxs)(`a`,{href:`tel:01443807845`,className:`mt-3 inline-flex items-center gap-2 rounded-full bg-anchor px-4 py-2 text-[13px] font-medium text-paper`,children:[(0,P.jsx)(f,{className:`h-3.5 w-3.5`}),` Call 01443 807 845`]})]}),o.suggestions.length>0&&(0,P.jsx)(`ul`,{className:`divide-y divide-anchor/10`,children:o.suggestions.map(e=>{let t=x[e.slug];return(0,P.jsx)(`li`,{children:(0,P.jsxs)(r,{to:`/services/$slug`,params:{slug:e.slug},className:`group flex items-start gap-4 px-5 py-4 transition hover:bg-anchor/[0.04] sm:px-6`,children:[(0,P.jsxs)(`div`,{className:`min-w-0 flex-1 [overflow-wrap:anywhere]`,children:[(0,P.jsx)(`div`,{className:`text-[11px] uppercase tracking-[0.18em] text-anchor/50`,children:e.category}),(0,P.jsx)(`div`,{className:`mt-0.5 break-words font-display text-[20px] leading-tight text-anchor`,children:e.name}),(0,P.jsx)(`div`,{className:`mt-1 break-words text-[13px] text-anchor/70`,children:e.reason||t?.tagline}),(0,P.jsx)(`div`,{className:`mt-1.5 text-[12px] font-medium text-anchor/85`,children:e.price})]}),(0,P.jsx)(D,{className:`mt-1 h-4 w-4 shrink-0 text-anchor/50 transition group-hover:-translate-y-0.5 group-hover:translate-x-0.5 group-hover:text-anchor`})]})},e.slug)})}),(0,P.jsxs)(`div`,{className:`flex items-center justify-between gap-3 px-5 py-3 text-[11px] text-anchor/50 sm:px-6`,children:[(0,P.jsx)(`span`,{children:`AI-assisted · verify anything clinical with our team.`}),(0,P.jsx)(`button`,{type:`button`,onClick:l,className:`underline hover:text-anchor`,children:`Ask another`})]})]})]})]})]})]})}function B(){return(0,P.jsx)(`section`,{className:`py-8 md:py-14`,children:(0,P.jsxs)(`div`,{className:`mx-auto max-w-[1400px] px-5 sm:px-8 lg:px-12`,children:[(0,P.jsx)(`div`,{className:C(`grid gap-2.5 sm:gap-4`,`grid-cols-2 auto-rows-[168px]`,`md:grid-cols-4 md:auto-rows-[180px]`,`lg:grid-cols-6 lg:auto-rows-[200px]`,`[grid-auto-flow:dense]`),children:I.map(e=>(0,P.jsx)(V,{tile:e},e.slug))}),(0,P.jsxs)(`div`,{className:`mt-10 flex flex-wrap items-center justify-between gap-4 border-t border-anchor/10 pt-6 text-[13px] text-anchor/60`,children:[(0,P.jsx)(`span`,{children:`Can't see what you're looking for? Ask us directly.`}),(0,P.jsxs)(`div`,{className:`flex flex-wrap gap-3`,children:[(0,P.jsxs)(`a`,{href:F,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-2 rounded-full bg-anchor px-5 py-2.5 text-paper transition hover:bg-anchor/90`,children:[(0,P.jsx)(w,{children:`Book consultation`}),(0,P.jsx)(D,{className:`h-4 w-4`})]}),(0,P.jsx)(`a`,{href:`tel:01443807845`,className:`inline-flex items-center gap-2 rounded-full border border-anchor/25 bg-white/70 px-5 py-2.5 font-medium text-anchor`,children:`Call 01443 807 845`})]})]})]})})}function V({tile:e}){let t=x[e.slug];if(!t)return null;let n=e.size===`hero`,i=e.fg===`light`;return(0,P.jsxs)(r,{to:`/services/$slug`,params:{slug:e.slug},className:C(`group relative flex flex-col justify-between overflow-hidden rounded-2xl md:rounded-3xl`,`transition-transform duration-300 hover:-translate-y-0.5`,`shadow-[0_1px_2px_rgba(0,0,0,0.04)] hover:shadow-[0_20px_50px_-20px_rgba(0,0,0,0.25)]`,L[e.size]),style:{backgroundColor:e.bg},children:[e.image&&(0,P.jsx)(`img`,{src:e.image,alt:``,"aria-hidden":`true`,className:C(`pointer-events-none absolute select-none`,e.size===`hero`&&`bottom-0 right-0 h-[92%] w-auto max-w-[75%] object-contain object-bottom`,e.size===`wide`&&`bottom-0 right-0 h-[110%] w-auto max-w-[55%] object-contain object-bottom`,e.size===`tall`&&`bottom-0 left-1/2 h-[60%] w-auto max-w-[110%] -translate-x-1/2 object-contain object-bottom`),loading:`lazy`}
1),e.image&&(0,P.jsx)(`div`,{"aria-hidden":!0,className:C(`absolute inset-0`,i?`bg-gradient-to-b from-black/0 via-black/0 to-black/30`:`bg-gradient-to-b from-white/0 via-white/0 to-white/50`)}),(0,P.jsxs)(`div`,{className:`relative z-10 flex items-start justify-between p-2.5 md:p-4`,children:[(0,P.jsx)(`span`,{className:C(`rounded-full px-2 py-0.5 text-[9px] font-medium uppercase tracking-[0.16em] backdrop-blur-sm md:text-[10px] md:tracking-[0.18em]`,i?`bg-white/20 text-white`:`bg-black/10 text-black/70`),children:e.category}),(0,P.jsx)(D,{className:C(`h-4 w-4 shrink-0 transition group-hover:-translate-y-0.5 group-hover:translate-x-0.5`,i?`text-white/90`:`text-black/60`)})]}),(0,P.jsxs)(`div`,{className:`relative z-10 p-2.5 pt-0 md:p-4 md:pt-0`,children:[(0,P.jsx)(`div`,{className:C(`font-display leading-[1.02] tracking-[-0.015em]`,n?`text-[24px] md:text-[34px] lg:text-[40px]`:e.size===`sm`?`text-[17px] md:text-[20px]`:`text-[20px] md:text-[26px] lg:text-[28px]`,i?`text-white`:`text-anchor`),children:t.name}),(n||e.size===`wide`||e.size===`tall`)&&(0,P.jsx)(`div`,{className:C(`mt-1 max-w-[85%] text-[11.5px] leading-snug md:mt-1.5 md:text-[13px]`,i?`text-white/85`:`text-anchor/75`),children:e.blurb})]})]})}export{R as component};

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.