As the holiday season approaches, the air fills with excitement and the promise of joyous gatherings. Yet, for many, this time of year brings not just cheer but reminders of past hardships. The hustle and predictability of routines vanish, sometimes giving rise to strong emotions and memories—known as trauma triggers. These can arise unexpectedly amidst holiday tunes, festive lights, or seasonal gatherings. Understanding what these triggers are and how they can influence our holiday experience is the first step in navigating through them with awareness.

Identifying and managing holiday-related trauma triggers can be a key factor in maintaining emotional well-being during these months. Acknowledging that triggers exist and are a natural response helps in reducing their power over us. The aim is to enjoy the celebrations with a sense of calm, knowing you’ve taken steps to manage any emotional flare-ups. Let’s explore how you can recognize these triggers and find ways to engage with the season in a more positive way.

Recognizing Holiday-Related Trauma Triggers

During the holidays, many situations can serve as trauma triggers. Understanding some of these common stressors helps in anticipating them:

– Specific Traditions or Events: These could remind you of past negative experiences associated with the holidays.

– Gatherings with Family: Family dynamics can sometimes become tense, bringing up unresolved issues or painful memories.

– Financial Pressure: The need to spend money on gifts and decorations can add stress, resurfacing economic fears or hardships.

Recognizing these triggers in your own life is about being mindful of when and why certain emotions rise. You might notice that shopping for holiday meals makes you anxious or that a particular song stirs up sadness. Take note of these feelings and the context around them. This helps in preparing for what situations to avoid or approach more cautiously.

Being aware of these can help you control the way you respond. For instance, if you know that conversations at family dinners can become stressful, plan ahead on how you’ll react or excuse yourself. By identifying what stirs your emotions, you empower yourself to approach the holidays with a plan, reducing their potential impact on your mental peace. This step’s aim is to provide a foundation from which you can begin to reclaim your holiday joy.

Strategies for Coping with Holiday-Related Trauma

Once you’ve identified potential triggers, it’s time to figure out how to manage them. A variety of approaches can help ease their impact and promote a sense of calm and control during the holidays. Here are some strategies to consider:

– Practice Mindfulness: Paying attention to the present moment can help you stay grounded. Whether it’s through deep breathing, meditation, or simply noticing your surroundings, mindfulness can offer a break from overwhelming emotions.

– Create New Traditions: Building new, positive associations with the holidays might help shift the focus away from negative experiences. Find activities or traditions that bring joy and comfort, such as a cozy movie night or a walk through a decorated neighborhood.

– Set Boundaries: Feeling comfortable during gatherings involves knowing your limits. Politely excusing yourself from conversations or situations triggering discomfort can be a valuable skill. It’s about maintaining your peace.

By incorporating these strategies, the ability to navigate the holiday season with more ease improves. Personalizing these steps to suit your needs enhances their effectiveness, giving you a stronger sense of well-being.

Seeking Professional Help for Trauma Treatment in NYC

Sometimes, handling trauma triggers can feel like more than you can manage alone. That’s when considering professional support might be the right step. Therapists in NYC specialize in trauma treatment, offering expert guidance and strategies tailored to individual needs. This personalized support often provides relief that self-help techniques might not fully achieve.

Benefits of receiving professional support include having a safe space to discuss feelings and experiences, which helps unravel complex emotions linked to trauma triggers. Expert professionals can teach you coping mechanisms that fit your specific situation, empowering you to face the holidays with confidence.

In NYC, there are numerous resources available for those seeking help. Exploring local therapists can offer deeper insights into triggers and arm you with effective tools for managing them, making the holidays less daunting and more enjoyable.

Building a Support System During the Holidays

Establishing a support network is another way to manage difficult emotions during the festive season. Being surrounded by people who understand and care about your well-being is invaluable. Friends, family, or support groups can provide encouragement and practical help, making hurdles appear smaller.

To cultivate this support:

– Identify Key People: Think about who you trust and feel comfortable with. These are the people who can stand by you during tricky times.

– Communicate Your Needs: Let them know how they can assist you, whether through a listening ear or company during challenging gatherings.

– Engage in Group Activities: Join activities with those who share similar interests. This not only distracts from negative thoughts but can also build new, supportive relationships.

Building and maintaining this network ensures you’re not alone, providing a foundation of comfort and encouragement. Knowing there’s a group of people ready to support you can ease the feeling of isolation sometimes felt during this period.

Taking Charge of Your Holiday Experience

As the holiday season progresses, remembering you have the ability to create a positive experience is empowering. Taking proactive steps helps shift the focus from past challenges to present opportunities for joy and connection. By anticipating triggers and preparing accordingly, you regain control over your holiday narrative.

Every action taken toward recognizing and managing triggers is an investment in your own holiday happiness. Remember, a fulfilling and peaceful holiday season isn’t merely a wish, but an achievable reality with thoughtful preparation and support. So go ahead, embrace the potential of these festive moments with a renewed perspective and the assurance that you can make this season your own.

