# Inventario de contenido: Mailables Bloque 2 — Collabs

Solo flujo de solicitud, pendiente cliente, aceptación, rechazo, cancelación y recordatorios pendiente cliente. Inventario real de contenido; sin propuestas de mejora.

---

## NewColabInfluencerEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Dinámico: `Solicitud de colaboración enviada – {clientName}` (clientName = company->company ?? 'Cliente'). |
| **Vista** | Markdown → `emails.new-colab-influencer` (Blade). |
| **Texto principal** | «Hola {{ $influencer_full_name }},» / Si hay collaboration_date: «Hemos recibido tu solicitud de colaboración con {{ $client_name }} y en breve te informaremos sobre su estado.» + bloque detalles (influencer, cliente, dirección, fecha collab, nº personas, observaciones) / «Puedes revisar el estado de tu solicitud desde tu perfil en la app.» Si no: «Hemos recibido tu solicitud de colaboración con {{ $client_name }}.» / «Gracias por colaborar con Nomade,» / «El equipo de Nomade Revolution» |
| **Variables** | `$influencer_full_name`, `$client_name`, `$instagram_user`, `$address`, `$collaboration_date`, `$guests`, `$observations`, `$collaboration_url`. |
| **Fallbacks** | Constructor: cadenas vacías o valores por tipo (Guests, etc.); si no colab, todo vacío/null. `collaboration_url` siempre null (código comentado). |
| **CTA** | No (collaboration_url es null). |
| **DASH_URL / config** | No usa. |
| **Observaciones** | Si $colab es null, acceso a $colab->influencer en constructor puede fallar (solo hay if ($colab) con builds dentro). Vista usa $collaboration_date; Mailable pasa 'collaboration_date' en data. |

---

## NewColabNomadeEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Dinámico: `Nueva solicitud de reserva - {clientOrOffer} x {instagramUser}`. |
| **Vista** | Markdown → `emails.new-colab-nomade` (Blade). |
| **Texto principal** | «Hola Equipo,» / «Se ha recibido una nueva solicitud de colaboración por parte de:» / «Influencer: {{ $influencerFullName }} – @{{ $instagramUser }}» / «Cliente: {{ $clientOrOffer }}» / Condicional: dirección, fecha reserva (con texto "(solo si tiene calendario)"), nº personas, observaciones / «Accede al detalle completo desde el CMS:» / Botón «Enlace directo a la collab en el CMS» (si cmsCollabUrl) / «Gracias,» / «El equipo de Nomade Revolution» |
| **Variables** | `$influencerFullName`, `$instagramUser`, `$clientOrOffer`, `$address`, `$dateText`, `$hasCalendarType`, `$guests`, `$observations`, `$cmsCollabUrl`. |
| **Fallbacks** | defaultInfluencerName, defaultOfferName, defaultInstagramUser, defaultAddress null, defaultGuests/defaultObservations null, defaultDateText '', defaultCmsUrl '#'. Cast a string en data. |
| **CTA** | Sí. «Enlace directo a la collab en el CMS» → `$cmsCollabUrl` (env('DASH_URL') + '/collab/' + colab->id). |
| **DASH_URL / config** | Sí: `env('DASH_URL', '')` para construir cmsCollabUrl. |
| **Observaciones** | Vista tiene texto literal «(solo si tiene calendario)» junto a la fecha. |

---

## AcceptedColabCompanyEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Fijo: `Nueva solicitud de colaboración en Nomade`. |
| **Vista** | Markdown → `emails.accepted-colab-company` (Blade). |
| **Texto principal** | «Hola {{ $recipientName }},» / «Te informamos que hemos validado el perfil de colaboración de:» / «{{ $influencerFullName }} – @{{ $instagramUser }}» / «Ha solicitado colaborar con {{ $clientOrOffer }} a través de Nomade.» / Si dateText: bloque detalles (dirección, fecha propuesta, guests, observaciones) / «Puedes revisar todos los detalles y gestionar la solicitud desde tu perfil en la app o accediendo directamente al enlace:» / Botón «Ver colaboración» (si collabLink) / «Si hay algún cambio o necesitas comunicar algo al influencer, puedes hacerlo desde el chat…» / «Gracias por seguir colaborando con Nomade.» / «El equipo de Nomade Revolution» / «(Este es un email automático…)» |
| **Variables** | `$recipientName`, `$influencerFullName`, `$instagramUser`, `$clientOrOffer`, `$address`, `$dateText`, `$guests`, `$observations`, `$collabLink`, `$clientName` (en bloque), `$hasCalendarType`. |
| **Fallbacks** | recipientName 'Usuario'; influencerFullName varios fallbacks; clientOrOffer 'Nombre del cliente'; address 'Dirección del establecimiento'; guests '2', observations texto por defecto; collabLink '#' si no cmsUrl. |
| **CTA** | Sí. «Ver colaboración» → `$collabLink` (DASH_URL + '/colabs/' + colab->id). |
| **DASH_URL / config** | Sí: `env('DASH_URL', '')`. |
| **Observaciones** | Título vista: «Solcitud de alta» (typo). Constructor no es null-safe si $colab es null (acceso $colab->offer->company->getUser()). |

