From 2c90c0c6808ee8accd460195d6303deed0be89be Mon Sep 17 00:00:00 2001 From: v0 Date: Wed, 22 Oct 2025 05:53:12 +0000 Subject: [PATCH] feat: add email card with clickable email and hover effects Introduce clean email card with icon, heading, and responsive design. #VERCEL_SKIP Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com> --- .npmrc | 2 + about.html | 217 ++++++++ contact.html | 212 ++++++++ index.html | 261 ++++++++++ movement.html | 216 ++++++++ package.json | 51 +- pnpm-lock.yaml | 1155 +------------------------------------------ script.js | 89 ++++ styles.css | 1119 +++++++++++++++++++++++++++++++++++++++++ what-to-expect.html | 239 +++++++++ 10 files changed, 2379 insertions(+), 1182 deletions(-) create mode 100644 .npmrc create mode 100644 about.html create mode 100644 contact.html create mode 100644 index.html create mode 100644 movement.html create mode 100644 script.js create mode 100644 styles.css create mode 100644 what-to-expect.html diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..a269478 --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +legacy-peer-deps=true +auto-install-peers=true diff --git a/about.html b/about.html new file mode 100644 index 0000000..4d8c783 --- /dev/null +++ b/about.html @@ -0,0 +1,217 @@ + + + + + + About Dahlia B. Steinberg, RMT - Ebb'nFlow Therapeutics + + + + + + + + + + + +
+
+ About Dahlia +

Dahlia B. Steinberg, RMT

+

Founder and Owner of Ebb'nFlow Therapeutics

+

A lifelong interest in movement and the healing arts is the foundation of her practice as a massage therapist, laser therapist, and movement educator.

+
+
+ + +
+
+
+
+

Professional Background

+

Dahlia's personal and professional experience with a wide range of bodywork practices including yoga, pilates, somatic movement and modern dance spans 30 years and informs her unique style and approach to her clinical practice of massage therapy.

+

She is registered with the College of Massage Therapists of Ontario (CMTO), which is the provincial regulatory body that protects the public interest by monitoring the ongoing professional development and ethical standards of RMTs.

+ +
+

Practice Evolution

+
+

2013: Started Ebb'nflow Massage, working with Dr. Enrico Schirru at Absolute Chiropractic

+

2013-2017: Worked at Paisley Spa and John Chan Physiotherapy Clinic

+

2015: Established first home-based clinic on Ontario Street

+

2017: Moved to home location on Woodbine Ave., working solely for herself

+

2025: Relocated to downtown St. Catharines, rebranded to Ebb'nFlow Therapeutics

+
+
+
+
+ Dahlia B. Steinberg, RMT - Founder of Ebb'nFlow Therapeutics +
+
+
+
+ + +
+
+

Education & Training

+ +
+
+

Formal Education

+
+

2021: Meditech International Inc. Bioflex Laser Therapy Certification

+

2012: Graduate, Massage Therapy Program, Ontario College of Health and Technology

+

2009: Pilates Teacher Training, STOTT Toronto (Beginner to Advanced Matwork)

+

2003-05: Yoga Teacher Training, Yogaspace Toronto (200 hr diploma + Advanced Teacher Training)

+

1998: School of Toronto Dance Theatre's Professional Training Program

+
+
+ +
+

Continuing Education

+
    +
  • Myofascial therapy/structural integration
  • +
  • Biodynamic craniosacral therapy
  • +
  • Osteopathic techniques for RMTs
  • +
  • Advanced sacro-lumbar and thoracic spine assessments and joint mobilization
  • +
  • Axis Syllabus - evolving theory and practice of dynamic human movement
  • +
+
+ +
+

Recognition & Support

+

Massage Therapy is Dahlia's second career, supported by:

+
    +
  • Training and subsistence grant from the Dancer's Transition and Resource Centre (2010)
  • +
  • Special second year award for academic excellence (Dancer's Transition and Resource Centre, 2011)
  • +
+
+
+
+
+ + +
+
+
+

Teaching & Mentorship

+

Dahlia now also works once a week as a supervisor and teacher in the student massage therapy clinic, which is open to the public at the Ontario College of Health and Technology in Stoney Creek. This role helps to keep her engaged and informed in her current practice while inspiring her to encourage and mentor the next generation of massage therapists.

+
+
+
+ + +
+
+

Meet Olivia

+ +
+
+ Olivia, the friendly clinic cat at Ebb'nFlow Therapeutics +
+
+
+

No visit to Ebb'nFlow Therapeutics would be complete without meeting Olivia, our gentle and affectionate clinic companion. This sweet tabby girl has a calming presence that perfectly complements the therapeutic atmosphere of our space.

+

Olivia enjoys greeting clients with soft purrs and will often curl up nearby during sessions, adding an extra layer of comfort and relaxation to your experience. Her friendly demeanor and peaceful energy make her a beloved part of the Ebb'nFlow family.

+

Please let us know if you have any allergies or prefer a cat-free sessionโ€”we're happy to accommodate all our clients' needs!

+
+
+
+
+
+ + +
+
+

Experience Dahlia's Unique Approach

+

Combining 30 years of movement expertise with clinical massage therapy excellence.

+ +
+ Registered Massage Therapist - Professional Hands You Can Trust +
+
+
+ + + + + + + diff --git a/contact.html b/contact.html new file mode 100644 index 0000000..c91d4db --- /dev/null +++ b/contact.html @@ -0,0 +1,212 @@ + + + + + + Contact Us - Ebb'nFlow Therapeutics + + + + + + + + + + + +
+
+ Get in Touch +

Contact Us

+

"A place to unwind, a place to heal, a place to grow"

+

Ready to experience boutique wellness? Let's chat about creating your personalized sanctuary for healing and self-care.

+
+
+ + +
+
+
+
+ Ebb'nFlow Therapeutics clinic exterior +
Our Welcoming Exterior
+
+
+ Distinctive yellow entrance door +
Find Our Yellow Door
+
+
+
+
+ + +
+
+
+ + + + +
+
+

Visit Our Clinic

+
+ ๐Ÿ“ +
+

Address

+

59 Wellington Street
St. Catharines, ON L2R 5P9

+
+
+
+ ๐Ÿ“ž +
+

Phone

+

(289) 969-3219

+
+
+
+ โœ‰๏ธ + +
+
+ +
+

Office Hours

+
+
+ Monday - Thursday + 9:00 AM - 7:00 PM +
+
+ Friday + 9:00 AM - 5:00 PM +
+
+ Saturday + 10:00 AM - 4:00 PM +
+
+ Sunday + Closed +
+
+
+ +
+
+ โฐ +
+

Emergency Contact

+

For urgent matters outside of business hours, please call our emergency line at (289) 969-3220 or visit your nearest emergency room.

+
+
+
+
+
+
+
+ + +
+
+

Ready for Your Personal Wellness Experience?

+

Book your private session in our cozy, boutique space. Experience what it means to have dedicated time and space just for your wellness journey.

+ +
+
+ + + + + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..7efa909 --- /dev/null +++ b/index.html @@ -0,0 +1,261 @@ + + + + + + Ebb'nFlow Therapeutics - Massage, Laser & Movement Therapy + + + + + + + + + + + +
+
+
+
+

Ebb'nFlow Therapeutics

+

Excellence in Massage Therapy Since 2013

+

A serene, home-based practice in the heart of downtown St Catharines

+

Owned and operated by Dahlia B. Steinberg RMT.

+ + +
+
+ Welcoming reception area at Ebb'nFlow Therapeutics +
+
+
+
+ + +
+
+
+

Ebb'nFlow Therapeutics provides Massage Therapy that is attentive to your unique needs and goals. Whether you are looking for recovery from the stress and strains of work, to manage pain, prevent injury or improve your physical performance, we're here to meet you where you are.

+

Unlike any other massage therapy practice, Ebb'nFlow Therapeutics also offers a distinctly unique service that combines the cutting edge technology of Laser Therapy (Photobiomodulation) in combination with massage therapy for accelerated healing of acute pain conditions and injury.

+
+
+
+ + +
+
+

Services

+

Please click on the links below to learn more about the unique services offered, based on a comprehensive, clinical practice of Massage Therapy.

+ +
+ +
+ Professional massage therapy treatment room +
+

Massage Therapy Treatment

+

General Swedish Massage combined with specialized techniques tailored to your specific needs.

+ + Book Appointment +
+
+ + +
+ BioFlex Laser Therapy +
+

Laser Therapy Treatment

+

Stand alone or combined with Massage Therapy (recommended). Laser therapy provides accelerated healing for musculoskeletal injury, wounds, arthritis, and nerve injury.

+ + Book Appointment +
+
+ + +
+ Movement education class +
+

Movement Education

+

Remedial exercise instruction involves teaching targeted strength, stretch or mobility exercises that further the benefits of massage therapy long term.

+ See Movement Workshops + Book Appointment +
+
+
+
+
+ + +
+
+

Prices

+ +
+
+

Massage and/or Laser Therapy

+
+
+ 30 Minute + $53.50 (+$6.95 HST) +
+
+ 45 Minute + $80.25 (+$10.43 HST) +
+
+ 60 Minute + $107.00 (+$13.91 HST) +
+
+ 75 Minute + $133.75 (+$17.38 HST) +
+
+ 90 Minute + $160.50 (+$20.86 HST) +
+
+
+ +
+

Add-on Laser Therapy

+

If combined simultaneously with Massage Therapy for more than 15 minutes

+
+ $1.00/minute + (+ HST) +
+

Available in 15, 30, 45 and 60 minute intervals

+
+
+ +
+

Payment & Insurance

+

Direct billing is now available

+
+

Accepted: Cash, Direct Billing, E-transfer, Debit, Credit Card (Visa, AmEx, Mastercard)

+

RMTs are regulated health care professionals recognized by insurance companies across Ontario.

+

It is recommended that clients check with their insurance provider about whether they are required to have a doctor's note in order to submit a claim.

+

Your receipt will include the practitioner's registration number necessary for an insurance claim submission. This number verifies that your therapist is registered with the College of Massage Therapists of Ontario (CMTO).

+
+
+
+
+ + +
+
+

Ready to Begin Your Wellness Journey?

+
+
+ ๐Ÿ“ž + (289) 969-3219 +
+
+ ๐Ÿ“ + Downtown St. Catharines +
+
+ +
+ Registered Massage Therapist - Professional Hands You Can Trust +
+
+
+ + + + + + + + + + diff --git a/movement.html b/movement.html new file mode 100644 index 0000000..984cb13 --- /dev/null +++ b/movement.html @@ -0,0 +1,216 @@ + + + + + + Movement & Mobility Workshops - Ebb'nFlow Therapeutics + + + + + + + + + + + +
+
+ Movement Education +

Movement & Mobility

+

Free form/improvisational movement and mobility training as a form of personal and artistic expression and wellness is what ultimately drives Dahlia to continue to learn about our amazing bodies and how we can all move more gracefully as we age.

+
+
+ + +
+
+

Movement Education Options

+ +
+

Remedial exercise aka "Rem-Ex" instruction involves teaching a few targeted strength, stretch or mobility exercises that are aimed at furthering the benefits of massage therapy long term, which is an intrinsic component of a comprehensive treatment.

+

Although this often comes highly recommended, not everyone is interested in learning a new exercise immediately after having a massage. This makes a lot of sense, and yet Dahlia will still do her best to encourage you, within reason.

+

That said, clients have a few options:

+
+ +
+
+
1
+

Personal Choice

+

Clients may request or deny remedial exercise instruction as part of treatment, based on their personal goals.

+
+ +
+
2
+

Extended Sessions

+

Clients can request to allot up to 50% of their treatment time (15 to 45 minutes) for Rem-Ex instruction before or after their massage.

+
+ +
+
3
+

Group Workshops

+

Clients can also sign up for upcoming movement workshops for a more comprehensive group learning experience.

+
+
+
+
+ + +
+
+

The Ebb'nFlow Origin Story

+ +
+

The original concept of Ebb'nFlow Massage (now Ebb'nFlow Therapeutics) was born out of Dahlia's initial work as a yoga instructor, before she became a massage therapist. Dahlia taught private, one-on-one sessions as well as classes around the GTA from 2004-2009.