If you’re ready to face the holiday season with confidence and ease, consider exploring trauma treatment in NYC. NYC Counseling offers compassionate support to help you navigate triggers effectively. Our tailored approach will equip you with the tools needed to cultivate a peaceful and fulfilling holiday experience. Remember, you’re not alone, and there are resources available to guide you toward healing and joy.

, then give any button data-nycc-matcher (or the text "Book Appointment" / "Book a Consult") and it opens the matcher as an in-page pop-up. Also callable: NYCCMatcher.open(). Renders inside a Shadow DOM so its styles can't collide with the host site. See INTEGRATION.md. Clinician data + consult links + photos are in CLINICIANS below (snapshot of the live Roster) — swap for a live feed when ready. */ (function(){ "use strict"; var CONFIG = { triggerSelector: '[data-nycc-matcher]', triggerText: ['Book Appointment','Book a Consult','Book a Free Consult'], fontsHref: "https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;500;600&family=Lora:ital,wght@0,400;0,500;0,600;0,700;1,400&display=swap" }; if(!document.getElementById('nycc-matcher-fonts')){ var fl=document.createElement('link'); fl.id='nycc-matcher-fonts'; fl.rel='stylesheet'; fl.href=CONFIG.fontsHref; document.head.appendChild(fl); } var HOST=document.getElementById('nycc-matcher-host'); if(!HOST){ HOST=document.createElement('div'); HOST.id='nycc-matcher-host'; document.body.appendChild(HOST); } var SHADOW=HOST.shadowRoot||HOST.attachShadow({mode:'open'}); SHADOW.innerHTML='
'; var NYCC_MOUNT=SHADOW.getElementById('nycc-mount'); /* Generated from the live tracker Sheet Roster (1rddnkHRZLStDETWAu2WXhSFQTZav6g9GMSwkHQV5vmo), gid 1164034470, read 2026-08-20. Active therapists/interns only; Rachel Poses (no profile) and Lisa Poelle (parent coach) are excluded from the quiz, per the wireframe. Column names match Matching.gs. Re-run the export to refresh. */ var CLINICIANS = [ {"ID": "C01", "ConsultLink": "", "Photo": "https://nyccounseling.com/wp-content/uploads/2020/01/NYC-Therapists-justeana.jpg", "Clinician": "Justena Kavanagh", "License": "LCSW-R, QS, SiFi", "States": "NY,FL", "Network": "OON", "Modality": "Both", "Rate Standard": "600", "Rate Floor": "500", "Floor Needs Approval": "No", "Individual": "Yes", "Couples": "Yes", "Families": "Yes", "Kids/Teens": "No", "Languages": "Yes (language not specified)", "Exclusions": "", "Anxiety": "Yes", "Depression": "Yes", "Trauma": "Yes", "OCD": "Open to it", "LGBTQ+": "Yes", "Cultural Issues": "Yes", "Eating Disorders": "Open to it", "Grief": "Yes", "Substance Use": "Yes", "InOffice Mon": "", "InOffice Tue": "", "InOffice Wed": "", "InOffice Thu": "", "InOffice Fri": "", "InOffice Sat": "", "InOffice Sun": "", "Specialty Confidence": "High", "InOffice Notes": "In-office available per client request.", "Blurb": "Justena founded NYC Counseling and still keeps a caseload. The work covers adults, couples and families, with anxiety, depression, trauma and grief coming up most often. Licensed in both New York and Florida.", "Credential": "LCSW-R"}, {"ID": "C03", "ConsultLink": "", "Photo": "https://nyccounseling.com/wp-content/uploads/2020/02/Allyson-Galishoff-LCSW-NYC-Counseling.png", "Clinician": "Allyson Galishoff", "License": "LCSW", "States": "NY,FL", "Network": "OON", "Modality": "Virtual", "Rate Standard": "350", "Rate Floor": "250", "Floor Needs Approval": "No", "Individual": "Yes", "Couples": "Yes", "Families": "Open to it", "Kids/Teens": "No", "Languages": "", "Exclusions": "Actively suicidal clients; addiction (unless last resort); self-diagnosed borderline", "Anxiety": "Yes", "Depression": "Yes", "Trauma": "Yes", "OCD": "Open to it", "LGBTQ+": "Open to it", "Cultural Issues": "Yes", "Eating Disorders": "No", "Grief": "Specialty", "Substance Use": "No", "InOffice Mon": "", "InOffice Tue": "", "InOffice Wed": "", "InOffice Thu": "", "InOffice Fri": "", "InOffice Sat": "", "InOffice Sun": "", "Specialty Confidence": "High", "InOffice Notes": "Virtual only - does not see clients in office.", "Blurb": "Allyson sits with the things people often can't talk about anywhere else: serious and chronic illness, grief and bereavement, palliative care. Also good with big life transitions, divorce, and clients in high-pressure jobs. The approach mixes psychodynamic work with CBT. Virtual only, New York and Florida.", "Credential": "LCSW"}, {"ID": "C04", "ConsultLink": "https://nyccounseling.clientsecure.me/request/date?clinicianId=1463245¤tDate=2026-08-01¤tTimeZone=America%2FChicago&preselected=true&preselectedCptCodeIds=55276315&preselectedOfficeIds=26183478", "Photo": "https://nyccounseling.com/wp-content/uploads/2026/05/Sandra-Harris-LMSW-RCSW-NYC-Counseling-e1779289082534-1080x1080.png", "Clinician": "Sandra Harris", "License": "LCSW", "States": "NY,FL", "Network": "OON", "Modality": "Virtual", "Rate Standard": "350", "Rate Floor": "100", "Floor Needs Approval": "No", "Individual": "Yes", "Couples": "Yes", "Families": "Yes", "Kids/Teens": "No", "Languages": "", "Exclusions": "Adults only - no children", "Anxiety": "Yes", "Depression": "Yes", "Trauma": "Yes", "OCD": "Yes", "LGBTQ+": "Yes", "Cultural Issues": "Yes", "Eating Disorders": "Yes", "Grief": "Yes", "Substance Use": "Specialty", "InOffice Mon": "", "InOffice Tue": "", "InOffice Wed": "", "InOffice Thu": "", "InOffice Fri": "", "InOffice Sat": "", "InOffice Sun": "", "Specialty Confidence": "High", "InOffice Notes": "Virtual only - does not see clients in office.", "Blurb": "Sandra is the trauma specialist. Certified in EMDR and in suicide risk assessment, with inpatient experience behind that, so complex cases land well here. Substance use and active addiction are a particular strength. Adults only, virtual, New York and Florida.", "Credential": "LCSW"}, {"ID": "C05", "ConsultLink": "", "Photo": "https://nyccounseling.com/wp-content/uploads/2020/02/Meet-Christine-Morrison-LMHC-NYC-Counseling.png", "Clinician": "Christine Morrison", "License": "LMHC", "States": "NY", "Network": "OON", "Modality": "Virtual", "Rate Standard": "350", "Rate Floor": "250", "Floor Needs Approval": "No", "Individual": "Yes", "Couples": "Specialty", "Families": "Specialty", "Kids/Teens": "Open to it", "Languages": "Yes (language not specified)", "Exclusions": "", "Anxiety": "Yes", "Depression": "Yes", "Trauma": "Yes", "OCD": "Open to it", "LGBTQ+": "Yes", "Cultural Issues": "Specialty", "Eating Disorders": "Open to it", "Grief": "Yes", "Substance Use": "Open to it", "InOffice Mon": "", "InOffice Tue": "", "InOffice Wed": "", "InOffice Thu": "", "InOffice Fri": "", "InOffice Sat": "", "InOffice Sun": "", "Specialty Confidence": "High", "InOffice Notes": "Virtual only - does not see clients in office.", "Blurb": "Christine's niche is women in their 20s to 40s, especially around pregnancy, postpartum and early motherhood. Spent 10 years in tech beforehand, so high achievers and perfectionists are familiar ground. Also strong with expats and anyone struggling to settle into a new country. Virtual, New York.", "Credential": "LMHC"}, {"ID": "C06", "ConsultLink": "https://nyccounseling.clientsecure.me/request/date?clinicianId=1718103¤tDate=2026-08-01¤tTimeZone=America%2FChicago&preselected=true&preselectedCptCodeIds=55276313&preselectedOfficeIds=26183478", "Photo": "https://nyccounseling.com/wp-content/uploads/2024/12/Sabrina-Rothschild-NYC-Counseling-e1734461330914.jpeg", "Clinician": "Sabrina Rothschild", "License": "MFT", "States": "NY", "Network": "OON", "Modality": "Virtual", "Rate Standard": "350", "Rate Floor": "100", "Floor Needs Approval": "Yes", "Individual": "Yes", "Couples": "Yes", "Families": "Yes", "Kids/Teens": "Yes", "Languages": "", "Exclusions": "", "Anxiety": "Yes", "Depression": "Yes", "Trauma": "Yes", "OCD": "Yes", "LGBTQ+": "Yes", "Cultural Issues": "Open to it", "Eating Disorders": "Open to it", "Grief": "No", "Substance Use": "Specialty", "InOffice Mon": "", "InOffice Tue": "", "InOffice Wed": "", "InOffice Thu": "", "InOffice Fri": "", "InOffice Sat": "", "InOffice Sun": "", "Specialty Confidence": "High", "InOffice Notes": "Virtual only - does not see clients in office.", "Blurb": "Sabrina is a native New Yorker, direct, and funny with it. A certified peer recovery advocate, so addiction and recovery is the core of the work, including 12-step and moderation management. Also sees couples, including LGBTQ+ and non-monogamous couples, and works with adolescents.", "Credential": "MFT"}, {"ID": "C15", "ConsultLink": "https://nyccounseling.clientsecure.me/request/location?clinicianId=1952893&preselected=true&preselectedCptCodeIds=55276314&preselectedOfficeIds=26183478%2C27630733", "Photo": "https://nyccounseling.com/wp-content/uploads/2020/02/Meet-Samantha-Gellert-Therapist-NYC-Counseling-e1777052193630-559x551.jpg", "Clinician": "Samantha Gellert", "License": "LCSW", "States": "NY", "Network": "OON", "Modality": "Both", "Rate Standard": "350", "Rate Floor": "175", "Floor Needs Approval": "No", "Individual": "Yes", "Couples": "Yes", "Families": "Yes", "Kids/Teens": "Yes", "Languages": "", "Exclusions": "", "Anxiety": "Yes", "Depression": "Yes", "Trauma": "Specialty", "OCD": "Yes", "LGBTQ+": "Yes", "Cultural Issues": "Open to it", "Eating Disorders": "Open to it", "Grief": "Yes", "Substance Use": "Open to it", "InOffice Mon": "", "InOffice Tue": "", "InOffice Wed": "2-7", "InOffice Thu": "", "InOffice Fri": "", "InOffice Sat": "", "InOffice Sun": "", "Specialty Confidence": "High", "InOffice Notes": "In office Wednesdays.", "Blurb": "Samantha works with young adults and couples, and trauma is the specialty. Relationships, whether family or romantic, and neurodivergence support come up a lot. One of the few who sees clients in the office, on Wednesdays.", "Credential": "LCSW"}, {"ID": "C17", "ConsultLink": "https://nyccounseling.clientsecure.me/request/location?clinicianId=2041125&preselected=true&preselectedCptCodeIds=55811353&preselectedOfficeIds=26183478%2C27630733", "Photo": "https://nyccounseling.com/wp-content/uploads/2026/03/Valerie-Herman-MSW-I-NYC-Counseling.png", "Clinician": "Valerie Herman", "License": "MSW-I", "States": "NY,FL", "Network": "OON", "Modality": "Both", "Rate Standard": "350", "Rate Floor": "75", "Floor Needs Approval": "No", "Individual": "Yes", "Couples": "Yes", "Families": "Open to it", "Kids/Teens": "Yes", "Languages": "", "Exclusions": "", "Anxiety": "Yes", "Depression": "Yes", "Trauma": "Yes", "OCD": "Open to it", "LGBTQ+": "Open to it", "Cultural Issues": "Open to it", "Eating Disorders": "Yes", "Grief": "Open to it", "Substance Use": "Open to it", "InOffice Mon": "", "InOffice Tue": "", "InOffice Wed": "9-2", "InOffice Thu": "", "InOffice Fri": "", "InOffice Sat": "", "InOffice Sun": "", "Specialty Confidence": "High", "InOffice Notes": "In office Wednesdays.", "Blurb": "Valerie is the one for children, teens and young adults, and uses play-based work with the younger ones. Anxiety, self-esteem, and helping kids through a separation or divorce are the usual reasons families call. In the office on Wednesdays, licensed in New York and Florida.", "Credential": "MSW-I"}, ]; /* ═══════════════════════════════════════════════════════════════ 2. MATCHER — ported from Matching.gs (two-stage: gates → score) Same WEIGHTS, same reason/flag phrasing. Kept faithful so the web quiz and the Apps Script stay consistent. ═══════════════════════════════════════════════════════════════ */ // inOfficeMatch is deliberately heavy: when a client explicitly asks for an office, the one // clinician who offers it should surface even against a stronger virtual specialty match — the // card shows the specialty gap honestly, and the consult decides. Still a soft score, never a gate. var WEIGHTS = { specialtyMatch:10, networkMatch:8, modalityMatch:5, inOfficeMatch:9, capacityHeadroom:3, rateComfort:2 }; var DISPLAY_SIZE = 2; // the quiz shows "your two matches" function isYes(v){ if(v===true) return true; if(typeof v==='number') return v===1; var s=String(v||'').trim().toLowerCase(); return s==='true'||s==='yes'||s==='y'||s==='x'||s==='1'; } function splitList(v){ if(!v) return []; return String(v).split(/[,;/|]/).map(function(s){return s.trim().toLowerCase();}).filter(Boolean); } function listHas(list,item){ if(!item) return false; return list.indexOf(String(item).trim().toLowerCase())!==-1; } function parseRate(v){ if(v===''||v==null) return null; var n=parseFloat(String(v).replace(/[^0-9.\-]/g,'')); return isNaN(n)?null:n; } function confidenceMultiplier(v){ var s=String(v||'').trim().toLowerCase(); if(s==='high'||s==='h') return 1.0; if(s==='medium'||s==='med'||s==='m') return 0.6; if(s==='low'||s==='l') return 0.3; var n=parseFloat(s); if(!isNaN(n)) return n>1?Math.min(n/5,1):Math.max(0,Math.min(n,1)); return 0.6; } // The Roster grades each specialty/care column as Specialty > Yes > Open to it > No/blank. // Map that to a 0–1 strength used for scoring. (Matching.gs treated cells as boolean; the // live Sheet is richer, so the web scorer reads the grade.) function specialtyValue(v){ var s=String(v||'').trim().toLowerCase(); if(s==='specialty') return 1.0; if(s==='yes') return 0.75; if(s==='open to it') return 0.4; return 0; } // An in-office day cell holds a time range ("2-7"), a block token (ANY/AM/PM/EVE), or Yes when // the clinician is in the office that day; "-"/blank/UNKNOWN means not that day. function hasOfficeDay(v){ var s=String(v||'').trim().toLowerCase(); if(!s||s==='-'||s==='—'||s==='unknown'||s==='no') return false; return /\d/.test(s)||s==='any'||s==='am'||s==='pm'||s==='eve'||s==='yes'; } var OFFICE_DAYS=['InOffice Mon','InOffice Tue','InOffice Wed','InOffice Thu','InOffice Fri','InOffice Sat','InOffice Sun']; function offersOffice(c){ return OFFICE_DAYS.some(function(k){ return hasOfficeDay(c[k]); }); } function modeLabel(c){ var m=String(c['Modality']||'').trim().toLowerCase(); return m==='both'?'Virtual & in-office':m==='in-person'?'In-office':'Virtual'; } function prettyStates(s){ return splitList(s).map(function(x){return x.toUpperCase();}).join(' & '); } /* Stage 1 — hard gates. A failure disqualifies outright. CLINICIANS is already the eligible pool (active therapists with a real profile), so there is no Active/Ready gate here — those filters happen when the Roster is exported. */ function hardGateBlockers(inq,c){ var b=[]; var states=splitList(c['States']); if(inq.state && !listHas(states,inq.state)) b.push('not licensed in '+inq.state); // LEGAL — never softened // Care type: block only on an explicit "No". Yes / Specialty / Open to it all mean they see them. if(inq.careType && String(c[inq.careType]||'').trim().toLowerCase()==='no') b.push('does not see '+inq.careType.toLowerCase()); if(inq.language){ var langs=splitList(c['Languages']); // "Yes (language not specified)" and blank are treated as English-capable. var englishOnly = langs.length===0 || String(c['Languages']||'').toLowerCase().indexOf('not specified')>=0; if(englishOnly){ if(String(inq.language).trim().toLowerCase()!=='english') b.push('no '+inq.language+' listed'); } else if(!listHas(langs,inq.language)) b.push('no '+inq.language+' listed'); } var exclusions=splitList(c['Exclusions']); (inq.concerns||[]).forEach(function(k){ if(listHas(exclusions,k)) b.push('excludes '+k.toLowerCase()); }); var floor=parseRate(c['Rate Floor']); if(inq.affordableRate!=null && floor!=null && inq.affordableRate0){ score+=W.specialtyMatch*sv*conf; matched.push(k); } }); if(matched.length) reasons.push('specialties: '+matched.join(', ')); if(inq.network){ var net=splitList(c['Network']); if(listHas(net,inq.network)||listHas(net,'both')){ score+=W.networkMatch; reasons.push('network: '+inq.network); } } // Delivery modality (EMDR/CBT) isn't a structured Roster column, so there is no modality term. if(inq.wantsInOffice){ if(offersOffice(c)){ score+=W.inOfficeMatch; reasons.push('offers in-office'); if(String(c['InOffice Notes']||'').trim()) flags.push('in-office note: '+String(c['InOffice Notes']).trim()); } else flags.push('wants in-office, none available in '+(inq.state||'your state')); } var standard=parseRate(c['Rate Standard']); if(inq.affordableRate!=null && standard!=null){ if(inq.affordableRate>=standard){ score+=W.rateComfort; reasons.push('affords standard rate'); } else flags.push(isYes(c['Floor Needs Approval'])?'sliding scale — NEEDS APPROVAL':'sliding scale — within clinician discretion'); } score+=W.capacityHeadroom; return { score:score, reasons:reasons, flags:flags }; } function rankClinicians(inq,list){ var all=list||CLINICIANS, eligible=[], nearMisses=[]; all.forEach(function(c){ var b=hardGateBlockers(inq,c); if(b.length===0){ var s=softScore(inq,c); eligible.push({ id:c['ID'], name:c['Clinician'], credential:c['Credential'], states:c['States'], score:s.score, reasons:s.reasons, flags:s.flags, blurb:String(c['Blurb']||'').trim(), tags:concernTags(c), why:whyLine(inq,c,s), detail:c }); } else if(b.length===1){ nearMisses.push({ id:c['ID'], name:c['Clinician'], blockedBy:b[0] }); } }); eligible.sort(function(a,b){ return b.score!==a.score ? b.score-a.score : String(a.name).localeCompare(String(b.name)); }); // Does anyone in the eligible pool (not just the shown two) offer in-office? Drives the // "nobody sees you in an office in your state" banner, which must be true of the whole pool. var anyInOffice=eligible.some(function(c){ return offersOffice(c.detail); }); return { shortlist:eligible.slice(0,DISPLAY_SIZE), eligibleCount:eligible.length, consideredCount:all.length, nearMisses:nearMisses, anyInOffice:anyInOffice }; } /* Up to three concern tags for the card — the clinician's strongest specialties first (Specialty before Yes), drawn from the Roster's real specialty columns. */ function concernTags(c){ var pool=['Anxiety','Depression','Trauma','OCD','Grief','Substance Use','LGBTQ+','Cultural Issues','Eating Disorders']; var strong=pool.filter(function(k){ return specialtyValue(c[k])>=1.0; }); // Specialty var yes=pool.filter(function(k){ return specialtyValue(c[k])===0.75; }); // Yes return strong.concat(yes).slice(0,3); } /* A short, human "why" line for the card — client-facing, no jargon. */ function whyLine(inq,c,s){ // Keep concern names as the Roster spells them (Anxiety, OCD) — don't lowercase acronyms. var hits=(inq.concerns||[]).filter(function(k){ return specialtyValue(c[k])>0; }); var parts=[]; if(hits.length) parts.push(hits.join(' and ')+(hits.length>1?' are both':' is')+' core to '+first(c.Clinician)+"'s work"); if(inq.careType && String(c[inq.careType]||'').trim().toLowerCase()!=='no') parts.push('sees '+careWord(inq.careType)); if(inq.wantsInOffice && String(c['InOffice Notes']||'')) parts.push('and offers in-person sessions'); else if(inq.preferredTimes&&inq.preferredTimes.length&&inq.preferredTimes[0]!=='Any') parts.push('and has availability in the '+inq.preferredTimes.join(' and ').toLowerCase()); var line=parts.join(', '); return line.charAt(0).toUpperCase()+line.slice(1)+'.'; } function first(name){ return String(name).split(' ')[0]; } function careWord(ct){ return ({Individual:'adults one-to-one',Couples:'couples',Families:'families','Kids/Teens':'kids and teens'})[ct]||'clients'; } /* ═══════════════════════════════════════════════════════════════ 3. ANSWER → INQUIRY (maps quiz chips onto the Matching.gs shape) ═══════════════════════════════════════════════════════════════ */ var STATE_MAP={ 'New York':'NY','New Jersey':'NJ','Florida':'FL','South Carolina':'SC','Elsewhere':'' }; var CARE_MAP={ 'Just me':'Individual','Me & my partner':'Couples','Our family':'Families','My child or teen':'Kids/Teens' }; // NYCCMatcher concern label → Roster specialty column. Every quiz option now maps to one of the // Roster's 9 tracked specialties (vocabulary aligned 2026-08-20); only "Something else" / // "Skip this" are intentionally unmapped escape hatches. var CONCERN_MAP={ 'Anxiety':'Anxiety','Depression':'Depression','Trauma':'Trauma','OCD':'OCD', 'Grief & loss':'Grief','Substance use':'Substance Use','LGBTQ+':'LGBTQ+', 'Cultural identity':'Cultural Issues','Eating disorders':'Eating Disorders' }; function buildInquiry(a){ var concerns=[]; if(a.mainConcern && CONCERN_MAP[a.mainConcern]) concerns.push(CONCERN_MAP[a.mainConcern]); (a.secondary||[]).forEach(function(s){ if(CONCERN_MAP[s] && concerns.indexOf(CONCERN_MAP[s])===-1) concerns.push(CONCERN_MAP[s]); }); var pay=a.payment; return { careType: CARE_MAP[a.who]||null, state: STATE_MAP[a.state] !== undefined ? STATE_MAP[a.state] : null, language: a.language||'English', concerns: concerns, network: (pay==='Out of pocket'||pay==='Out-of-network benefits') ? 'OON' : null, modality: null, affordableRate: a.rate || null, wantsInOffice: (a.meet==='Manhattan office' || a.meet==='Miami Beach office'), preferredTimes: a.times||[], _raw:a }; } /* recap line under the results header */ function recapText(a){ var bits=[]; if(a.mainConcern) bits.push(a.mainConcern + ((a.secondary&&a.secondary.length&&a.secondary[0]!=='Skip this')?' + '+a.secondary.filter(function(s){return s!=='Skip this';}).join(' + '):'')); bits.push(({Individual:'adult',Couples:'couple',Families:'family','Kids/Teens':'child/teen'})[CARE_MAP[a.who]]||a.who); if(a.state) bits.push(a.state); if(a.meet) bits.push(a.meet==='Virtually'?'virtual':a.meet.toLowerCase()); if(a.times&&a.times.length) bits.push(a.times.join('/').toLowerCase()); if(a.payment) bits.push(a.payment.toLowerCase()); return bits.join(' · '); } /* ═══════════════════════════════════════════════════════════════ 4. QUIZ QUESTION MODEL ═══════════════════════════════════════════════════════════════ */ var STEPS=[ { key:1, eyebrow:'Step 1 of 3 · about you', h:['A little about ','you'], mut:'Nine short questions. This narrows us to the two people most likely to fit — the consult decides.', questions:[ { id:'who', label:'Who is the therapy for?', type:'single', required:true, options:['Just me','Me & my partner','Our family','My child or teen'] }, { id:'state', label:'Where will you be joining from?', type:'single', required:true, options:['New York','New Jersey','Florida','South Carolina','Elsewhere'] }, { id:'language', label:'Preferred language', type:'select', required:true, options:['English','Spanish','Other'] } ] }, { key:2, eyebrow:'Step 2 of 3 · what brings you here', h:['What would you like ','help with?'], questions:[ { id:'mainConcern', label:'The main thing', type:'single', required:true, options:['Anxiety','Depression','Trauma','OCD','Grief & loss','Substance use','LGBTQ+','Cultural identity','Eating disorders','Something else'] }, { id:'secondary', label:'Anything else on your mind?', opt:true, type:'multi', required:false, options:['Anxiety','Depression','Trauma','OCD','Grief & loss','Substance use','LGBTQ+','Cultural identity','Eating disorders','Skip this'] } ] }, { key:3, eyebrow:'Step 3 of 3 · logistics', h:['The ','practical bits'], questions:[ { id:'meet', label:'How would you like to meet?', type:'single', required:true, options:['Virtually','Manhattan office','Miami Beach office','Either'] }, { id:'times', label:'Days and times that work', type:'multi', required:false, options:['Mornings','Afternoons','Evenings','Any'] }, { id:'payment', label:'How are you planning to pay?', type:'single', required:true, options:['Out of pocket','Out-of-network benefits','Not sure yet'], note:"We're an out-of-network provider, so we don't bill insurance directly. Most clients use out-of-network benefits and some are reimbursed up to 60%." }, { id:'rate', label:'Comfortable per-session range', opt:true, type:'select', required:false, options:['$150','$200','$250','$300','$350+'] } ] } ]; /* ═══════════════════════════════════════════════════════════════ 5. QUIZ CONTROLLER + RENDER ═══════════════════════════════════════════════════════════════ */ var NYCCMatcher=(function(){ var root=NYCC_MOUNT; var state, stepIndex, view, result, activeCard, openPanel, resultsLayout; function open(){ state={ language:'English' }; stepIndex=0; view='quiz'; activeCard=null; openPanel={}; resultsLayout='stacked'; render(); document.body.style.overflow='hidden'; } function setLayout(l){ resultsLayout=l; render(); } function close(){ root.innerHTML=''; document.body.style.overflow=''; } function esc(s){ return String(s==null?'':s).replace(/[&<>"]/g,function(c){return{'&':'&','<':'<','>':'>','"':'"'}[c];}); } /* --- answer helpers --- */ function setSingle(id,val){ state[id]=val; render(); } function toggleMulti(id,val){ var arr=state[id]?state[id].slice():[]; if(val==='Skip this'||val==='Any'){ state[id]=(arr.length===1&&arr[0]===val)?[]:[val]; } else{ arr=arr.filter(function(x){return x!=='Skip this'&&x!=='Any';}); var i=arr.indexOf(val); if(i>=0) arr.splice(i,1); else arr.push(val); state[id]=arr; } render(); } function setSelect(id,val){ state[id]= id==='rate' ? (val?parseInt(val.replace(/[^0-9]/g,''),10):null) : val; render(); } function stepComplete(step){ return step.questions.every(function(q){ return !q.required || (q.type==='multi'?(state[q.id]&&state[q.id].length):state[q.id]); }); } /* --- navigation --- */ function next(){ var s=STEPS[stepIndex]; if(!stepComplete(s)) return; if(stepIndex0){ stepIndex--; render(); } } function editAnswers(){ stepIndex=0; view='quiz'; render(); } function finish(){ result=rankClinicians(buildInquiry(state)); view='results'; activeCard=null; openPanel={}; render(); } /* ─── renderers ─── */ function render(){ if(view==='quiz') return renderQuiz(); if(view==='results') return renderResults(); if(view==='handoff') return renderHandoff(); } function chip(id,val,pressed,multi){ return ''; } function questionHTML(q){ var h='