---

## ClientAcceptedColabCompanyEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Dinámico: `Has aceptado una colaboración con {influencerFullName} ({instagramUser})` (o sin handle). Preview: «Has aceptado una colaboración». |
| **Vista** | Markdown → `emails.client-accepted-colab-company` (Blade). Preview: `emails.preview.empty`. |
| **Texto principal** | «Hola {{ $recipientName }},» / «Confirmamos que has aceptado la solicitud de colaboración de:» / Bloque detalles (influencer, cliente, dirección, fecha reserva, guests, observaciones según hasCalendarType) / «Recuerda que puedes revisar todos los detalles… desde tu perfil en la app o accediendo directamente al enlace:» / Botón «Ver colaboración» (si collabLink) / «Si hay algún cambio o necesitas comunicar algo al influencer…» / «Gracias por seguir colaborando con Nomade.» / «El equipo de Nomade Revolution» / «(Este es un email automático…)» |
| **Variables** | `$recipientName`, `$influencerFullName`, `$instagramUser`, `$clientName`, `$address`, `$dateText`, `$guests`, `$observations`, `$collabLink`, `$hasCalendarType`. |
| **Fallbacks** | recipientName 'Usuario'; influencerFullName, clientName 'cliente'; address/dateText/guests/observations null; collabLink null si no cmsUrl. |
| **CTA** | Sí. «Ver colaboración» → `$collabLink` (env('DASH_URL') + '/colabs/' + colab->id). |
| **DASH_URL / config** | Sí: `env('DASH_URL', '')`. |
| **Observaciones** | Título vista: «Solcitud de alta» (typo). Preview si !colab o !colab->offer. |

---

## AcceptedColabInfluencerEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Dinámico: `✅ ¡Colaboración confirmada con {offerName}!`. |
| **Vista** | View → `emails.accepted-colab-influencer` (Blade). |
| **Texto principal** | «Hola {{ $recipientName }},» / «Tu solicitud de colaboración con {{ $clientName }} ha sido aceptada.» / Bloque detalles (influencer, cliente, dirección, fecha, guests, observaciones) / «Puedes gestionar y revisar todos los detalles de la colaboración directamente desde la app.» / «Si hay algún cambio o duda, escribe cuanto antes al negocio desde el chat de la app…» / «No olvides revisar las condiciones de la oferta y mencionar a {{ $clientInstagram ?? '@instagram_cliente' }}…» / «Recuerda que es importante cumplir siempre las condiciones…» / «Gracias por colaborar con Nomade,» / «El equipo de Nomade Revolution» |
| **Variables** | `$recipientName`, `$influencerName`, `$instagramUser`, `$clientName`, `$clientInstagram`, `$address`, `$dateText`, `$guests`, `$observations`, `$collabLink`. |
| **Fallbacks** | defaultInfluencerName, defaultClientName, defaultInstagram, defaultClientInsta, defaultAddress, defaultGuests/defaultObservations '—', defaultDateText 'Por confirmar'. collabLink construido pero asignado null en Mailable. |
| **CTA** | No (collabLink se pasa como string vacío/null). |
| **DASH_URL / config** | config('app.dash') usado en constructor pero collabLink se deja null. |
| **Observaciones** | collabLink comentado en constructor: siempre llega vacío a la vista. Vista tiene fallback `$clientInstagram ?? '@instagram_cliente'`. |

---

## RejectedColabInfluencerEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Dinámico: `Solicitud no aceptada – {offerName}`. |
| **Vista** | View → `emails.rejected-colab-influencer` (Blade). |
| **Texto principal** | «Hola {{ $influencerName }},» / «Queremos informarte de que la solicitud de colaboración con {{ $offerName }} no ha sido aceptada.» / «Aquí tienes los detalles de tu solicitud:» / Bloque detalles (offerName, dirección, fecha propuesta, guests, observaciones) / Botón «Ver colaboración» (si collabLink; collabLink en Mailable es null) / «No pasa nada 😊. A veces simplemente no encaja…» / «Gracias por seguir formando parte de Nomade,» / «El equipo de Nomade Revolution» / «(Por favor, no respondas directamente a este correo)» |
| **Variables** | `$influencerName`, `$offerName`, `$address`, `$dateText`, `$guests`, `$observations`, `$collabLink`. |
| **Fallbacks** | defaultAddress null, defaultGuests/defaultObservations null, defaultDateText '', defaultCollabLink '#'; en Mailable collabLink = null (comentado). Datos pasados como (string). |
| **CTA** | Vista tiene botón pero Mailable pasa collabLink vacío (null). |
| **DASH_URL / config** | No (enlace comentado). |
| **Observaciones** | collabLink asignado a null en constructor; botón en vista no lleva a ningún sitio útil. |