+ +

She recognized the need to meet students where they were instead of insisting that they push through their pain and fatigue similarly to the approach of a personal trainer. Some days they would arrive in a lot of pain and would need a gentler approach such as more periods of rest or "ebb" between exercises or hands on work such as massage at the end of their sessions.

+ +

Dahlia's natural talent for massage as a component of her sessions enabled students to show up more consistently for practice instead of skipping practice out of concern that they would not be able to make it through a session.

+ +

Since consistency is key to success, a more fluid and compassionate approach to teaching one-on-one was born and clients were given permission to move as they needed through periods of "ebb" or "flow" with grace and freedom from the need to over achieve.

+
+
+
+ + +
+
+

Movement & Mobility Workshops

+ +
+
+
+
+ ๐Ÿ’š +

Fun, Liberating & Educational

+
+

Dahlia's movement and mobility workshops are aimed towards adults and seniors and offer opportunities to gain greater strength, flexibility, mobility and balance as well as to embrace the discovery of one's own unique expression through movement and dance.

+
+ +
+

Workshop Benefits

+
    +
  • Greater strength and flexibility
  • +
  • Improved mobility and balance
  • +
  • Unique personal expression through movement
  • +
  • Discovery of dance and creative movement
  • +
+
+
+ +
+ Dahlia Steinberg - Movement and wellness educator +
Dahlia - Your Movement Guide
+
+
+
+
+ + +
+
+
+

Continuing the Dance

+

Free form/improvisational movement and mobility training as a form of personal and artistic expression and wellness is what ultimately drives Dahlia to continue to learn about our amazing bodies and how we can all move more gracefully as we age.

+

She continues to dance for her own enjoyment and can be found performing or choreographing for community arts-based projects when opportunities arise.

+

Dahlia is working towards offering more movement and mobility classes and workshops in the future so please stay tuned for updates by checking the Movement section of this website.

+
+
+
+ + +
+
+

Ready to Move with More Freedom?

+

If long lasting improvement is your goal than you may want to consider how Dahlia's skills as a teacher could benefit you through either one-on-one instruction sessions that can be combined with massage therapy or group workshops.