'+esc(q.label)+(q.opt?' Optional':'')+'

'; if(q.type==='single'){ h+='
'+q.options.map(function(o){return chip(q.id,o,state[q.id]===o,false);}).join('')+'
'; } else if(q.type==='multi'){ h+='
'+q.options.map(function(o){return chip(q.id,o,(state[q.id]||[]).indexOf(o)>=0,true);}).join('')+'
'; } else if(q.type==='select'){ var cur = q.id==='rate' ? (state.rate?('$'+state.rate):'') : (state[q.id]||''); h+='
'; } if(q.note) h+='

'+esc(q.note)+'

'; return h; } function renderQuiz(){ var s=STEPS[stepIndex], pct=Math.round(((stepIndex+1)/STEPS.length)*100), ready=stepComplete(s); root.innerHTML= '
'; } function bar(title){ return '
'+(title||'Find your therapist')+''+ '
'; } /* --- results --- */ function renderResults(){ var list=result.shortlist; if(list.length===0) return renderNoMatch(); var inq=buildInquiry(state); var weak = weakMatchNotes(inq); var side = resultsLayout==='side' && list.length>1; var cards = list.map(function(c,i){return cardHTML(c,i);}).join(''); var cardsWrap = side ? '
'+cards+'
' : cards; var toggle = list.length>1 ? layoutToggle() : ''; root.innerHTML= '
'+ bar('Your two matches')+ '
'+ '