---

## RejectedColabNomadeEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Fijo: `Solicitud de reserva no aceptada`. |
| **Vista** | Markdown → `emails.rejected-colab-nomade` (Blade). Preview: `emails.preview.empty`. |
| **Texto principal** | «El cliente {{ $offerName }} ha rechazado la solicitud de {{ $influencerDisplayName }} – {{ $instagramHandle }} para {{ $companyName }} por {{ $reason }}. {{ $reason_text }}» (todo en un párrafo). |
| **Variables** | `$offerName`, `$influencerDisplayName`, `$instagramHandle`, `$companyName`, `$reason`, `$reason_text`. |
| **Fallbacks** | Si no colab/influencer/offer/company o tipo no calendar: reason 'Reason', reason_text 'Reason Text'; data vacío en rama else. |
| **CTA** | No. |
| **DASH_URL / config** | No. |
| **Observaciones** | Preview si faltan colab, influencer, offer o company. Vista muy breve, sin layout de bloques. |

---

## ClientRejectedColabCompanyEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Dinámico: `Has rechazado una colaboración con {influencerFullName} ({instagramUser})`. Fallback: «Has rechazado una colaboración». |
| **Vista** | Markdown → `emails.client-rejected-colab-company` (Blade). Preview: `emails.preview.empty`. |
| **Texto principal** | «Hola {{ $recipientName }},» / «Confirmamos que has rechazado la solicitud de colaboración de:» / Bloque detalles (influencer, cliente, dirección, fecha, guests, observaciones según hasCalendarType) / «Gracias por seguir colaborando con Nomade.» / «El equipo de Nomade Revolution» / «(Este es un email automático…)» |
| **Variables** | `$recipientName`, `$influencerFullName`, `$instagramUser`, `$clientName`, `$address`, `$dateText`, `$guests`, `$observations`, `$collabLink`, `$hasCalendarType`. |
| **Fallbacks** | recipientName 'Usuario'; clientName 'cliente'; varios null; collabLink null si no cmsUrl. |
| **CTA** | No (no hay botón en la vista; collabLink se pasa pero no se muestra como CTA). |
| **DASH_URL / config** | Sí: `env('DASH_URL', '')`. |
| **Observaciones** | Preview si !colab o !colab->offer. |

---

## PendingColabReminder1CompanyEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Fijo: `Recordatorio: Tienes una colaboración pendiente de aceptación`. |
| **Vista** | View → `emails.pending-colab-reminder-company` (Blade). Incluye partial `emails.partials.collab-details-block` si showDetailsBlock. |
| **Texto principal** | «Hola {{ $recipientName }},» / «Recuerda que tienes una solicitud de colaboración pendiente de revisión. Si no la gestionas a tiempo, se cancelará de forma automática.» / Si showDetailsBlock: bloque (influencerFullName, instagramUser, clientName, dirección, fecha reserva, guests, observaciones) / «Puedes gestionarla desde la app o directamente a través del siguiente enlace:» / Botón «Ver colaboración» / «Revisa la solicitud a tiempo para no perder la oportunidad…» / «Si ya has gestionado esta solicitud, puedes ignorar este mensaje.» / «Gracias por seguir confiando en Nomade,» / «El equipo de Nomade Revolution» |
| **Variables** | `$recipientName`, `$influencerFullName`, `$instagramUser`, `$clientName`, `$address`, `$dateText`, `$guests`, `$observations`, `$collabLink`, `$showDetailsBlock`. |
| **Fallbacks** | Ninguno en constructor (Colab y User requeridos); build() obtiene datos de colab/recipient. |
| **CTA** | Sí. «Ver colaboración» → `$collabLink` (config('app.dash') + '/collab/' + colab->id). |
| **DASH_URL / config** | Sí: `config('app.dash')`. |
| **Observaciones** | Partial usa `$instagramUser ?? '@usuarioInstagram'`. Constructor no nullable; si colab/influencer faltan, build() puede fallar. |

---