+ +
+
+ + + + + + + + diff --git a/package.json b/package.json index ddbef0b..b814a34 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "my-v0-project", + "name": "ebb-n-flow-therapeutics", "version": "0.1.0", "private": true, "scripts": { @@ -9,57 +9,27 @@ "start": "next start" }, "dependencies": { - "@hookform/resolvers": "^3.10.0", - "@radix-ui/react-accordion": "1.2.2", - "@radix-ui/react-alert-dialog": "1.1.4", - "@radix-ui/react-aspect-ratio": "1.1.1", - "@radix-ui/react-avatar": "1.1.2", - "@radix-ui/react-checkbox": "1.1.3", - "@radix-ui/react-collapsible": "1.1.2", - "@radix-ui/react-context-menu": "2.2.4", + "@radix-ui/react-accordion": "^1.2.2", + "@radix-ui/react-alert-dialog": "^1.1.4", + "@radix-ui/react-avatar": "^1.1.2", + "@radix-ui/react-checkbox": "^1.1.3", "@radix-ui/react-dialog": "latest", - "@radix-ui/react-dropdown-menu": "2.1.4", - "@radix-ui/react-hover-card": "1.1.4", + "@radix-ui/react-dropdown-menu": "^2.1.4", "@radix-ui/react-label": "latest", - "@radix-ui/react-menubar": "1.1.4", - "@radix-ui/react-navigation-menu": "1.2.3", - "@radix-ui/react-popover": "1.1.4", - "@radix-ui/react-progress": "1.1.1", - "@radix-ui/react-radio-group": "1.2.2", - "@radix-ui/react-scroll-area": "1.2.2", - "@radix-ui/react-select": "2.1.4", - "@radix-ui/react-separator": "1.1.1", - "@radix-ui/react-slider": "1.2.2", + "@radix-ui/react-scroll-area": "^1.2.2", + "@radix-ui/react-separator": "^1.1.1", "@radix-ui/react-slot": "latest", - "@radix-ui/react-switch": "1.1.2", - "@radix-ui/react-tabs": "1.1.2", - "@radix-ui/react-toast": "1.2.4", - "@radix-ui/react-toggle": "1.1.1", - "@radix-ui/react-toggle-group": "1.1.1", - "@radix-ui/react-tooltip": "1.1.6", - "@vercel/analytics": "1.3.1", - "autoprefixer": "^10.4.20", + "@radix-ui/react-tabs": "^1.1.2", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "cmdk": "1.0.4", - "date-fns": "4.1.0", - "embla-carousel-react": "8.5.1", - "geist": "^1.3.1", - "input-otp": "1.4.1", "lucide-react": "^0.454.0", "next": "15.2.4", "next-themes": "latest", "react": "^19", - "react-day-picker": "9.8.0", "react-dom": "^19", - "react-hook-form": "^7.60.0", - "react-resizable-panels": "^2.1.7", - "recharts": "2.15.4", - "sonner": "^1.7.4", "tailwind-merge": "^2.5.5", "tailwindcss-animate": "^1.0.7", - "vaul": "^0.9.9", - "zod": "3.25.76" + "tw-animate-css": "latest" }, "devDependencies": { "@tailwindcss/postcss": "^4.1.9", @@ -68,7 +38,6 @@ "@types/react-dom": "^19", "postcss": "^8.5", "tailwindcss": "^4.1.9", - "tw-animate-css": "1.3.3", "typescript": "^5" } } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ba4ee54..1c44933 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,117 +8,45 @@ importers: .: dependencies: - '@hookform/resolvers': - specifier: ^3.10.0 - version: 3.10.0(react-hook-form@7.60.0(react@19.0.0)) '@radix-ui/react-accordion': - specifier: 1.2.2 + specifier: ^1.2.2 version: 1.2.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-alert-dialog': - specifier: 1.1.4 + specifier: ^1.1.4 version: 1.1.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-aspect-ratio': - specifier: 1.1.1 - version: 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-avatar': - specifier: 1.1.2 + specifier: ^1.1.2 version: 1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-checkbox': - specifier: 1.1.3 + specifier: ^1.1.3 version: 1.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-collapsible': - specifier: 1.1.2 - version: 1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-context-menu': - specifier: 2.2.4 - version: 2.2.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-dialog': specifier: latest version: 1.1.15(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-dropdown-menu': - specifier: 2.1.4 + specifier: ^2.1.4 version: 2.1.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-hover-card': - specifier: 1.1.4 - version: 1.1.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-label': specifier: latest version: 2.1.7(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-menubar': - specifier: 1.1.4 - version: 1.1.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-navigation-menu': - specifier: 1.2.3 - version: 1.2.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-popover': - specifier: 1.1.4 - version: 1.1.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-progress': - specifier: 1.1.1 - version: 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-radio-group': - specifier: 1.2.2 - version: 1.2.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-scroll-area': - specifier: 1.2.2 + specifier: ^1.2.2 version: 1.2.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-select': - specifier: 2.1.4 - version: 2.1.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-separator': - specifier: 1.1.1 + specifier: ^1.1.1 version: 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-slider': - specifier: 1.2.2 - version: 1.2.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-slot': specifier: latest version: 1.2.3(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-switch': - specifier: 1.1.2 - version: 1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-tabs': - specifier: 1.1.2 + specifier: ^1.1.2 version: 1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-toast': - specifier: 1.2.4 - version: 1.2.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-toggle': - specifier: 1.1.1 - version: 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-toggle-group': - specifier: 1.1.1 - version: 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-tooltip': - specifier: 1.1.6 - version: 1.1.6(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@vercel/analytics': - specifier: 1.3.1 - version: 1.3.1(next@15.2.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) - autoprefixer: - specifier: ^10.4.20 - version: 10.4.20(postcss@8.5.0) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 clsx: specifier: ^2.1.1 version: 2.1.1 - cmdk: - specifier: 1.0.4 - version: 1.0.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - date-fns: - specifier: 4.1.0 - version: 4.1.0 - embla-carousel-react: - specifier: 8.5.1 - version: 8.5.1(react@19.0.0) - geist: - specifier: ^1.3.1 - version: 1.3.1(next@15.2.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0)) - input-otp: - specifier: 1.4.1 - version: 1.4.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) lucide-react: specifier: ^0.454.0 version: 0.454.0(react@19.0.0) @@ -131,36 +59,18 @@ importers: react: specifier: ^19 version: 19.0.0 - react-day-picker: - specifier: 9.8.0 - version: 9.8.0(react@19.0.0) react-dom: specifier: ^19 version: 19.0.0(react@19.0.0) - react-hook-form: - specifier: ^7.60.0 - version: 7.60.0(react@19.0.0) - react-resizable-panels: - specifier: ^2.1.7 - version: 2.1.7(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - recharts: - specifier: 2.15.4 - version: 2.15.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - sonner: - specifier: ^1.7.4 - version: 1.7.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) tailwind-merge: specifier: ^2.5.5 version: 2.5.5 tailwindcss-animate: specifier: ^1.0.7 version: 1.0.7(tailwindcss@4.1.9) - vaul: - specifier: ^0.9.9 - version: 0.9.9(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - zod: - specifier: 3.25.76 - version: 3.25.76 + tw-animate-css: + specifier: latest + version: 1.4.0 devDependencies: '@tailwindcss/postcss': specifier: ^4.1.9 @@ -180,9 +90,6 @@ importers: tailwindcss: specifier: ^4.1.9 version: 4.1.9 - tw-animate-css: - specifier: 1.3.3 - version: 1.3.3 typescript: specifier: ^5 version: 5.0.2 @@ -197,13 +104,6 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@babel/runtime@7.28.4': - resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} - engines: {node: '>=6.9.0'} - - '@date-fns/tz@1.2.0': - resolution: {integrity: sha512-LBrd7MiJZ9McsOgxqWX7AaxrDjcFVjWH/tIKJd7pnR7McaslGYOP1QmmiBXdJH/H/yLCT+rcQ7FaPBUxRGUtrg==} - '@emnapi/runtime@1.5.0': resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} @@ -222,11 +122,6 @@ packages: '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - '@hookform/resolvers@3.10.0': - resolution: {integrity: sha512-79Dv+3mDF7i+2ajj7SkypSKHhl1cbln1OGavqrsF7p6mbUv11xpqpacPsGDCTRvCSjEEIez2ef1NveSVL3b0Ag==} - peerDependencies: - react-hook-form: ^7.0.0 - '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -448,19 +343,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-aspect-ratio@1.1.1': - resolution: {integrity: sha512-kNU4FIpcFMBLkOUcgeIteH06/8JLBcYY6Le1iKenDGCYNYFX3TQqCZjzkOsz37h7r94/99GTb7YhEr98ZBJibw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-avatar@1.1.2': resolution: {integrity: sha512-GaC7bXQZ5VgZvVvsJ5mu/AEbjYLnhhkoidOboC50Z6FFlLA03wG2ianUoH+zgDQ31/9gCF59bE4+2bBgTyMiig==} peerDependencies: @@ -531,19 +413,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-context-menu@2.2.4': - resolution: {integrity: sha512-ap4wdGwK52rJxGkwukU1NrnEodsUFQIooANKu+ey7d6raQ2biTcEf8za1zr0mgFHieevRTB2nK4dJeN8pTAZGQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-context@1.1.1': resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==} peerDependencies: @@ -680,19 +549,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-hover-card@1.1.4': - resolution: {integrity: sha512-QSUUnRA3PQ2UhvoCv3eYvMnCAgGQW+sTu86QPuNb+ZMi+ZENd6UWpiXbcWDQ4AEaKF9KKpCHBeaJz9Rw6lRlaQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-id@1.1.0': resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} peerDependencies: @@ -737,45 +593,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-menubar@1.1.4': - resolution: {integrity: sha512-+KMpi7VAZuB46+1LD7a30zb5IxyzLgC8m8j42gk3N4TUCcViNQdX8FhoH1HDvYiA8quuqcek4R4bYpPn/SY1GA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-navigation-menu@1.2.3': - resolution: {integrity: sha512-IQWAsQ7dsLIYDrn0WqPU+cdM7MONTv9nqrLVYoie3BPiabSfUVDe6Fr+oEt0Cofsr9ONDcDe9xhmJbL1Uq1yKg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-popover@1.1.4': - resolution: {integrity: sha512-aUACAkXx8LaFymDma+HQVji7WhvEhpFJ7+qPz17Nf4lLZqtreGOFRiNQWQmhzp7kEWg9cOyyQJpdIMUMPc/CPw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-popper@1.2.1': resolution: {integrity: sha512-3kn5Me69L+jv82EKRuQCXdYyf1DqHwD2U/sxoNgBGCB7K9TRc3bQamQ+5EPM9EvyPdli0W41sROd+ZU1dTCztw==} peerDependencies: @@ -867,32 +684,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-progress@1.1.1': - resolution: {integrity: sha512-6diOawA84f/eMxFHcWut0aE1C2kyE9dOyCTQOMRR2C/qPiXz/X0SaiA/RLbapQaXUCmy0/hLMf9meSccD1N0pA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-radio-group@1.2.2': - resolution: {integrity: sha512-E0MLLGfOP0l8P/NxgVzfXJ8w3Ch8cdO6UDzJfDChu4EJDy+/WdO5LqpdY8PYnCErkmZH3gZhDL1K7kQ41fAHuQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-roving-focus@1.1.1': resolution: {integrity: sha512-QE1RoxPGJ/Nm8Qmk0PxP8ojmoaS67i0s7hVssS7KuI2FQoc/uzVlZsqKfQvxPE6D8hICCPHJ4D88zNhT3OOmkw==} peerDependencies: @@ -919,19 +710,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-select@2.1.4': - resolution: {integrity: sha512-pOkb2u8KgO47j/h7AylCj7dJsm69BXcjkrvTqMptFqsE2i0p8lHkfgneXKjAgPzBMivnoMyt8o4KiV4wYzDdyQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-separator@1.1.1': resolution: {integrity: sha512-RRiNRSrD8iUiXriq/Y5n4/3iE8HzqgLHsusUSg5jVpU2+3tqcUFPJXHDymwEypunc2sWxDUS3UC+rkZRlHedsw==} peerDependencies: @@ -945,19 +723,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-slider@1.2.2': - resolution: {integrity: sha512-sNlU06ii1/ZcbHf8I9En54ZPW0Vil/yPVg4vQMcFNjrIx51jsHbFl1HYHQvCIWJSr1q0ZmA+iIs/ZTv8h7HHSA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-slot@1.1.1': resolution: {integrity: sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==} peerDependencies: @@ -976,19 +741,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-switch@1.1.2': - resolution: {integrity: sha512-zGukiWHjEdBCRyXvKR6iXAQG6qXm2esuAD6kDOi9Cn+1X6ev3ASo4+CsYaD6Fov9r/AQFekqnD/7+V0Cs6/98g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-tabs@1.1.2': resolution: {integrity: sha512-9u/tQJMcC2aGq7KXpGivMm1mgq7oRJKXphDwdypPd/j21j/2znamPU8WkXgnhUaTrSFNIt8XhOyCAupg8/GbwQ==} peerDependencies: @@ -1002,58 +754,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-toast@1.2.4': - resolution: {integrity: sha512-Sch9idFJHJTMH9YNpxxESqABcAFweJG4tKv+0zo0m5XBvUSL8FM5xKcJLFLXononpePs8IclyX1KieL5SDUNgA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-toggle-group@1.1.1': - resolution: {integrity: sha512-OgDLZEA30Ylyz8YSXvnGqIHtERqnUt1KUYTKdw/y8u7Ci6zGiJfXc02jahmcSNK3YcErqioj/9flWC9S1ihfwg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-toggle@1.1.1': - resolution: {integrity: sha512-i77tcgObYr743IonC1hrsnnPmszDRn8p+EGUsUt+5a/JFn28fxaM88Py6V2mc8J5kELMWishI0rLnuGLFD/nnQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-tooltip@1.1.6': - resolution: {integrity: sha512-TLB5D8QLExS1uDn7+wH/bjEmRurNMTzNrtq7IjaS4kjion9NtzsTGkvR5+i7yc9q01Pi2KMM2cN3f8UG4IvvXA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-use-callback-ref@1.1.0': resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} peerDependencies: @@ -1162,19 +862,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-visually-hidden@1.1.1': - resolution: {integrity: sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/rect@1.1.0': resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} @@ -1272,33 +959,6 @@ packages: '@tailwindcss/postcss@4.1.9': resolution: {integrity: sha512-v3DKzHibZO8ioVDmuVHCW1PR0XSM7nS40EjZFJEA1xPuvTuQPaR5flE1LyikU3hu2u1KNWBtEaSe8qsQjX3tyg==} - '@types/d3-array@3.2.2': - resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} - - '@types/d3-color@3.1.3': - resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} - - '@types/d3-ease@3.0.2': - resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} - - '@types/d3-interpolate@3.0.4': - resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} - - '@types/d3-path@3.1.1': - resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} - - '@types/d3-scale@4.0.9': - resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} - - '@types/d3-shape@3.1.7': - resolution: {integrity: sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==} - - '@types/d3-time@3.0.4': - resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} - - '@types/d3-timer@3.0.2': - resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} - '@types/node@22.0.0': resolution: {integrity: sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw==} @@ -1308,37 +968,10 @@ packages: '@types/react@19.0.0': resolution: {integrity: sha512-MY3oPudxvMYyesqs/kW1Bh8y9VqSmf+tzqw3ae8a9DZW68pUe3zAdHeI1jc6iAysuRdACnVknHP8AhwD4/dxtg==} - '@vercel/analytics@1.3.1': - resolution: {integrity: sha512-xhSlYgAuJ6Q4WQGkzYTLmXwhYl39sWjoMA3nHxfkvG+WdBT25c563a7QhwwKivEOZtPJXifYHR1m2ihoisbWyA==} - peerDependencies: - next: '>= 13' - react: ^18 || ^19 - peerDependenciesMeta: - next: - optional: true - react: - optional: true - aria-hidden@1.2.6: resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} - autoprefixer@10.4.20: - resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - - baseline-browser-mapping@2.8.16: - resolution: {integrity: sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==} - hasBin: true - - browserslist@4.26.3: - resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -1360,12 +993,6 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - cmdk@1.0.4: - resolution: {integrity: sha512-AnsjfHyHpQ/EFeAnG216WY7A5LiYCoZzCSygiLvfXC3H3LFGCprErteUcszaVluGOhuOTbJS3jWHrSDYPBBygg==} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - react-dom: ^18 || ^19 || ^19.0.0-rc - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -1383,59 +1010,6 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - d3-array@3.2.4: - resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} - engines: {node: '>=12'} - - d3-color@3.1.0: - resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} - engines: {node: '>=12'} - - d3-ease@3.0.1: - resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} - engines: {node: '>=12'} - - d3-format@3.1.0: - resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} - engines: {node: '>=12'} - - d3-interpolate@3.0.1: - resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} - engines: {node: '>=12'} - - d3-path@3.1.0: - resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} - engines: {node: '>=12'} - - d3-scale@4.0.2: - resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} - engines: {node: '>=12'} - - d3-shape@3.2.0: - resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} - engines: {node: '>=12'} - - d3-time-format@4.1.0: - resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} - engines: {node: '>=12'} - - d3-time@3.1.0: - resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} - engines: {node: '>=12'} - - d3-timer@3.0.1: - resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} - engines: {node: '>=12'} - - date-fns-jalali@4.1.0-0: - resolution: {integrity: sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==} - - date-fns@4.1.0: - resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} - - decimal.js-light@2.5.1: - resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -1443,48 +1017,10 @@ packages: detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - dom-helpers@5.2.1: - resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} - - electron-to-chromium@1.5.234: - resolution: {integrity: sha512-RXfEp2x+VRYn8jbKfQlRImzoJU01kyDvVPBmG39eU2iuRVhuS6vQNocB8J0/8GrIMLnPzgz4eW6WiRnJkTuNWg==} - - embla-carousel-react@8.5.1: - resolution: {integrity: sha512-z9Y0K84BJvhChXgqn2CFYbfEi6AwEr+FFVVKm/MqbTQ2zIzO1VQri6w67LcfpVF0AjbhwVMywDZqY4alYkjW5w==} - peerDependencies: - react: ^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - - embla-carousel-reactive-utils@8.5.1: - resolution: {integrity: sha512-n7VSoGIiiDIc4MfXF3ZRTO59KDp820QDuyBDGlt5/65+lumPHxX2JLz0EZ23hZ4eg4vZGUXwMkYv02fw2JVo/A==} - peerDependencies: - embla-carousel: 8.5.1 - - embla-carousel@8.5.1: - resolution: {integrity: sha512-JUb5+FOHobSiWQ2EJNaueCNT/cQU9L6XWBbWmorWPQT9bkbk+fhsuLr8wWrzXKagO3oWszBO7MSx+GfaRk4E6A==} - enhanced-resolve@5.18.3: resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} engines: {node: '>=10.13.0'} - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - - fast-equals@5.3.2: - resolution: {integrity: sha512-6rxyATwPCkaFIL3JLqw8qXqMpIZ942pTX/tbQFkRsDGblS8tNGtlUauA/+mt6RUfqn/4MoEr+WDkYoIQbibWuQ==} - engines: {node: '>=6.0.0'} - - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - - geist@1.3.1: - resolution: {integrity: sha512-Q4gC1pBVPN+D579pBaz0TRRnGA4p9UK6elDY/xizXdFk/g4EKR5g0I+4p/Kj6gM0SajDBZ/0FvDV9ey9ud7BWw==} - peerDependencies: - next: '>=13.2.0' - get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} @@ -1492,16 +1028,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - input-otp@1.4.1: - resolution: {integrity: sha512-+yvpmKYKHi9jIGngxagY9oWiiblPB7+nEO75F2l2o4vs+6vpPZZmUl4tBNYuTCvQjhvEIbdNeJu70bhfYP2nbw==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc - - internmap@2.0.3: - resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} - engines: {node: '>=12'} - is-arrayish@0.3.4: resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} @@ -1509,9 +1035,6 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - lightningcss-darwin-arm64@1.30.1: resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} engines: {node: '>= 12.0.0'} @@ -1576,13 +1099,6 @@ packages: resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} engines: {node: '>= 12.0.0'} - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - lucide-react@0.454.0: resolution: {integrity: sha512-hw7zMDwykCLnEzgncEEjHeA6+45aeEzRYuKHuyRSOPkhko+J3ySGjGIzu+mmMfDFG1vazHepMaYFYHbTFAZAAQ==} peerDependencies: @@ -1631,23 +1147,9 @@ packages: sass: optional: true - node-releases@2.0.23: - resolution: {integrity: sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==} - - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} @@ -1656,32 +1158,11 @@ packages: resolution: {integrity: sha512-27VKOqrYfPncKA2NrFOVhP5MGAfHKLYn/Q0mz9cNQyRAKYi3VNHwYU2qKKqPCqgBmeeJ0uAFB56NumXZ5ZReXg==} engines: {node: ^10 || ^12 || >=14} - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - - react-day-picker@9.8.0: - resolution: {integrity: sha512-E0yhhg7R+pdgbl/2toTb0xBhsEAtmAx1l7qjIWYfcxOy8w4rTSVfbtBoSzVVhPwKP/5E9iL38LivzoE3AQDhCQ==} - engines: {node: '>=18'} - peerDependencies: - react: '>=16.8.0' - react-dom@19.0.0: resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} peerDependencies: react: ^19.0.0 - react-hook-form@7.60.0: - resolution: {integrity: sha512-SBrYOvMbDB7cV8ZfNpaiLcgjH/a1c7aK0lK+aNigpf4xWLO8q+o4tcvVurv3c4EOyzn/3dCsYt4GKD42VvJ/+A==} - engines: {node: '>=18.0.0'} - peerDependencies: - react: ^16.8.0 || ^17 || ^18 || ^19 - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-remove-scroll-bar@2.3.8: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} @@ -1702,18 +1183,6 @@ packages: '@types/react': optional: true - react-resizable-panels@2.1.7: - resolution: {integrity: sha512-JtT6gI+nURzhMYQYsx8DKkx6bSoOGFp7A3CwMrOb8y5jFHFyqwo9m68UhmXRw57fRVJksFn1TSlm3ywEQ9vMgA==} - peerDependencies: - react: ^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - - react-smooth@4.0.4: - resolution: {integrity: sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-style-singleton@2.2.3: resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} engines: {node: '>=10'} @@ -1724,26 +1193,10 @@ packages: '@types/react': optional: true - react-transition-group@4.4.5: - resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} - peerDependencies: - react: '>=16.6.0' - react-dom: '>=16.6.0' - react@19.0.0: resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} engines: {node: '>=0.10.0'} - recharts-scale@0.4.5: - resolution: {integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==} - - recharts@2.15.4: - resolution: {integrity: sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==} - engines: {node: '>=14'} - peerDependencies: - react: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - scheduler@0.25.0: resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} @@ -1752,9 +1205,6 @@ packages: engines: {node: '>=10'} hasBin: true - server-only@0.0.1: - resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} - sharp@0.33.5: resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -1762,12 +1212,6 @@ packages: simple-swizzle@0.2.4: resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} - sonner@1.7.4: - resolution: {integrity: sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw==} - peerDependencies: - react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc - source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -1808,14 +1252,11 @@ packages: resolution: {integrity: sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==} engines: {node: '>=18'} - tiny-invariant@1.3.3: - resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tw-animate-css@1.3.3: - resolution: {integrity: sha512-tXE2TRWrskc4TU3RDd7T8n8Np/wCfoeH9gz22c7PzYqNPQ9FBGFbWWzwL0JyHcFp+jHozmF76tbHfPAx22ua2Q==} + tw-animate-css@1.4.0: + resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} typescript@5.0.2: resolution: {integrity: sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==} @@ -1825,12 +1266,6 @@ packages: undici-types@6.11.1: resolution: {integrity: sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==} - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - use-callback-ref@1.3.3: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} @@ -1851,27 +1286,10 @@ packages: '@types/react': optional: true - use-sync-external-store@1.6.0: - resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - vaul@0.9.9: - resolution: {integrity: sha512-7afKg48srluhZwIkaU+lgGtFCUsYBSGOl8vcc8N/M3YQlZFlynHD15AE+pwrYdc826o7nrIND4lL9Y6b9WWZZQ==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - - victory-vendor@36.9.2: - resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==} - yallist@5.0.0: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - snapshots: '@alloc/quick-lru@5.2.0': {} @@ -1881,10 +1299,6 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@babel/runtime@7.28.4': {} - - '@date-fns/tz@1.2.0': {} - '@emnapi/runtime@1.5.0': dependencies: tslib: 2.8.1 @@ -1907,10 +1321,6 @@ snapshots: '@floating-ui/utils@0.2.10': {} - '@hookform/resolvers@3.10.0(react-hook-form@7.60.0(react@19.0.0))': - dependencies: - react-hook-form: 7.60.0(react@19.0.0) - '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.0.4 @@ -2076,15 +1486,6 @@ snapshots: '@types/react': 19.0.0 '@types/react-dom': 19.0.0 - '@radix-ui/react-aspect-ratio@1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.0 - '@types/react-dom': 19.0.0 - '@radix-ui/react-avatar@1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0) @@ -2153,20 +1554,6 @@ snapshots: optionalDependencies: '@types/react': 19.0.0 - '@radix-ui/react-context-menu@2.2.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-menu': 2.1.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.0)(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.0 - '@types/react-dom': 19.0.0 - '@radix-ui/react-context@1.1.1(@types/react@19.0.0)(react@19.0.0)': dependencies: react: 19.0.0 @@ -2304,23 +1691,6 @@ snapshots: '@types/react': 19.0.0 '@types/react-dom': 19.0.0 - '@radix-ui/react-hover-card@1.1.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.0)(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.0 - '@types/react-dom': 19.0.0 - '@radix-ui/react-id@1.1.0(@types/react@19.0.0)(react@19.0.0)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.0)(react@19.0.0) @@ -2370,69 +1740,6 @@ snapshots: '@types/react': 19.0.0 '@types/react-dom': 19.0.0 - '@radix-ui/react-menubar@1.1.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-direction': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-id': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-menu': 2.1.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.0)(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.0 - '@types/react-dom': 19.0.0 - - '@radix-ui/react-navigation-menu@1.2.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-direction': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-id': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-use-previous': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-visually-hidden': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.0 - '@types/react-dom': 19.0.0 - - '@radix-ui/react-popover@1.1.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-id': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-slot': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.0)(react@19.0.0) - aria-hidden: 1.2.6 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - react-remove-scroll: 2.7.1(@types/react@19.0.0)(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.0 - '@types/react-dom': 19.0.0 - '@radix-ui/react-popper@1.2.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@floating-ui/react-dom': 2.1.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -2509,34 +1816,6 @@ snapshots: '@types/react': 19.0.0 '@types/react-dom': 19.0.0 - '@radix-ui/react-progress@1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.0 - '@types/react-dom': 19.0.0 - - '@radix-ui/react-radio-group@1.2.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-direction': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-use-previous': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-use-size': 1.1.0(@types/react@19.0.0)(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.0 - '@types/react-dom': 19.0.0 - '@radix-ui/react-roving-focus@1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -2571,35 +1850,6 @@ snapshots: '@types/react': 19.0.0 '@types/react-dom': 19.0.0 - '@radix-ui/react-select@2.1.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@radix-ui/number': 1.1.0 - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-direction': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-id': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-slot': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-use-previous': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-visually-hidden': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - aria-hidden: 1.2.6 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - react-remove-scroll: 2.7.1(@types/react@19.0.0)(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.0 - '@types/react-dom': 19.0.0 - '@radix-ui/react-separator@1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -2609,25 +1859,6 @@ snapshots: '@types/react': 19.0.0 '@types/react-dom': 19.0.0 - '@radix-ui/react-slider@1.2.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@radix-ui/number': 1.1.0 - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-direction': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-use-previous': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-use-size': 1.1.0(@types/react@19.0.0)(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.0 - '@types/react-dom': 19.0.0 - '@radix-ui/react-slot@1.1.1(@types/react@19.0.0)(react@19.0.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0) @@ -2642,21 +1873,6 @@ snapshots: optionalDependencies: '@types/react': 19.0.0 - '@radix-ui/react-switch@1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-use-previous': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-use-size': 1.1.0(@types/react@19.0.0)(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.0 - '@types/react-dom': 19.0.0 - '@radix-ui/react-tabs@1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -2673,72 +1889,6 @@ snapshots: '@types/react': 19.0.0 '@types/react-dom': 19.0.0 - '@radix-ui/react-toast@1.2.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-visually-hidden': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.0 - '@types/react-dom': 19.0.0 - - '@radix-ui/react-toggle-group@1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-direction': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-toggle': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.0)(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.0 - '@types/react-dom': 19.0.0 - - '@radix-ui/react-toggle@1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.0)(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.0 - '@types/react-dom': 19.0.0 - - '@radix-ui/react-tooltip@1.1.6(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-context': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-id': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-slot': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-visually-hidden': 1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.0 - '@types/react-dom': 19.0.0 - '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.0.0)(react@19.0.0)': dependencies: react: 19.0.0 @@ -2819,15 +1969,6 @@ snapshots: optionalDependencies: '@types/react': 19.0.0 - '@radix-ui/react-visually-hidden@1.1.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.0 - '@types/react-dom': 19.0.0 - '@radix-ui/rect@1.1.0': {} '@swc/counter@0.1.3': {} @@ -2908,30 +2049,6 @@ snapshots: postcss: 8.5.0 tailwindcss: 4.1.9 - '@types/d3-array@3.2.2': {} - - '@types/d3-color@3.1.3': {} - - '@types/d3-ease@3.0.2': {} - - '@types/d3-interpolate@3.0.4': - dependencies: - '@types/d3-color': 3.1.3 - - '@types/d3-path@3.1.1': {} - - '@types/d3-scale@4.0.9': - dependencies: - '@types/d3-time': 3.0.4 - - '@types/d3-shape@3.1.7': - dependencies: - '@types/d3-path': 3.1.1 - - '@types/d3-time@3.0.4': {} - - '@types/d3-timer@3.0.2': {} - '@types/node@22.0.0': dependencies: undici-types: 6.11.1 @@ -2944,37 +2061,10 @@ snapshots: dependencies: csstype: 3.1.3 - '@vercel/analytics@1.3.1(next@15.2.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)': - dependencies: - server-only: 0.0.1 - optionalDependencies: - next: 15.2.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - aria-hidden@1.2.6: dependencies: tslib: 2.8.1 - autoprefixer@10.4.20(postcss@8.5.0): - dependencies: - browserslist: 4.26.3 - caniuse-lite: 1.0.30001750 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.1.1 - postcss: 8.5.0 - postcss-value-parser: 4.2.0 - - baseline-browser-mapping@2.8.16: {} - - browserslist@4.26.3: - dependencies: - baseline-browser-mapping: 2.8.16 - caniuse-lite: 1.0.30001750 - electron-to-chromium: 1.5.234 - node-releases: 2.0.23 - update-browserslist-db: 1.1.3(browserslist@4.26.3) - busboy@1.6.0: dependencies: streamsearch: 1.1.0 @@ -2991,18 +2081,6 @@ snapshots: clsx@2.1.1: {} - cmdk@1.0.4(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.0.0)(react@19.0.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - use-sync-external-store: 1.6.0(react@19.0.0) - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -3025,108 +2103,24 @@ snapshots: csstype@3.1.3: {} - d3-array@3.2.4: - dependencies: - internmap: 2.0.3 - - d3-color@3.1.0: {} - - d3-ease@3.0.1: {} - - d3-format@3.1.0: {} - - d3-interpolate@3.0.1: - dependencies: - d3-color: 3.1.0 - - d3-path@3.1.0: {} - - d3-scale@4.0.2: - dependencies: - d3-array: 3.2.4 - d3-format: 3.1.0 - d3-interpolate: 3.0.1 - d3-time: 3.1.0 - d3-time-format: 4.1.0 - - d3-shape@3.2.0: - dependencies: - d3-path: 3.1.0 - - d3-time-format@4.1.0: - dependencies: - d3-time: 3.1.0 - - d3-time@3.1.0: - dependencies: - d3-array: 3.2.4 - - d3-timer@3.0.1: {} - - date-fns-jalali@4.1.0-0: {} - - date-fns@4.1.0: {} - - decimal.js-light@2.5.1: {} - detect-libc@2.1.2: {} detect-node-es@1.1.0: {} - dom-helpers@5.2.1: - dependencies: - '@babel/runtime': 7.28.4 - csstype: 3.1.3 - - electron-to-chromium@1.5.234: {} - - embla-carousel-react@8.5.1(react@19.0.0): - dependencies: - embla-carousel: 8.5.1 - embla-carousel-reactive-utils: 8.5.1(embla-carousel@8.5.1) - react: 19.0.0 - - embla-carousel-reactive-utils@8.5.1(embla-carousel@8.5.1): - dependencies: - embla-carousel: 8.5.1 - - embla-carousel@8.5.1: {} - enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 tapable: 2.3.0 - escalade@3.2.0: {} - - eventemitter3@4.0.7: {} - - fast-equals@5.3.2: {} - - fraction.js@4.3.7: {} - - geist@1.3.1(next@15.2.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0)): - dependencies: - next: 15.2.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - get-nonce@1.0.1: {} graceful-fs@4.2.11: {} - input-otp@1.4.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - internmap@2.0.3: {} - is-arrayish@0.3.4: optional: true jiti@2.6.1: {} - js-tokens@4.0.0: {} - lightningcss-darwin-arm64@1.30.1: optional: true @@ -3172,12 +2166,6 @@ snapshots: lightningcss-win32-arm64-msvc: 1.30.1 lightningcss-win32-x64-msvc: 1.30.1 - lodash@4.17.21: {} - - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - lucide-react@0.454.0(react@19.0.0): dependencies: react: 19.0.0 @@ -3224,16 +2212,8 @@ snapshots: - '@babel/core' - babel-plugin-macros - node-releases@2.0.23: {} - - normalize-range@0.1.2: {} - - object-assign@4.1.1: {} - picocolors@1.1.1: {} - postcss-value-parser@4.2.0: {} - postcss@8.4.31: dependencies: nanoid: 3.3.11 @@ -3246,32 +2226,11 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - - react-day-picker@9.8.0(react@19.0.0): - dependencies: - '@date-fns/tz': 1.2.0 - date-fns: 4.1.0 - date-fns-jalali: 4.1.0-0 - react: 19.0.0 - react-dom@19.0.0(react@19.0.0): dependencies: react: 19.0.0 scheduler: 0.25.0 - react-hook-form@7.60.0(react@19.0.0): - dependencies: - react: 19.0.0 - - react-is@16.13.1: {} - - react-is@18.3.1: {} - react-remove-scroll-bar@2.3.8(@types/react@19.0.0)(react@19.0.0): dependencies: react: 19.0.0 @@ -3291,19 +2250,6 @@ snapshots: optionalDependencies: '@types/react': 19.0.0 - react-resizable-panels@2.1.7(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - react-smooth@4.0.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - fast-equals: 5.3.2 - prop-types: 15.8.1 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - react-transition-group: 4.4.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react-style-singleton@2.2.3(@types/react@19.0.0)(react@19.0.0): dependencies: get-nonce: 1.0.1 @@ -3312,41 +2258,13 @@ snapshots: optionalDependencies: '@types/react': 19.0.0 - react-transition-group@4.4.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.28.4 - dom-helpers: 5.2.1 - loose-envify: 1.4.0 - prop-types: 15.8.1 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - react@19.0.0: {} - recharts-scale@0.4.5: - dependencies: - decimal.js-light: 2.5.1 - - recharts@2.15.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - clsx: 2.1.1 - eventemitter3: 4.0.7 - lodash: 4.17.21 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - react-is: 18.3.1 - react-smooth: 4.0.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - recharts-scale: 0.4.5 - tiny-invariant: 1.3.3 - victory-vendor: 36.9.2 - scheduler@0.25.0: {} semver@7.7.3: optional: true - server-only@0.0.1: {} - sharp@0.33.5: dependencies: color: 4.2.3 @@ -3379,11 +2297,6 @@ snapshots: is-arrayish: 0.3.4 optional: true - sonner@1.7.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - source-map-js@1.2.1: {} streamsearch@1.1.0: {} @@ -3411,22 +2324,14 @@ snapshots: minizlib: 3.1.0 yallist: 5.0.0 - tiny-invariant@1.3.3: {} - tslib@2.8.1: {} - tw-animate-css@1.3.3: {} + tw-animate-css@1.4.0: {} typescript@5.0.2: {} undici-types@6.11.1: {} - update-browserslist-db@1.1.3(browserslist@4.26.3): - dependencies: - browserslist: 4.26.3 - escalade: 3.2.0 - picocolors: 1.1.1 - use-callback-ref@1.3.3(@types/react@19.0.0)(react@19.0.0): dependencies: react: 19.0.0 @@ -3442,36 +2347,4 @@ snapshots: optionalDependencies: '@types/react': 19.0.0 - use-sync-external-store@1.6.0(react@19.0.0): - dependencies: - react: 19.0.0 - - vaul@0.9.9(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - victory-vendor@36.9.2: - dependencies: - '@types/d3-array': 3.2.2 - '@types/d3-ease': 3.0.2 - '@types/d3-interpolate': 3.0.4 - '@types/d3-scale': 4.0.9 - '@types/d3-shape': 3.1.7 - '@types/d3-time': 3.0.4 - '@types/d3-timer': 3.0.2 - d3-array: 3.2.4 - d3-ease: 3.0.1 - d3-interpolate: 3.0.1 - d3-scale: 4.0.2 - d3-shape: 3.2.0 - d3-time: 3.1.0 - d3-timer: 3.0.1 - yallist@5.0.0: {} - - zod@3.25.76: {} diff --git a/script.js b/script.js new file mode 100644 index 0000000..7310bee --- /dev/null +++ b/script.js @@ -0,0 +1,89 @@ +// Modal content +const modalContent = { + massage: { + title: "Massage Therapy", + content: `Scope of Practice: + +Registered Massage Therapists in Ontario constitute a regulated health profession in much the same way that physicians, nurses, physiotherapists and chiropractors are regulated. The profession is governed by a Scope of Practice, which is defined as follows: + +"The practice of massage therapy is the assessment of the soft tissue and joints of the body, and the treatment and prevention of physical dysfunction and pain of the soft tissues and joints by manipulation to develop, maintain, rehabilitate or augment physical function, or relieve pain." (Massage Therapy Act, 1991) + +Benefits of Massage Therapy: + +Massage therapy treatments provided by a Registered Massage Therapist can offer significant benefits for a variety of conditions and for diverse patient populations. Whether you need to have a moment of relaxation, reduce muscle tension or attain relief from chronic pain, massage therapy can enhance your overall well-being. + +Massage therapy can be an important part of your health maintenance plan by: +โ€ข Reducing or eliminating pain +โ€ข Improving joint mobility +โ€ข Improving lymphatic drainage +โ€ข Reducing muscular tension + +Techniques: + +Treatments are based on General Swedish Massage techniques and may be combined with Deep Tissue Massage, Myofascial Release, Trigger Point Therapy, Manual Lymphatic Drainage and Joint Mobilization Techniques. Ongoing assessment, remedial exercise and/or home care instruction is also part of this comprehensive treatment session based on the client's goals and comfort.`, + }, + laser: { + title: "Laser Therapy", + content: `The Science: + +Ebb'nFlow Therapeutics uses the BIOFLEXยฎ system of Class 3b lasers together with large surface arrays of bicolour LEDs that affect a large volume of circulating blood as well as underlying tissues resulting in both a powerful systemic and direct photobiomodulation effect. + +Please visit BioflexLaser.com for more info.`, + }, +} + +// Toggle mobile menu +function toggleMobileMenu() { + const navLinks = document.getElementById("navLinks") + navLinks.classList.toggle("active") +} + +function closeMobileMenu() { + const navLinks = document.getElementById("navLinks") + navLinks.classList.remove("active") +} + +// Modal functions +function showModal(type) { + const modal = document.getElementById("modal") + const modalTitle = document.getElementById("modalTitle") + const modalBody = document.getElementById("modalBody") + + if (modalContent[type]) { + modalTitle.textContent = modalContent[type].title + modalBody.textContent = modalContent[type].content + modal.classList.add("active") + } +} + +function closeModal() { + const modal = document.getElementById("modal") + modal.classList.remove("active") +} + +// Close modal on outside click +window.onclick = (event) => { + const modal = document.getElementById("modal") + if (event.target === modal) { + closeModal() + } +} + +// Smooth scroll with offset for fixed header +document.querySelectorAll('a[href^="#"]').forEach((anchor) => { + anchor.addEventListener("click", function (e) { + e.preventDefault() + const target = document.querySelector(this.getAttribute("href")) + if (target) { + const headerOffset = 80 + const elementPosition = target.getBoundingClientRect().top + const offsetPosition = elementPosition + window.pageYOffset - headerOffset + + window.scrollTo({ + top: offsetPosition, + behavior: "smooth", + }) + closeMobileMenu() + } + }) +}) diff --git a/styles.css b/styles.css new file mode 100644 index 0000000..4812446 --- /dev/null +++ b/styles.css @@ -0,0 +1,1119 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +:root { + --green: #7cb342; + --green-dark: #558b2f; + --green-light: #aed581; + --beige-lightest: #f7f3ef; + --beige-light: #f0e9e0; + --beige: #e8dfd3; + --gray-800: #2d3748; + --gray-700: #4a5568; + --gray-600: #718096; +} + +body { + font-family: "Inter", sans-serif; + line-height: 1.6; + color: var(--gray-700); + background: var(--beige-lightest); +} + +html { + scroll-behavior: smooth; +} + +.container { + max-width: 1200px; + margin: 0 auto; + padding: 0 1rem; +} + +/* Navigation */ +header { + position: sticky; + top: 0; + background: rgba(255, 255, 255, 0.95); + backdrop-filter: blur(10px); + border-bottom: 1px solid var(--beige); + z-index: 1000; +} + +nav { + display: flex; + justify-content: space-between; + align-items: center; + padding: 1rem 0; +} + +.logo { + display: flex; + align-items: center; + gap: 0.75rem; + text-decoration: none; + color: var(--gray-800); + font-size: 1.25rem; + font-weight: 300; +} + +.logo img { + width: 40px; + height: 40px; + object-fit: contain; +} + +.highlight { + color: var(--green); + font-weight: 500; +} + +.nav-links { + display: flex; + list-style: none; + gap: 2rem; + align-items: center; +} + +.nav-links a { + text-decoration: none; + color: var(--gray-600); + font-weight: 500; + transition: color 0.3s; +} + +.nav-links a:hover { + color: var(--green); +} + +.mobile-menu-btn { + display: none; + flex-direction: column; + gap: 4px; + background: none; + border: none; + cursor: pointer; +} + +.mobile-menu-btn span { + width: 25px; + height: 3px; + background: var(--gray-700); + transition: 0.3s; +} + +/* Buttons */ +.btn { + display: inline-block; + padding: 0.75rem 1.5rem; + border-radius: 0.5rem; + text-decoration: none; + font-weight: 500; + transition: all 0.3s; + cursor: pointer; + border: 2px solid transparent; + text-align: center; +} + +.btn-primary { + background: var(--green); + color: white; +} + +.btn-primary:hover { + background: var(--green-dark); +} + +.btn-secondary { + background: transparent; + color: var(--green); + border-color: var(--green); +} + +.btn-secondary:hover { + background: var(--beige-light); +} + +.btn-outline { + background: transparent; + color: var(--green); + border-color: var(--green); +} + +.btn-outline:hover { + background: var(--green); + color: white; +} + +/* Hero Section */ +.hero { + background: linear-gradient(135deg, var(--beige-light), var(--beige)); + padding: 5rem 0; +} + +.hero-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 3rem; + align-items: center; +} + +.hero-content h1 { + font-size: 3rem; + font-weight: 300; + color: var(--gray-800); + margin-bottom: 1rem; +} + +.hero-subtitle { + font-size: 1.5rem; + font-style: italic; + font-weight: 300; + color: var(--gray-700); + margin-bottom: 1rem; +} + +.hero-description { + font-size: 1.25rem; + color: var(--gray-600); + margin-bottom: 1rem; +} + +.hero-tagline { + font-size: 1.125rem; + color: var(--green); + font-weight: 500; + margin-bottom: 2rem; +} + +.hero-buttons { + display: flex; + gap: 1rem; + flex-wrap: wrap; +} + +.hero-image img { + width: 100%; + height: 500px; + object-fit: cover; + border-radius: 1rem; + box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15); +} + +/* About Section */ +.about-intro { + padding: 5rem 0; + background: white; +} + +.about-card { + max-width: 900px; + margin: 0 auto; + padding: 2rem; + background: var(--beige-light); + border-radius: 1rem; + border: 1px solid var(--beige); +} + +.about-card p { + margin-bottom: 1rem; + color: var(--gray-700); + line-height: 1.8; +} + +/* Services Section */ +.services { + padding: 5rem 0; + background: var(--beige-lightest); +} + +.services h2, +.pricing h2 { + text-align: center; + font-size: 2.5rem; + font-weight: 300; + color: var(--gray-800); + margin-bottom: 1rem; +} + +.section-description { + text-align: center; + max-width: 800px; + margin: 0 auto 3rem; + font-size: 1.125rem; + color: var(--gray-600); +} + +.services-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 2rem; +} + +.service-card { + background: white; + border-radius: 1rem; + overflow: hidden; + border: 1px solid var(--beige); + transition: box-shadow 0.3s; +} + +.service-card:hover { + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1); +} + +.service-card img { + width: 100%; + height: 200px; + object-fit: cover; +} + +.service-content { + padding: 1.5rem; +} + +.service-content h3 { + font-size: 1.25rem; + color: var(--gray-800); + margin-bottom: 0.75rem; +} + +.service-content p { + color: var(--gray-600); + margin-bottom: 1rem; + line-height: 1.6; +} + +.service-content .btn { + width: 100%; + margin-bottom: 0.5rem; +} + +/* Pricing Section */ +.pricing { + padding: 5rem 0; + background: white; +} + +.pricing-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 2rem; + margin-bottom: 2rem; +} + +.pricing-card { + background: white; + border: 1px solid var(--beige); + border-radius: 1rem; + padding: 2rem; +} + +.pricing-card h3 { + font-size: 1.25rem; + color: var(--gray-800); + margin-bottom: 1.5rem; +} + +.price-list { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.price-item { + display: flex; + justify-content: space-between; + align-items: center; + color: var(--gray-700); +} + +.price-item span:last-child { + font-weight: 600; + color: var(--gray-800); +} + +.price-item small { + font-size: 0.875rem; + color: var(--gray-600); + font-weight: 400; +} + +.pricing-note { + color: var(--gray-600); + font-size: 0.875rem; + margin-bottom: 1rem; +} + +.addon-price { + text-align: center; + margin: 2rem 0; +} + +.large-price { + display: block; + font-size: 2rem; + font-weight: 600; + color: var(--green); +} + +.price-note { + display: block; + font-size: 0.875rem; + color: var(--gray-600); +} + +.insurance-card { + background: var(--beige-lightest); + border: 1px solid var(--beige); + border-radius: 1rem; + padding: 2rem; +} + +.insurance-card h3 { + font-size: 1.5rem; + color: var(--gray-800); + margin-bottom: 0.5rem; +} + +.insurance-highlight { + font-size: 1.125rem; + font-weight: 700; + color: var(--green); + margin-bottom: 1.5rem; +} + +.insurance-details p { + margin-bottom: 0.75rem; + color: var(--gray-700); + line-height: 1.6; +} + +/* CTA Section */ +.cta { + padding: 4rem 0; + background: var(--beige-light); + text-align: center; +} + +.cta h2 { + font-size: 2rem; + font-weight: 300; + color: var(--gray-800); + margin-bottom: 2rem; +} + +.cta p { + max-width: 800px; + margin: 0 auto 2rem; + font-size: 1.125rem; + color: var(--gray-600); +} + +.cta-contact { + display: flex; + justify-content: center; + gap: 3rem; + margin-bottom: 2rem; +} + +.contact-item { + display: flex; + align-items: center; + gap: 0.5rem; + color: var(--gray-600); +} + +.cta-buttons { + display: flex; + justify-content: center; + gap: 1rem; + flex-wrap: wrap; + margin-bottom: 2rem; +} + +.rmt-badge { + margin-top: 2rem; +} + +.rmt-badge img { + max-width: 200px; + height: auto; +} + +/* Footer */ +footer { + background: #1a202c; + color: #e2e8f0; + padding: 3rem 0 1rem; +} + +.footer-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 2rem; + margin-bottom: 2rem; +} + +.footer-brand img { + width: 32px; + height: 32px; + margin-bottom: 0.5rem; +} + +.footer-brand h3 { + font-size: 1.25rem; + font-weight: 300; + margin-bottom: 0.5rem; +} + +.footer-brand p { + font-size: 0.875rem; + line-height: 1.6; + color: #cbd5e0; +} + +.footer-links h4 { + font-size: 1rem; + font-weight: 500; + margin-bottom: 1rem; +} + +.footer-links ul { + list-style: none; +} + +.footer-links li { + margin-bottom: 0.5rem; +} + +.footer-links a { + color: #cbd5e0; + text-decoration: none; + transition: color 0.3s; +} + +.footer-links a:hover { + color: var(--green-light); +} + +.footer-contact p { + margin-bottom: 0.75rem; + font-size: 0.875rem; +} + +.footer-bottom { + border-top: 1px solid #2d3748; + padding-top: 1.5rem; + display: flex; + justify-content: space-between; + align-items: center; +} + +.footer-legal { + display: flex; + gap: 1.5rem; +} + +.footer-legal a { + color: #cbd5e0; + text-decoration: none; + font-size: 0.875rem; +} + +/* Modal */ +.modal { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); + z-index: 2000; + align-items: center; + justify-content: center; +} + +.modal.active { + display: flex; +} + +.modal-content { + background: white; + border-radius: 1rem; + max-width: 800px; + max-height: 80vh; + overflow-y: auto; + margin: 2rem; +} + +.modal-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 1.5rem; + border-bottom: 1px solid var(--beige); +} + +.modal-header h3 { + font-size: 1.5rem; + color: var(--gray-800); +} + +.modal-close { + background: none; + border: none; + font-size: 2rem; + color: var(--gray-600); + cursor: pointer; +} + +.modal-body { + padding: 1.5rem; + color: var(--gray-700); + line-height: 1.8; + white-space: pre-line; +} + +/* Mobile Responsive */ +@media (max-width: 768px) { + .nav-links { + position: fixed; + top: 60px; + right: -100%; + width: 80%; + max-width: 400px; + height: calc(100vh - 60px); + background: white; + flex-direction: column; + padding: 2rem; + box-shadow: -5px 0 15px rgba(0, 0, 0, 0.1); + transition: right 0.3s; + align-items: flex-start; + } + + .nav-links.active { + right: 0; + } + + .mobile-menu-btn { + display: flex; + } + + .hero-grid { + grid-template-columns: 1fr; + } + + .hero-content h1 { + font-size: 2rem; + } + + .hero-subtitle { + font-size: 1.25rem; + } + + .hero-description { + font-size: 1rem; + } + + .cta-contact { + flex-direction: column; + gap: 1rem; + } + + .footer-bottom { + flex-direction: column; + gap: 1rem; + } +} + +/* Additional styles for new pages */ + +/* Page Hero */ +.page-hero { + background: linear-gradient(135deg, var(--beige-light), var(--beige)); + padding: 4rem 0; + text-align: center; +} + +.badge { + display: inline-block; + padding: 0.5rem 1rem; + background: white; + color: var(--gray-600); + border: 1px solid var(--beige); + border-radius: 2rem; + font-size: 0.875rem; + margin-bottom: 1.5rem; +} + +/* Content Sections */ +.content-section { + padding: 4rem 0; +} + +.content-section.bg-alt { + background: var(--beige-lightest); +} + +.section-title { + text-align: center; + font-size: 2.5rem; + font-weight: 300; + color: var(--gray-800); + margin-bottom: 3rem; +} + +.centered-content { + max-width: 900px; + margin: 0 auto; + text-align: center; +} + +.centered-content p { + margin-bottom: 1.5rem; + line-height: 1.8; +} + +.large-text { + font-size: 1.25rem; + color: var(--gray-700); +} + +/* Two Column Grid */ +.two-col-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 3rem; + align-items: start; +} + +.two-col-grid.reverse { + direction: rtl; +} + +.two-col-grid.reverse > * { + direction: ltr; +} + +/* Three Column Grid */ +.three-col-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 2rem; +} + +/* Content Text & Images */ +.content-text { + display: flex; + flex-direction: column; + gap: 2rem; +} + +.content-text h2 { + font-size: 2rem; + font-weight: 300; + color: var(--gray-800); + margin-bottom: 1rem; +} + +.content-text p { + color: var(--gray-700); + line-height: 1.8; + margin-bottom: 1rem; +} + +.content-image img { + width: 100%; + border-radius: 1rem; + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1); +} + +.image-caption { + text-align: center; + margin-top: 0.75rem; + color: var(--gray-600); + font-size: 0.875rem; +} + +/* Info Cards */ +.info-card { + background: white; + border: 1px solid var(--beige); + border-radius: 1rem; + padding: 2rem; +} + +.info-card.large { + padding: 2.5rem; +} + +.info-card.highlight-card { + background: var(--beige-lightest); +} + +.info-card h3 { + font-size: 1.25rem; + color: var(--gray-800); + margin-bottom: 1rem; +} + +.info-card p { + color: var(--gray-700); + line-height: 1.8; + margin-bottom: 1rem; +} + +.info-card p:last-child { + margin-bottom: 0; +} + +.info-card .emphasis { + font-weight: 500; + color: var(--gray-800); +} + +.info-card .italic { + font-style: italic; +} + +/* Icon Header */ +.icon-header { + display: flex; + align-items: center; + gap: 1rem; + margin-bottom: 1rem; +} + +.large-icon { + font-size: 2rem; +} + +/* Timeline */ +.timeline p { + padding-left: 1rem; + border-left: 3px solid var(--green); + margin-bottom: 1rem; + color: var(--gray-700); +} + +/* Education Grid */ +.education-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 2rem; +} + +.education-card { + background: white; + border: 1px solid var(--beige); + border-radius: 1rem; + padding: 2rem; +} + +.education-card h3 { + font-size: 1.25rem; + color: var(--gray-800); + margin-bottom: 1.5rem; +} + +.education-list p { + color: var(--gray-700); + line-height: 1.6; + margin-bottom: 0.75rem; +} + +/* Lists */ +.bullet-list, +.check-list { + list-style: none; + padding: 0; +} + +.bullet-list li, +.check-list li { + padding-left: 1.5rem; + position: relative; + margin-bottom: 0.75rem; + color: var(--gray-700); +} + +.bullet-list li:before { + content: "โ€ข"; + position: absolute; + left: 0; + color: var(--green); + font-weight: bold; +} + +.check-list li:before { + content: "โœ“"; + position: absolute; + left: 0; + color: var(--green); + font-weight: bold; +} + +.two-col-list { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 2rem; +} + +/* Numbered Cards */ +.numbered-card { + background: white; + border: 1px solid var(--beige); + border-radius: 1rem; + padding: 2rem; + text-align: center; +} + +.numbered-card .number { + width: 48px; + height: 48px; + background: var(--gray-800); + color: white; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + font-size: 1.5rem; + font-weight: 700; + margin: 0 auto 1rem; +} + +.numbered-card h3 { + font-size: 1.125rem; + color: var(--gray-800); + margin-bottom: 0.75rem; +} + +.numbered-card p { + color: var(--gray-700); + line-height: 1.6; +} + +/* Contact Page Specific */ +.clinic-images { + padding: 3rem 0; + background: white; +} + +.image-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 2rem; +} + +.image-card { + position: relative; +} + +.image-card img { + width: 100%; + height: 250px; + object-fit: cover; + border-radius: 1rem; +} + +.contact-section { + padding: 4rem 0; + background: var(--beige-lightest); +} + +.contact-grid-simple { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 3rem; +} + +/* Email Card */ +.email-card { + background: white; + border: 2px solid var(--green); + border-radius: 1rem; + padding: 3rem; + text-align: center; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + gap: 1.5rem; +} + +.icon-header-large { + display: flex; + flex-direction: column; + align-items: center; + gap: 1rem; +} + +.icon-header-large .large-icon { + font-size: 4rem; +} + +.icon-header-large h2 { + font-size: 2rem; + font-weight: 300; + color: var(--gray-800); + margin: 0; +} + +.email-description { + color: var(--gray-600); + font-size: 1.125rem; + line-height: 1.8; + max-width: 500px; +} + +.email-link { + display: inline-block; + font-size: 1.5rem; + font-weight: 500; + color: var(--green); + text-decoration: none; + padding: 1rem 2rem; + background: var(--beige-lightest); + border-radius: 0.5rem; + transition: all 0.3s; +} + +.email-link:hover { + background: var(--green); + color: white; + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(124, 179, 66, 0.3); +} + +/* Contact Info Cards */ +.contact-info-wrapper { + display: flex; + flex-direction: column; + gap: 1.5rem; +} + +.contact-item { + display: flex; + gap: 1rem; + align-items: start; +} + +.contact-item .icon { + font-size: 1.25rem; +} + +.contact-item .item-title { + font-weight: 600; + color: var(--gray-800); + margin-bottom: 0.25rem; +} + +.contact-item p { + color: var(--gray-700); + line-height: 1.6; +} + +.contact-item .small { + font-size: 0.875rem; +} + +.info-card.emergency { + background: var(--beige-lightest); +} + +.phone-link, +.email-link-small { + color: var(--green); + text-decoration: none; + transition: color 0.3s; +} + +.phone-link:hover, +.email-link-small:hover { + color: var(--green-dark); + text-decoration: underline; +} + +/* Hours List */ +.hours-list { + display: flex; + flex-direction: column; + gap: 0.75rem; +} + +.hours-item { + display: flex; + justify-content: space-between; + align-items: center; + color: var(--gray-700); +} + +.hours-item span:first-child { + font-weight: 500; +} + +/* Mobile Responsive Updates */ +@media (max-width: 768px) { + .page-hero { + padding: 3rem 0; + } + + .page-hero h1 { + font-size: 2rem; + } + + .two-col-grid, + .contact-grid-simple, + .image-grid { + grid-template-columns: 1fr; + } + + .three-col-grid { + grid-template-columns: 1fr; + } + + .two-col-list { + grid-template-columns: 1fr; + } + + .section-title { + font-size: 2rem; + } + + .content-section { + padding: 3rem 0; + } + + .email-card { + padding: 2rem; + } + + .email-link { + font-size: 1.125rem; + padding: 0.75rem 1.5rem; + } +} + +@media (max-width: 480px) { + .education-grid { + grid-template-columns: 1fr; + } + + .icon-header-large .large-icon { + font-size: 3rem; + } + + .icon-header-large h2 { + font-size: 1.5rem; + } + + .email-link { + font-size: 1rem; + word-break: break-all; + } +} diff --git a/what-to-expect.html b/what-to-expect.html new file mode 100644 index 0000000..a1e5ca9 --- /dev/null +++ b/what-to-expect.html @@ -0,0 +1,239 @@ + + + + + + What to Expect - Ebb'nFlow Therapeutics + + + + + + + + + + + +
+
+ Your First Visit +

What to Expect

+

Once you have successfully booked your initial appointment, you will receive a confirmation email with a few forms to fill out ahead of time.

+
+
+ + +
+
+

The Initial Appointment

+ +
+
+
+ ๐Ÿ“‹ +

Pre-Appointment Forms

+
+
    +
  • Contact Information
  • +
  • Reason for Visit
  • +
  • Health History
  • +
  • Consent to Policies, Assessment and Treatment
  • +
+
+ +
+
+ โฑ๏ธ +

Assessment Process

+
+

Your initial appointment begins with an in-person review of forms and an assessment that can range from simple to more involved, depending on the complexity or severity of your condition.

+

This allows your therapist to ascertain whether there are any contraindications or modifications that may need to be considered for safe and effective treatment.

+
+
+ +
+

First Session Components

+
+
    +
  • Forms review
  • +
  • Intake discussion
  • +
  • Initial assessment
  • +
  • Treatment plan development
  • +
+
    +
  • Treatment of sensitive areas (if indicated)
  • +
  • Diagnostics and referrals
  • +
  • Ongoing assessment planning
  • +
  • Treatment plan maintenance
  • +
+
+
+
+
+ + +
+
+

Comprehensive Assessment

+ +
+
+

The first treatment session requires additional time to go over the forms and perform an initial assessment that may include postural observations, range of motion testing, and/or neurological and special orthopaedic testing.

+
+ +
+

With numerous tools available to her, Dahlia continuously discerns which techniques may be most effective and regularly reassesses client responses to ensure that treatments continue to be beneficial.

+
+
+
+
+ + +
+
+

Your Treatment Experience

+ +
+
+
+
+ ๐Ÿ’š +

Personalized Approach

+
+

Dahlia meets clients where they are, and is able to offer either a quiet retreat or a fun, friendly conversational interaction during treatments. She prioritizes client's goals, with the utmost respect for their comfort, time and resources.

+
+ +
+

Communication & Consent

+

She encourages an atmosphere of open, two-way communication that respects privacy, autonomy and preferences such as depth of pressure and special consent for the treatment of sensitive areas if indicated, guided strictly by the principles of ethical practice adhered to by all registrants of the CMTO.

+
+
+ +
+
+ Professional treatment room setup +
Your Private Treatment Space
+
+
+
+
+
+ + +
+
+
+

A Science and an Art Form

+

A massage from Dahlia is an experience and often also an education. Her approach is intuitive, evidence-based and trauma-informed. Her own personal experiences with injury and chronic pain has instilled a high level of empathy for and understanding of clients' complaints as well as her insistence on professionalism and excellence of care.

+

There's always a unique and inspiring playlist in the background. Clients can also request music that they enjoy, adding to an experience that is tailored just for them. Complimentary aromatherapy is also available by request.

+
+ +
+

Education & Home Care

+

Dahlia is a teacher at heart, so you likely won't be able to walk away without being encouraged to learn a stretch or strengthening exercise or about how to incorporate a home care practice into your routine to enhance the long term effects of treatment between sessions.

+
+
+
+ + +
+
+
+

Holistic Treatment Approach

+

You can expect to have your primary area of concern addressed directly, within a treatment that aims to treat the body holistically as an interconnected system.

+
+
+
+ + +
+
+

Ready to Experience Holistic Care?

+

Begin your wellness journey with a comprehensive assessment and personalized treatment plan.

+ +
+
+ + + + + + +