The right fit for you

'+ '

'+esc(recapText(state))+'

'+ toggle+ (weak.length?bannerHTML(weak):'')+ cardsWrap+ '

Both consults are free and 15 minutes. Meet either — or both.

'+ ''+ '
'+ '
'; } // Feature (b): let the client flip between stacked and side-by-side results. function layoutToggle(){ function b(val,label){ return ''; } return '
'+ 'View'+b('stacked','Stacked')+b('side','Side by side')+'
'; } // Read-more tabs: only the two the Roster actually has data for. About = the clinician's // Blurb; Logistics = credential, mode, states, rate, in-office note. No fabricated tabs. function panelContent(c,tab){ var d=c.detail; if(tab==='logistics'){ var out=[c.credential, modeLabel(d), 'licensed in '+prettyStates(d.States)].join(' · ')+ '. Standard rate $'+(d['Rate Standard']||'—')+' per session.'; var note=String(d['InOffice Notes']||'').trim(); if(note && !/virtual only/i.test(note)) out+=' '+note; return out; } return d.Blurb||'—'; } function cardHTML(c,i){ var panelOpen=openPanel[c.id]; var tab=panelOpen||'about'; var live=String(c.detail.ConsultLink||'').trim(); var body= '
'+headshot(c.detail)+'
'+ '