## PendingColabReminder2CompanyEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Fijo: `⏳ Último recordatorio: Tienes una solicitud de colaboración pendiente`. |
| **Vista** | View → `emails.pending-colab-reminder-2-company` (Blade). Incluye mismo partial si showDetailsBlock. |
| **Texto principal** | «Hola {{ $recipientName }},» / «Te recordamos que tienes una solicitud de colaboración pendiente de gestionar. Si no la revisas y respondes en breve, se cancelará automáticamente.» / «Agradeceríamos que la revises cuanto antes…» / Si showDetailsBlock: mismo bloque detalles / «Puedes gestionarla desde la app o directamente a través del siguiente enlace:» / Botón «Ver colaboración» / «Si ya has gestionado esta solicitud, puedes ignorar este mensaje.» / «Gracias por seguir confiando en Nomade,» / «El equipo de Nomade Revolution» |
| **Variables** | Igual que PendingColabReminder1. |
| **Fallbacks** | Igual que PendingColabReminder1. |
| **CTA** | Sí. «Ver colaboración» → `$collabLink` (config('app.dash') + '/collab/' + colab->id). |
| **DASH_URL / config** | Sí: `config('app.dash')`. |
| **Observaciones** | Misma estructura que reminder 1; subject y texto de recordatorio más urgente. |

---

## AutoCanceledColabNomadeEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Dinámico: `❌ Collab autocancelada – {clientName} con {influencerFullName} {instagramUser}`. |
| **Vista** | View → `emails.canceled_colab_nomade` (Blade). |
| **Texto principal** | «Hola equipo,» / «La collab pendiente de revisión por parte del cliente {{ $clientName }} se ha cancelado automáticamente por falta de respuesta.» / Lista: Influencer, Cliente, Dirección, Fecha (si aplica), Nº personas, Observaciones / «Accede al detalle completo desde el CMS:» / Botón «Enlace directo a la collab en el CMS» (si cmsCollabUrl) / «Gracias,» / «El equipo de Nomade Revolution» |
| **Variables** | `$clientName`, `$influencerName`, `$instagramUser`, `$address`, `$dateText`, `$guests`, `$observations`, `$cmsCollabUrl`. |
| **Fallbacks** | clientName 'Cliente'; influencerFullName e instagramUser con fallbacks; address/guests/observations null; cmsCollabUrl null si no DASH_URL. |
| **CTA** | Sí. «Enlace directo a la collab en el CMS» → `$cmsCollabUrl` (env('DASH_URL') + '/collab/' + colab->id). |
| **DASH_URL / config** | Sí: `env('DASH_URL', '')`. |
| **Observaciones** | Vista muestra «(si aplica)» junto a fecha. AutoCanceledColabNomadeEmail usa $this->recipient en build pero no en with (recipient no se pasa a vista). |

---

## AutoCanceledColabCompanyEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Dinámico: `Solicitud cancelada automáticamente – {companyName} y {influencerFullName} (@{instagramUser})`. |
| **Vista** | View → `emails.canceled_colab_company` (Blade). |
| **Texto principal** | «Hola {{ $recipientName }},» / «Lamentamos informarte que la solicitud de colaboración con {{ $influencerName }} – {{ $instagramUser }} ha sido cancelada automáticamente al no haberse gestionado.» / «No te preocupes, muy pronto recibirás nuevas solicitudes…» / «Si tienes cualquier duda o necesitas ayuda…» / «Gracias por seguir confiando en Nomade,» / «El equipo de Nomade Revolution» |
| **Variables** | `$recipientName`, `$influencerName`, `$instagramUser`, `$companyName`. |
| **Fallbacks** | recipientName = $this->recipient?->name ?? ($company?->company ?? 'Usuario'); companyName 'Negocio'. |
| **CTA** | No. |
| **DASH_URL / config** | No. |
| **Observaciones** | Instagram en constructor sin @ en pivot; vista puede mostrar sin @. |

---

## AutoCanceledColabInfluencerEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Dinámico: `⏳ Colaboración no confirmada – {clientName}`. |
| **Vista** | View → `emails.canceled_colab_influencer` (Blade). |
| **Texto principal** | «Hola {{ $recipientName }},» / «Te informamos de que la colaboración con {{ $clientName }} no se ha podido confirmar dentro del plazo establecido, por lo que la collab se ha cancelado automáticamente.» / «Aquí tienes los detalles de tu solicitud:» / Bloque (clientName, dirección, fecha prevista, guests, observaciones) / «No te preocupes 😊 Esta cancelación no implica que el cliente haya rechazado tu solicitud.» / «Puedes volver a solicitar…» / «Gracias por seguir formando parte de Nomade,» / «El equipo de Nomade Revolution» / «(Por favor, no respondas directamente a este correo)» |
| **Variables** | `$recipientName`, `$clientName`, `$instagramUser`, `$address`, `$dateText`, `$guests`, `$observations`, `$collabLink`. |
| **Fallbacks** | clientName 'Cliente'; collabLink '#' si no dash. |
| **CTA** | No (collabLink se pasa pero vista no muestra botón de enlace). |
| **DASH_URL / config** | Sí: `config('app.dash')` para collabLink. |
| **Observaciones** | Ninguna. |

---

## ClientCanceledPendingCompanyEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Dinámico: `Has cancelado la solicitud de colaboración con {influencerFullName} ({instagramUsername})`. |
| **Vista** | View → `emails.client-canceled-pending-company` (Blade). |
| **Texto principal** | «Hola {{ $recipient ? $recipient->name : 'Nombre del cliente' }},» / «Has cancelado la solicitud de colaboración con {{ $influencerFullName }} ({{ $instagramUsername }}).» / Bloque detalles (clientName, dirección, fecha collab, nº personas, observaciones) / «No pasa nada — muy pronto recibirás nuevas solicitudes…» / «Si tienes cualquier duda, escríbenos.» / «Gracias por seguir confiando en Nomade» / «El equipo de Nomade Revolution» |
| **Variables** | `$recipient`, `$influencerFullName`, `$instagramUsername`, `$clientName`, `$address`, `$dateText`, `$peopleCount`, `$observations`, `$hasCalendar`. |
| **Fallbacks** | influencerFullName 'Nombre del influencer'; instagramUsername desde colab->influencer->instagram_username (atributo puede no existir en modelo); clientName colab?->company?->company (Colab no tiene relación company directa, es offer->company); address colab?->address (Colab puede no tener address); dateText colab?->date; peopleCount colab?->people_count; observations colab?->observations. |
| **CTA** | No. |
| **DASH_URL / config** | No. |
| **Observaciones** | Riesgo: $colab->company y $colab->address, $colab->date, $colab->people_count pueden no existir en modelo Colab (datos suelen estar en collabable). Posible inconsistencia con otros mailables que usan offer->company y collabable. |

---

## ClientCanceledPendingInfluencerEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Dinámico: `La solicitud de collab con {clientName} ha sido cancelada`. |
| **Vista** | View → `emails.client-canceled-pending-influencer` (Blade). |
| **Texto principal** | «Hola {{ $recipient ? $recipient->name : 'Nombre del influencer' }},» / «{{ $clientName }} ha cancelado la solicitud de colaboración.» / Bloque detalles (clientName, dirección, fecha prevista, peopleCount, observaciones) / «Sabemos que estas cosas pueden pasar…» / «Mientras tanto, puedes seguir explorando nuevas colaboraciones desde la app.» / «Gracias por seguir confiando en Nomade» / «El equipo de Nomade Revolution» |
| **Variables** | `$recipient`, `$clientName`, `$address`, `$dateText`, `$peopleCount`, `$observations`, `$collabLink`, `$hasCalendar`. |
| **Fallbacks** | clientName colab?->company?->company (mismo riesgo que Company); address, dateText, peopleCount, observations con fallbacks; collabLink env('DASH_URL') + '/colabs/' + colab->id o '#'. |
| **CTA** | No (collabLink no se muestra como botón en la vista). |
| **DASH_URL / config** | Sí: `env('DASH_URL', '')`. |
| **Observaciones** | Mismo riesgo con $colab->company (debería ser offer->company). |

---

## ClientCanceledAcceptedCompanyEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Dinámico: `Has cancelado la colaboración con {influencerFullName} ({instagramUsername})`. |
| **Vista** | View → `emails.client-canceled-accepted-company` (Blade). |
| **Texto principal** | «❌ Colaboración cancelada» / «Hola {{ $clientName }},» / «Has cancelado la colaboración con {{ $influencerFullName }} ({{ $instagramUsername }}).» / Si hasCalendar: bloque (clientName, dirección, fecha, peopleCount, observaciones) / «No pasa nada — muy pronto recibirás nuevas solicitudes…» / «Si tienes cualquier duda, escríbenos.» / «Gracias por seguir confiando en Nomade,» / «El equipo de Nomade Revolution» |
| **Variables** | `$clientName`, `$influencerFullName`, `$instagramUsername`, `$address`, `$dateText`, `$peopleCount`, `$observations`, `$hasCalendar`. |
| **Fallbacks** | influencerFullName, clientName offer?->company?->company ?? company?->company; address 'Dirección del establecimiento'; dateText, peopleCount, observations por defecto. |
| **CTA** | No. |
| **DASH_URL / config** | No. |
| **Observaciones** | Usa $colab?->address, $colab?->date (atributos posiblemente en collabable). |