'+esc(c.name)+'

'+ '

'+esc([c.credential,modeLabel(c.detail),prettyStates(c.states)].filter(Boolean).join(' · '))+'

'+ '
'; if(panelOpen){ body+='
'+ 'Inline panel — no new tab, no page change'+ '
'+['about','logistics'].map(function(t){ return ''; }).join('')+'
'+ '

'+esc(panelContent(c,tab))+'

'+ ''+ '
'; } else { body+='

'+esc(c.why)+'

'+ (c.tags.length?'
'+c.tags.map(function(t){return ''+esc(t)+'';}).join('')+'
':''); } body+= c.flags.filter(clientSafeFlag).map(function(f){return '

'+esc(prettyFlag(f))+'

';}).join(''); // Book: live clinicians go straight to their real SimplePractice consult page (new tab); // the four not yet set up route to a handoff screen that explains and offers call/text. var bookBtn = live ? '
Book a free consult with me' : ''; body+='
'+ (panelOpen?'':'')+ bookBtn+ '
'; if(!live) body+='

Online consult booking with '+esc(first(c.name))+' is being set up — you can still request one.

'; return '
'+body+'
'; } // Only surface flags a client should see; hide internal ops flags. function clientSafeFlag(f){ return /in-office note|no matching day|none available/.test(f); } function prettyFlag(f){ if(f.indexOf('in-office note:')===0) return f.replace('in-office note:','In person:').trim(); if(f.indexOf('none available')>=0||f.indexOf('no matching day')>=0) return 'Virtual only for your location.'; return f; } function headshot(c){ var photo=c&&String(c.Photo||'').trim(); return photo ? '' : ''; } /* weak-match banner: the two things worth saying before a price */ function weakMatchNotes(inq){ var notes=[]; if(inq.network==='OON' || inq._raw.payment==='Not sure yet'){ notes.push("We don't accept Medicaid, Medicare, or in-network benefits from any insurer. If your plan has out-of-network benefits we can help you use them — we partner with Thrizer for that billing."); } // True only when NOBODY in the eligible pool offers an office in the client's state. if(inq.wantsInOffice && !result.anyInOffice){ notes.push('Nobody on the team sees clients in an office in your state, so these two are virtual.'); } return notes; } function bannerHTML(notes){ return ''; } /* no eligible clinician — state not covered / everyone gated out */ function renderNoMatch(){ var st=state.state||'your area'; root.innerHTML= '
'; } /* --- handoff to SimplePractice --- */ function handoff(id){ activeCard=result.shortlist.filter(function(c){return c.id===id;})[0]; view='handoff'; render(); } // Only the four clinicians whose 15-min consult isn't live in SimplePractice yet reach this. // Live clinicians link straight out to their real booking page from the card. function renderHandoff(){ var c=activeCard; root.innerHTML= '
'; } function backToResults(){ view='results'; render(); } function tab(id,t){ if(t===null) delete openPanel[id]; else openPanel[id]=t; render(); } return { open:open, close:close, next:next, back:back, setSingle:setSingle, toggleMulti:toggleMulti, setSelect:setSelect, editAnswers:editAnswers, tab:tab, handoff:handoff, backToResults:backToResults, setLayout:setLayout }; })(); window.NYCCMatcher = NYCCMatcher; window.NYCCMatcher.clinicians = CLINICIANS; window.NYCCMatcher.rank = rankClinicians; function nyccBind(){ var els=[].slice.call(document.querySelectorAll(CONFIG.triggerSelector)); if(CONFIG.triggerText && CONFIG.triggerText.length){ [].forEach.call(document.querySelectorAll('a,button'),function(el){ if(CONFIG.triggerText.indexOf((el.textContent||'').trim())>=0) els.push(el); }); } els.forEach(function(el){ if(el.getAttribute('data-nycc-bound')) return; el.setAttribute('data-nycc-bound','1'); el.addEventListener('click',function(e){ e.preventDefault(); NYCCMatcher.open(); }); }); } if(document.readyState!=='loading') nyccBind(); else document.addEventListener('DOMContentLoaded',nyccBind); })();