---

## ClientCanceledAcceptedInfluencerEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Dinámico: `La colaboración con {clientName} ha sido cancelada`. |
| **Vista** | View → `emails.client-canceled-accepted-influencer` (Blade). |
| **Texto principal** | «❌ Colaboración cancelada» / «Hola {{ $influencerFullName }},» / «{{ $clientName }} ha cancelado la colaboración.» / Si hasCalendar: bloque (clientName, dirección, fecha prevista, peopleCount, observaciones) / Bloque CTA comentado en vista / «Sabemos que estas cosas pueden pasar…» / «Mientras tanto, puedes seguir explorando nuevas colaboraciones desde la app.» / «Gracias por seguir confiando en Nomade,» / «El equipo de Nomade Revolution» |
| **Variables** | `$influencerFullName`, `$clientName`, `$address`, `$dateText`, `$peopleCount`, `$observations`, `$collabLink`, `$hasCalendar`. |
| **Fallbacks** | clientName colab?->company?->company (riesgo); address, dateText, etc. por defecto; collabLink env('DASH_URL') + '/colabs/'. |
| **CTA** | Comentado en vista (no visible). |
| **DASH_URL / config** | Sí: `env('DASH_URL', '')`. |
| **Observaciones** | CTA «Ver colaboración» está comentado en Blade. |

---

## NomadeCanceledPendingClientCompanyEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Dinámico: `Colaboración cancelada con {influencerFullName} (@{instagramUsername})`. (instagramUsername puede llevar ya @ → doble @ posible). |
| **Vista** | View → `emails.nomade-canceled-pending-client-company` (Blade). |
| **Texto principal** | «Hola {{ $recipientName }},» / «La colaboración con {{ $influencerFullName }} – {{ $instagramUsername }} ha sido cancelada.» / Bloque detalles (dateText, address, guests, observations) / CTA comentado / «No te preocupes 😊, seguirás recibiendo nuevas solicitudes…» / «Gracias por seguir colaborando con Nomade,» / «El equipo de Nomade Revolution» / «(Por favor, no respondas directamente a este correo)» |
| **Variables** | `$recipientName`, `$influencerFullName`, `$instagramUsername`, `$dateText`, `$address`, `$guests`, `$observations`, `$collabLink`. |
| **Fallbacks** | recipientName, influencerFullName, instagramUsername '@usuarioInstagram'; dateText '15 de marzo de 2025 a las 21:00'; guests '2'; observations texto; collabLink '#' si no cmsUrl. |
| **CTA** | Comentado en vista. |
| **DASH_URL / config** | Sí: `env('DASH_URL', '')` (collab path '/collab/'). |
| **Observaciones** | Subject concatena '@' + instagramUsername; si account_name ya tiene @, queda @@. |

---

## NomadeCanceledPendingClientInfluencerEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Dinámico: `Collab cancelada con {clientName}`. |
| **Vista** | View → `emails.nomade-canceled-pending-client-influencer` (Blade). |
| **Texto principal** | «Hola {{ $recipientName }},» / «La colaboración con {{ $clientName }} ha sido cancelada.» / Bloque detalles (influencerFullName, instagramUsername, clientName, address, dateText, guests, observations) / CTA comentado / «No pasa nada 😊 Puedes seguir explorando nuevas oportunidades…» / «Gracias por seguir colaborando con Nomade,» / «El equipo de Nomade Revolution» / «(Por favor, no respondas directamente a este correo)» |
| **Variables** | Igual que NomadeCanceledPendingClientCompany + clientName. |
| **Fallbacks** | clientName 'Nombre del cliente'; resto igual. |
| **CTA** | Comentado en vista. |
| **DASH_URL / config** | Sí: `env('DASH_URL', '')`. |
| **Observaciones** | Ninguna. |

---

## InfluencerCanceledPendingNomadeEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Dinámico: `Has cancelado tu solicitud de collab con {clientName}`. (Envelope: destinatario es Nomade pero redacción “Has cancelado”.) |
| **Vista** | View → `emails.influencer-canceled-pending-nomade` (Blade). |
| **Texto principal** | «Hola {{ $recipient ? $recipient->name : 'Nombre del influencer' }},» / «Confirmamos que has cancelado tu solicitud de colaboración con {{ $clientName }}.» / Bloque detalles (clientName, address, dateText, peopleCount, observations) / «No pasa nada 😊 Puedes seguir explorando nuevas oportunidades…» / «Gracias por seguir colaborando con Nomade,» / «El equipo de Nomade Revolution» / «(Por favor, no respondas directamente a este correo)» |
| **Variables** | `$recipient`, `$clientName`, `$address`, `$dateText`, `$peopleCount`, `$observations`. |
| **Fallbacks** | clientName colab?->company?->company (riesgo); address, dateText, peopleCount, observations por defecto; collabLink env('DASH_URL') + '/colabs/'. |
| **CTA** | No (collabLink no se pasa a vista en content()). |
| **DASH_URL / config** | Sí: `env('DASH_URL', '')`. |
| **Observaciones** | Envelope dice “Has cancelado” (perspectiva influencer); el email va a Nomade. $colab->company en constructor. |

---

## NomadeCanceledPendingInfluencerEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Dinámico: `Collab cancelada con {clientName}`. |
| **Vista** | View → `emails.nomade-canceled-pending-influencer` (Blade). |
| **Texto principal** | «Hola {{ $recipientName }},» / «La colaboración con {{ $clientName }} ha sido cancelada.» / Bloque detalles (influencerFullName, instagramUsername, clientName, address, dateText, guests, observations) / CTA comentado / «No pasa nada 😊 Puedes seguir explorando nuevas oportunidades…» / «Gracias por seguir colaborando con Nomade,» / «El equipo de Nomade Revolution» / «(Por favor, no respondas directamente a este correo)» |
| **Variables** | Igual que NomadeCanceledPendingClientInfluencer. |
| **Fallbacks** | Igual. |
| **CTA** | Comentado en vista. |
| **DASH_URL / config** | Sí: `env('DASH_URL', '')`. |
| **Observaciones** | Ninguna. |

---

## CanceledColabEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Dinámico según destinatario: Influencer: `Colaboración cancelada con {companyName}`. Company: `Colaboración cancelada con {influencerDisplayName} – {instagramHandle}`. |
| **Vista** | View → `emails.canceled_colab` (Blade). |
| **Texto principal** | «{{ $greeting }}» / «{{ $text }}» / Si influencer: «Si tienes alguna pregunta… contactar con nosotros o con {{ $companyName }} directamente…» / Si no: «…o con {{ $influencerDisplayName }} – {{ $instagramHandle }} directamente…» / «El equipo de Nomade está disponible para ayudarte a encontrar nuevas colaboraciones pronto.» |
| **Variables** | `$greeting`, `$text`, `$isInfluencer`, `$companyName`, `$influencerDisplayName`, `$instagramHandle`. |
| **Fallbacks** | companyName 'Empresa'; influencerDisplayName e instagramHandle con fallbacks en build(). |
| **CTA** | No. |
| **DASH_URL / config** | No. |
| **Observaciones** | Contenido mínimo; greeting y text construidos en build() según isInfluencer. Vista sí extiende layouts.email. Cierre «El equipo de Nomade» (sin «Revolution»). |

---

## ConfirmedModificationCompanyEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Dinámico: `✅ Has confirmado la modificación en tu colaboración con {influencerFullName}`. |
| **Vista** | View → `emails.confirmed-modification-company` (Blade). |
| **Texto principal** | «✅ Has confirmado la modificación» / «Hola {{ $clientName }},» / «Confirmamos que has aceptado la solicitud de modificación enviada por {{ $influencerFullName }} – {{ $instagramUsername }}.» / «La colaboración ha sido actualizada con los siguientes datos:» / Bloque (influencer, cliente, dirección, Nueva fecha y hora: {{ $date }} a las {{ $time }}, peopleCount, observaciones) / «Puedes consultar todos los detalles desde tu perfil en la app o accediendo directamente al siguiente enlace:» / Botón «Ver colaboración» href="#" / «Gracias por seguir colaborando con Nomade,» / «El equipo de Nomade Revolution» |
| **Variables** | `$clientName`, `$influencerFullName`, `$instagramUsername`, `$address`, `$date`, `$time`, `$peopleCount`, `$observations`. |
| **Fallbacks** | Si !colab: 'Nombre del influencer', 'usuarioInstagram', 'Nombre del cliente', 'Dirección del establecimiento', '15 de marzo de 2025', '21:00', '2', observaciones. |
| **CTA** | Sí pero href="#" (no configurado). |
| **DASH_URL / config** | No. |
| **Observaciones** | Constructor usa $colab->influencer->user (singular) y $colab->company->name; en modelos típicos es users() y offer->company. Riesgo de error si relaciones no existen. Vista CTA con href="#". |

---

## ConfirmedModificationInfluencerEmail

| Campo | Valor |
|-------|--------|
| **Subject** | Dinámico: `✅ Cambio confirmado en tu colaboración con {clientName}`. |
| **Vista** | View → `emails.confirmed-modification-influencer` (Blade). |
| **Texto principal** | «✅ Cambio confirmado» / «Hola {{ $influencerFullName }},» / «¡Tu solicitud de cambio ha sido aceptada! La colaboración con {{ $clientName }} ha sido modificada correctamente.» / «Aquí tienes los nuevos detalles actualizados:» / Bloque (clientName, dirección, Nueva fecha: {{ $date }} a las {{ $time }}, peopleCount, observaciones) / «Puedes revisar todos los detalles desde tu perfil en la app.» / CTA comentado / «Gracias por colaborar con Nomade,» / «El equipo de Nomade Revolution» / «(Por favor, no respondas directamente a este correo)» |
| **Variables** | `$influencerFullName`, `$clientName`, `$address`, `$date`, `$time`, `$peopleCount`, `$observations`. |
| **Fallbacks** | Mismos que ConfirmedModificationCompany. |
| **CTA** | Comentado en vista. |
| **DASH_URL / config** | No. |
| **Observaciones** | Mismo riesgo: $colab->influencer->user, $colab->company->name (relaciones pueden ser users(), offer->company). |

---

## Resumen: DASH_URL / config('app.dash')

| Mailable | Usa DASH_URL | Usa config('app.dash') |
|----------|--------------|------------------------|
| NewColabInfluencerEmail | No | No |
| NewColabNomadeEmail | Sí | No |
| AcceptedColabCompanyEmail | Sí | No |
| ClientAcceptedColabCompanyEmail | Sí | No |
| AcceptedColabInfluencerEmail | No | Sí (pero collabLink null) |
| RejectedColabInfluencerEmail | No | No |
| RejectedColabNomadeEmail | No | No |
| ClientRejectedColabCompanyEmail | Sí | No |
| PendingColabReminder1CompanyEmail | No | Sí |
| PendingColabReminder2CompanyEmail | No | Sí |
| AutoCanceledColabNomadeEmail | Sí | No |
| AutoCanceledColabCompanyEmail | No | No |
| AutoCanceledColabInfluencerEmail | No | Sí |
| ClientCanceledPendingCompanyEmail | No | No |
| ClientCanceledPendingInfluencerEmail | Sí | No |
| ClientCanceledAcceptedCompanyEmail | No | No |
| ClientCanceledAcceptedInfluencerEmail | Sí | No |
| NomadeCanceledPendingClientCompanyEmail | Sí | No |
| NomadeCanceledPendingClientInfluencerEmail | Sí | No |
| InfluencerCanceledPendingNomadeEmail | Sí | No |
| NomadeCanceledPendingInfluencerEmail | Sí | No |
| CanceledColabEmail | No | No |
| ConfirmedModificationCompanyEmail | No | No |
| ConfirmedModificationInfluencerEmail | No | No |

---

## Resumen: CTAs y enlaces rotos / comentados

- **CTA con enlace útil:** NewColabNomadeEmail (CMS), AcceptedColabCompanyEmail (collabLink), ClientAcceptedColabCompanyEmail (collabLink), PendingColabReminder1/2 (collabLink), AutoCanceledColabNomadeEmail (cmsCollabUrl).
- **CTA comentado o href="#":** RejectedColabInfluencerEmail (collabLink null), ClientCanceledAcceptedInfluencerEmail (bloque CTA comentado), NomadeCanceledPendingClientCompany/Influencer y NomadeCanceledPendingInfluencerEmail (CTA comentado), ConfirmedModificationCompanyEmail (href="#").
- **AcceptedColabInfluencerEmail:** collabLink forzado a null en constructor.

---

## Observaciones técnicas globales

- **Branding:** La mayoría cierran con «El equipo de Nomade Revolution»; alguna «Nomade» sin «Revolution». CanceledColabEmail: «El equipo de Nomade».
- **Títulos vista:** accepted-colab-company y client-accepted-colab-company tienen typo «Solcitud de alta».
- **Rutas CMS:** Unos usan `/collab/` (NewColabNomade, Pending reminders, AutoCanceled Nomade, NomadeCanceled*) y otros `/colabs/` (AcceptedColabCompany, ClientAccepted, ClientRejected, ClientCanceledPendingInfluencer, ClientCanceledAcceptedInfluencer). Inconsistencia posible entre dashboard real y mailables.
- **Null-safety:** AcceptedColabCompanyEmail, PendingColabReminder1/2 (build sin guard colab null), ConfirmedModificationCompany/Influencer (acceso a user y company directos) y ClientCanceledPending* (colab->company, colab->address/date) tienen posibles puntos de fallo si colab o relaciones son null.
- **Preview:** ClientAcceptedColabCompanyEmail, ClientRejectedColabCompanyEmail, RejectedColabNomadeEmail usan `emails.preview.empty` cuando faltan datos.
