Add app-specific mail branding and sidebar Support links.
Deploy Ladill Events / deploy (push) Successful in 28s

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-06-08 20:12:52 +00:00
co-authored by Cursor
parent ca6765b963
commit b38dea33d1
15 changed files with 1030 additions and 0 deletions
@@ -0,0 +1,90 @@
@extends('mail.notifications.layout')
@section('email-header')
@include('mail.partials.brand-header', ['brand' => 'domains'])
@endsection
@section('email-footer')
@include('mail.partials.brand-footer', ['brand' => 'domains'])
@endsection
@section('content')
<div class="highlight-box highlight-box-success">
<p class="highlight-box-text">Domain Verified!</p>
<p class="highlight-box-subtext">{{ $domain->host }} is now active</p>
</div>
<h1 class="email-title">Your Domain is Ready</h1>
<p class="email-text">
Great news! Your domain <strong>{{ $domain->host }}</strong> has been successfully verified
and is now fully active on Ladill.
</p>
<div class="email-details">
<p class="email-details-title">What's Been Set Up</p>
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="padding: 12px 0; border-bottom: 1px solid #e2e8f0;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td width="32" valign="top">
<span style="display: inline-block; width: 24px; height: 24px; background-color: #dcfce7; border-radius: 50%; text-align: center; line-height: 24px; color: #166534;"></span>
</td>
<td>
<strong style="color: #0f172a;">DNS Management</strong><br>
<span style="color: #64748b; font-size: 14px;">Your DNS records are now managed by Ladill</span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td style="padding: 12px 0; border-bottom: 1px solid #e2e8f0;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td width="32" valign="top">
<span style="display: inline-block; width: 24px; height: 24px; background-color: #dcfce7; border-radius: 50%; text-align: center; line-height: 24px; color: #166534;"></span>
</td>
<td>
<strong style="color: #0f172a;">Email Ready</strong><br>
<span style="color: #64748b; font-size: 14px;">You can now create professional email addresses</span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td style="padding: 12px 0;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td width="32" valign="top">
<span style="display: inline-block; width: 24px; height: 24px; background-color: #dbeafe; border-radius: 50%; text-align: center; line-height: 24px; color: #1e40af;"></span>
</td>
<td>
<strong style="color: #0f172a;">SSL Certificate</strong><br>
<span style="color: #64748b; font-size: 14px;">Being provisioned automatically (usually within minutes)</span>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<p class="email-text">
<strong>What's next?</strong> You can now:
</p>
<ul style="color: #475569; font-size: 16px; line-height: 1.8; padding-left: 20px;">
<li>Create email addresses like <strong>hello@{{ $domain->host }}</strong></li>
<li>Connect this domain to your website</li>
<li>Manage DNS records from your dashboard</li>
</ul>
<p style="text-align: center; margin-top: 32px;">
<a href="{{ $manageUrl }}" class="email-button">Manage Domain</a>
<br>
<a href="{{ $emailUrl }}" class="email-button-secondary" style="margin-top: 12px;">Create Email Address</a>
</p>
@endsection
@@ -1,5 +1,13 @@
@extends('mail.notifications.layout')
@section('email-header')
@include('mail.partials.brand-header', ['brand' => 'events'])
@endsection
@section('email-footer')
@include('mail.partials.brand-footer', ['brand' => 'events'])
@endsection
@section('content')
<div class="highlight-box highlight-box-success">
<p class="highlight-box-text">📋 Programme Outline</p>
@@ -0,0 +1,64 @@
@extends('mail.notifications.layout')
@section('email-header')
@include('mail.partials.brand-header', ['brand' => 'hosting'])
@endsection
@section('email-footer')
@include('mail.partials.brand-footer', ['brand' => 'hosting'])
@endsection
@section('content')
<h1 class="email-title">Your hosting is now active! 🖥️</h1>
<p class="email-text">
Your hosting plan has been activated and is ready to use. You can now start uploading files,
creating databases, and hosting your websites.
</p>
<div class="highlight-box">
<p class="highlight-box-text">{{ $planName }}</p>
<p class="highlight-box-subtext">Your hosting is live and ready</p>
</div>
<div class="email-details">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="padding: 10px 0; border-bottom: 1px solid #e2e8f0;">
<span style="color: #64748b; font-size: 14px;">Plan</span><br>
<strong style="color: #0f172a;">{{ $planName }}</strong>
</td>
</tr>
@if (!empty($domainName))
<tr>
<td style="padding: 10px 0; border-bottom: 1px solid #e2e8f0;">
<span style="color: #64748b; font-size: 14px;">Domain</span><br>
<strong style="color: #0f172a;">{{ $domainName }}</strong>
</td>
</tr>
@endif
<tr>
<td style="padding: 10px 0; border-bottom: 1px solid #e2e8f0;">
<span style="color: #64748b; font-size: 14px;">Activation Date</span><br>
<strong style="color: #0f172a;">{{ $activationDate }}</strong>
</td>
</tr>
<tr>
<td style="padding: 10px 0;">
<span style="color: #64748b; font-size: 14px;">Status</span><br>
<span class="status-badge status-success">Active</span>
</td>
</tr>
</table>
</div>
<p style="text-align: center;">
<a href="{{ $manageUrl }}" class="email-button">Manage Hosting</a>
</p>
<div class="email-divider"></div>
<p class="email-text" style="font-size: 14px;">
<strong>Getting started:</strong> Access your control panel to manage files, databases, email accounts, and more.
</p>
@endsection
@@ -0,0 +1,47 @@
@extends('mail.notifications.layout')
@section('email-header')
@include('mail.partials.brand-header', ['brand' => 'hosting'])
@endsection
@section('email-footer')
@include('mail.partials.brand-footer', ['brand' => 'hosting'])
@endsection
@section('content')
<h1 style="margin: 0 0 16px; font-size: 24px; font-weight: 700; color: #0f172a;">You were added to a hosting team</h1>
<p style="margin: 0 0 16px; color: #475569; font-size: 15px; line-height: 1.7;">
{{ $ownerName }} granted you developer access to the following Ladill hosting environment{{ count($accountLabels) === 1 ? '' : 's' }}:
</p>
<ul style="margin: 0 0 20px; padding-left: 20px; color: #0f172a; font-size: 15px; line-height: 1.8;">
@foreach ($accountLabels as $label)
<li>{{ $label }}</li>
@endforeach
</ul>
<p style="margin: 0 0 16px; color: #475569; font-size: 15px; line-height: 1.7;">
You now have full access to the hosting panel for {{ count($accountLabels) === 1 ? 'this account' : 'these accounts' }} manage files, domains, databases, SSL, cron jobs, and more.
</p>
<p style="margin: 0 0 16px; color: #475569; font-size: 15px; line-height: 1.7;">
To connect via SSH or SFTP, add your public key from the hosting panel <strong>Settings</strong> page after signing in.
</p>
@if ($setupUrl)
<div style="margin: 24px 0;">
<a href="{{ $setupUrl }}" style="display: inline-block; background: #4f46e5; color: #ffffff; text-decoration: none; font-weight: 600; padding: 12px 18px; border-radius: 10px;">Set your password</a>
</div>
<p style="margin: 0 0 16px; color: #64748b; font-size: 14px; line-height: 1.7;">
Use the button above to activate your account before signing in.
</p>
@else
<div style="margin: 24px 0;">
<a href="{{ $loginUrl }}" style="display: inline-block; background: #4f46e5; color: #ffffff; text-decoration: none; font-weight: 600; padding: 12px 18px; border-radius: 10px;">Sign in to Ladill</a>
</div>
@endif
<p style="margin: 0; color: #64748b; font-size: 14px; line-height: 1.7;">
After signing in, open your dashboard here: <a href="{{ $dashboardUrl }}" style="color: #4f46e5;">{{ $dashboardUrl }}</a>
</p>
@endsection
@@ -0,0 +1,56 @@
@extends('mail.notifications.layout')
@section('email-header')
@include('mail.partials.brand-header', ['brand' => 'hosting'])
@endsection
@section('email-footer')
@include('mail.partials.brand-footer', ['brand' => 'hosting'])
@endsection
@section('content')
<div class="highlight-box highlight-box-warning">
<p class="highlight-box-text">Hosting Expiring Soon</p>
<p class="highlight-box-subtext">{{ $account->primary_domain ?: $account->username }}</p>
</div>
<h1 class="email-title">Your Hosting Plan is Expiring Soon</h1>
<p class="email-text">
Your hosting account for <strong>{{ $account->primary_domain ?: $account->username }}</strong> will expire soon.
Renew before the expiry date to keep your website online and avoid service interruption.
</p>
<div class="email-details">
<p class="email-details-title">Account Details</p>
<div class="email-details-row">
<p class="email-details-label">Domain / Account</p>
<p class="email-details-value">{{ $account->primary_domain ?: $account->username }}</p>
</div>
<div class="email-details-row">
<p class="email-details-label">Expiration Date</p>
<p class="email-details-value">{{ $account->expires_at?->format('F j, Y') ?? 'N/A' }}</p>
</div>
<div class="email-details-row">
<p class="email-details-label">Days Remaining</p>
<p class="email-details-value">
<span class="status-badge status-warning">{{ $daysRemaining }} days</span>
</p>
</div>
</div>
<p class="email-text">
<strong>What happens if hosting expires?</strong><br>
Your website will go offline. Your files are kept for a grace period, but the site will not be accessible until you renew.
</p>
<p style="text-align: center; margin-top: 24px;">
<a href="{{ $renewUrl }}" class="email-button">Renew Hosting</a>
</p>
<div class="email-divider"></div>
<p class="email-text-sm">
If you have wallet auto-renew enabled and sufficient balance, your plan may renew automatically on the expiry date.
</p>
@endsection
@@ -0,0 +1,59 @@
@extends('mail.notifications.layout')
@section('email-header')
@include('mail.partials.brand-header', ['brand' => 'hosting'])
@endsection
@section('email-footer')
@include('mail.partials.brand-footer', ['brand' => 'hosting'])
@endsection
@section('content')
<div class="highlight-box highlight-box-warning">
<p class="highlight-box-text">Account Suspended</p>
<p class="highlight-box-subtext">Action Required</p>
</div>
<h1 class="email-title">Your Hosting Account Has Been Suspended</h1>
<p class="email-text">
We regret to inform you that your hosting account has been suspended. This may be due to an overdue payment, terms of service violation, or other issues that require your attention.
</p>
<div class="email-details">
<p class="email-details-title">Account Details</p>
<div class="email-details-row">
<p class="email-details-label">Account</p>
<p class="email-details-value">{{ $account->domain ?? $account->name ?? 'Hosting Account' }}</p>
</div>
<div class="email-details-row">
<p class="email-details-label">Suspended On</p>
<p class="email-details-value">{{ $account->suspended_at?->format('F j, Y') ?? now()->format('F j, Y') }}</p>
</div>
@if($reason ?? null)
<div class="email-details-row">
<p class="email-details-label">Reason</p>
<p class="email-details-value">{{ $reason }}</p>
</div>
@endif
<div class="email-details-row">
<p class="email-details-label">Status</p>
<p class="email-details-value"><span class="status-badge status-warning">Suspended</span></p>
</div>
</div>
<p class="email-text">
<strong>What happens next?</strong><br>
Your website and services are currently offline. To restore access, please resolve the issue by logging into your dashboard or contacting our support team.
</p>
<p style="text-align: center; margin-top: 24px;">
<a href="{{ $dashboardUrl ?? config('app.url') . '/dashboard' }}" class="email-button">Go to Dashboard</a>
</p>
<div class="email-divider"></div>
<p class="email-text-sm">
If you believe this suspension was made in error, please contact our support team immediately. We're here to help resolve this issue as quickly as possible.
</p>
@endsection
@@ -0,0 +1,404 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>{{ $subject ?? 'Ladill Notification' }}</title>
<!--[if mso]>
<noscript>
<xml>
<o:OfficeDocumentSettings>
<o:PixelsPerInch>96</o:PixelsPerInch>
</o:OfficeDocumentSettings>
</xml>
</noscript>
<![endif]-->
<style>
body {
margin: 0;
padding: 0;
width: 100%;
background-color: #f8fafc;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.email-wrapper {
width: 100%;
background-color: #f8fafc;
padding: 48px 0;
}
.email-container {
max-width: 600px;
margin: 0 auto;
background-color: #ffffff;
border-radius: 16px;
overflow: hidden;
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
}
.email-header {
background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
padding: 32px 40px;
text-align: center;
}
.email-logo {
max-height: 28px;
width: auto;
}
.email-logo-transfer {
max-height: 24px;
width: auto;
}
.email-icon-header {
background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
padding: 48px 40px;
text-align: center;
}
.email-icon {
width: 64px;
height: 64px;
background-color: rgba(255, 255, 255, 0.15);
border-radius: 16px;
display: inline-flex;
align-items: center;
justify-content: center;
margin-bottom: 16px;
}
.email-icon svg {
width: 32px;
height: 32px;
color: #ffffff;
}
.email-header-title {
color: #ffffff;
font-size: 24px;
font-weight: 700;
margin: 0;
letter-spacing: -0.025em;
}
.email-header-subtitle {
color: rgba(255, 255, 255, 0.8);
font-size: 14px;
margin: 8px 0 0 0;
}
.email-body {
padding: 40px;
}
.email-title {
font-size: 24px;
font-weight: 700;
color: #0f172a;
margin: 0 0 16px 0;
line-height: 1.3;
letter-spacing: -0.025em;
}
.email-text {
font-size: 16px;
line-height: 1.7;
color: #475569;
margin: 0 0 16px 0;
}
.email-text-sm {
font-size: 14px;
line-height: 1.6;
color: #64748b;
margin: 0 0 12px 0;
}
.email-button {
display: inline-block;
background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
color: #ffffff !important;
text-decoration: none;
padding: 14px 32px;
border-radius: 10px;
font-size: 14px;
font-weight: 600;
margin: 24px 0;
box-shadow: 0 4px 14px 0 rgba(79, 70, 229, 0.4);
}
.email-button-secondary {
display: inline-block;
background-color: #f1f5f9;
color: #0f172a !important;
text-decoration: none;
padding: 12px 24px;
border-radius: 8px;
font-size: 14px;
font-weight: 600;
margin: 8px 4px;
}
.email-divider {
height: 1px;
background: linear-gradient(90deg, transparent, #e2e8f0, transparent);
margin: 32px 0;
}
.email-details {
background-color: #f8fafc;
border-radius: 12px;
padding: 24px;
margin: 24px 0;
border: 1px solid #e2e8f0;
}
.email-details-title {
font-size: 12px;
font-weight: 600;
color: #64748b;
text-transform: uppercase;
letter-spacing: 0.05em;
margin: 0 0 16px 0;
}
.email-details-row {
padding: 12px 0;
border-bottom: 1px solid #e2e8f0;
}
.email-details-row:last-child {
border-bottom: none;
padding-bottom: 0;
}
.email-details-row:first-of-type {
padding-top: 0;
}
.email-details-label {
font-size: 13px;
color: #64748b;
margin: 0 0 4px 0;
}
.email-details-value {
font-size: 15px;
font-weight: 600;
color: #0f172a;
margin: 0;
word-break: break-all;
}
.email-card {
background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
border-radius: 12px;
padding: 24px;
margin: 24px 0;
border: 1px solid #e2e8f0;
}
.email-card-icon {
width: 48px;
height: 48px;
background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
border-radius: 12px;
display: inline-flex;
align-items: center;
justify-content: center;
margin-bottom: 16px;
}
.email-card-icon svg {
width: 24px;
height: 24px;
color: #ffffff;
}
.email-footer {
background-color: #0f172a;
padding: 40px;
text-align: center;
}
.email-footer-text {
font-size: 13px;
color: #94a3b8;
margin: 0 0 8px 0;
line-height: 1.6;
}
.email-footer-link {
color: #a5b4fc;
text-decoration: none;
}
.email-footer-link:hover {
text-decoration: underline;
}
.email-footer-links {
margin: 20px 0;
}
.email-footer-links a {
color: #94a3b8;
text-decoration: none;
font-size: 13px;
margin: 0 12px;
}
.email-footer-links a:hover {
color: #ffffff;
}
.highlight-box {
background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
border-radius: 12px;
padding: 28px;
margin: 24px 0;
text-align: center;
}
.highlight-box-text {
color: #ffffff;
font-size: 20px;
font-weight: 700;
margin: 0;
letter-spacing: -0.025em;
}
.highlight-box-subtext {
color: rgba(255, 255, 255, 0.85);
font-size: 14px;
margin: 8px 0 0 0;
}
.highlight-box-success {
background: linear-gradient(135deg, #059669 0%, #10b981 100%);
}
.highlight-box-warning {
background: linear-gradient(135deg, #d97706 0%, #f59e0b 100%);
}
.highlight-box-info {
background: linear-gradient(135deg, #0284c7 0%, #0ea5e9 100%);
}
.status-badge {
display: inline-block;
padding: 6px 14px;
border-radius: 20px;
font-size: 12px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.status-success {
background-color: #dcfce7;
color: #166534;
}
.status-warning {
background-color: #fef3c7;
color: #92400e;
}
.status-info {
background-color: #dbeafe;
color: #1e40af;
}
.status-error {
background-color: #fee2e2;
color: #991b1b;
}
.checklist-item {
display: flex;
align-items: flex-start;
padding: 12px 0;
border-bottom: 1px solid #e2e8f0;
}
.checklist-item:last-child {
border-bottom: none;
}
.checklist-icon {
width: 24px;
height: 24px;
background-color: #dcfce7;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
margin-right: 12px;
flex-shrink: 0;
}
.checklist-icon svg {
width: 14px;
height: 14px;
color: #166534;
}
.checklist-content {
flex: 1;
}
.checklist-title {
font-size: 14px;
font-weight: 600;
color: #0f172a;
margin: 0 0 2px 0;
}
.checklist-desc {
font-size: 13px;
color: #64748b;
margin: 0;
}
.code-block {
background-color: #1e293b;
border-radius: 8px;
padding: 16px 20px;
margin: 16px 0;
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
font-size: 14px;
color: #e2e8f0;
word-break: break-all;
}
.amount-large {
font-size: 36px;
font-weight: 700;
color: #0f172a;
letter-spacing: -0.025em;
}
.amount-currency {
font-size: 18px;
color: #64748b;
font-weight: 500;
}
@media only screen and (max-width: 620px) {
.email-wrapper {
padding: 24px 16px;
}
.email-container {
border-radius: 12px;
}
.email-header,
.email-icon-header {
padding: 24px;
}
.email-body,
.email-footer {
padding: 28px 24px;
}
.email-title {
font-size: 20px;
}
.email-header-title {
font-size: 20px;
}
.amount-large {
font-size: 28px;
}
}
</style>
</head>
<body>
<div class="email-wrapper">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center">
<div class="email-container">
{{-- Header with Logo --}}
<div class="email-header">
@hasSection('email-header')
@yield('email-header')
@else
@include('mail.partials.brand-header', ['brand' => 'ladill'])
@endif
</div>
@hasSection('icon-header')
@yield('icon-header')
@endif
{{-- Email Body --}}
<div class="email-body">
@yield('content')
</div>
{{-- Footer --}}
<div class="email-footer">
@hasSection('email-footer')
@yield('email-footer')
@else
@include('mail.partials.brand-footer', ['brand' => 'ladill'])
@endif
</div>
</div>
</td>
</tr>
</table>
</div>
</body>
</html>
@@ -0,0 +1,64 @@
@extends('mail.notifications.layout')
@section('email-header')
@include('mail.partials.brand-header', ['brand' => 'hosting'])
@endsection
@section('email-footer')
@include('mail.partials.brand-footer', ['brand' => 'hosting'])
@endsection
@section('content')
<div class="highlight-box highlight-box-warning">
<p class="highlight-box-text">⚠️ SSL Certificate Expiring</p>
<p class="highlight-box-subtext">{{ $daysUntilExpiry }} days remaining</p>
</div>
<h1 class="email-title">Action May Be Required</h1>
<p class="email-text">
Your SSL certificate for <strong>{{ $domain->host }}</strong> is expiring soon.
While we attempt to auto-renew certificates, please verify your domain is still properly configured.
</p>
<div class="email-details">
<p class="email-details-title">Certificate Details</p>
<div class="email-details-row">
<p class="email-details-label">Domain</p>
<p class="email-details-value">{{ $domain->host }}</p>
</div>
<div class="email-details-row">
<p class="email-details-label">Status</p>
<p class="email-details-value"><span class="status-badge status-warning">Expiring Soon</span></p>
</div>
<div class="email-details-row">
<p class="email-details-label">Expires</p>
<p class="email-details-value">{{ $expiresAt ? $expiresAt->format('F j, Y') : 'Unknown' }}</p>
</div>
<div class="email-details-row">
<p class="email-details-label">Days Remaining</p>
<p class="email-details-value">{{ $daysUntilExpiry }} days</p>
</div>
</div>
<p class="email-text">
<strong>What you should check:</strong>
</p>
<ul style="color: #475569; font-size: 16px; line-height: 1.8; padding-left: 20px;">
<li>Ensure your domain's nameservers still point to Ladill</li>
<li>Verify your domain hasn't expired at your registrar</li>
<li>Check that your website is accessible</li>
</ul>
<p style="text-align: center; margin-top: 32px;">
<a href="{{ $manageUrl }}" class="email-button">Check Domain Settings</a>
</p>
<div class="email-divider"></div>
<p class="email-text-sm">
If everything looks correct, no action is needed. We'll automatically attempt to renew your certificate.
If renewal fails, we'll notify you immediately.
</p>
@endsection
@@ -0,0 +1,64 @@
@extends('mail.notifications.layout')
@section('email-header')
@include('mail.partials.brand-header', ['brand' => 'hosting'])
@endsection
@section('email-footer')
@include('mail.partials.brand-footer', ['brand' => 'hosting'])
@endsection
@section('content')
<div class="highlight-box highlight-box-success">
<p class="highlight-box-text">🔒 SSL Certificate Active</p>
<p class="highlight-box-subtext">{{ $domain->host }} is now secure</p>
</div>
<h1 class="email-title">Your Site is Secure</h1>
<p class="email-text">
Your SSL certificate for <strong>{{ $domain->host }}</strong> has been successfully provisioned.
Your website is now accessible via HTTPS and visitors will see the secure padlock icon.
</p>
<div class="email-details">
<p class="email-details-title">Certificate Details</p>
<div class="email-details-row">
<p class="email-details-label">Domain</p>
<p class="email-details-value">{{ $domain->host }}</p>
</div>
<div class="email-details-row">
<p class="email-details-label">Status</p>
<p class="email-details-value"><span class="status-badge status-success">Active</span></p>
</div>
<div class="email-details-row">
<p class="email-details-label">Expires</p>
<p class="email-details-value">{{ $expiresAt ? $expiresAt->format('F j, Y') : 'Auto-renewing' }}</p>
</div>
<div class="email-details-row">
<p class="email-details-label">Secure URL</p>
<p class="email-details-value"><a href="{{ $websiteUrl }}" style="color: #4f46e5;">{{ $websiteUrl }}</a></p>
</div>
</div>
<p class="email-text">
<strong>What this means:</strong>
</p>
<ul style="color: #475569; font-size: 16px; line-height: 1.8; padding-left: 20px;">
<li>All traffic to your site is encrypted</li>
<li>Visitors see a secure padlock in their browser</li>
<li>Better search engine rankings (Google prefers HTTPS)</li>
<li>Certificate auto-renews before expiry</li>
</ul>
<p style="text-align: center; margin-top: 32px;">
<a href="{{ $websiteUrl }}" class="email-button">Visit Your Secure Site</a>
</p>
<div class="email-divider"></div>
<p class="email-text-sm">
Your SSL certificate will automatically renew before it expires. No action is required from you.
</p>
@endsection
@@ -0,0 +1,20 @@
@php
$brandKey = $brand ?? 'ladill';
$brandConfig = config("mail_brands.brands.{$brandKey}", config('mail_brands.brands.ladill'));
$appBase = rtrim((string) ($brandConfig['app_url'] ?? config('app.url')), '/');
$dashboardPath = $brandConfig['dashboard_path'] ?? '/';
$accountBase = rtrim((string) ($brandConfig['account_url'] ?? config('mail_brands.account_url', 'https://account.ladill.com')), '/');
$supportUrl = $brandConfig['support_url'] ?? $accountBase.'/support-tickets';
$homeLabel = $brandConfig['home_label'] ?? parse_url($appBase, PHP_URL_HOST) ?: 'ladill.com';
@endphp
<p class="email-footer-text">
You're receiving this email because you have {{ $brandConfig['footer_account'] ?? 'an account with Ladill' }}.
</p>
<div class="email-footer-links">
<a href="{{ $appBase }}{{ $dashboardPath }}">Dashboard</a>
<a href="{{ $supportUrl }}">Support</a>
<a href="{{ $appBase }}">{{ $homeLabel }}</a>
</div>
<p class="email-footer-text" style="margin-top: 20px; color: #64748b;">
&copy; {{ date('Y') }} Ladill Technologies. All rights reserved.
</p>
@@ -0,0 +1,7 @@
@php
$brandKey = $brand ?? 'ladill';
$brandConfig = config("mail_brands.brands.{$brandKey}", config('mail_brands.brands.ladill'));
$assetBase = rtrim((string) ($brandConfig['asset_url'] ?? config('app.url')), '/');
$logoClass = trim((string) ($brandConfig['logo_class'] ?? 'email-logo'));
@endphp
<img src="{{ $assetBase }}/images/logo/{{ $brandConfig['logo'] }}" alt="{{ $brandConfig['name'] }}" class="{{ $logoClass }}">
@@ -0,0 +1,23 @@
@php
$useInternal = $internal ?? false;
if ($useInternal) {
$supportUrl = route('user.support-tickets.index');
$openExternal = false;
} else {
$supportUrl = function_exists('ladill_account_url')
? ladill_account_url('/support-tickets')
: 'https://'.config('app.account_domain', 'account.ladill.com').'/support-tickets';
$openExternal = true;
}
@endphp
<a href="{{ $supportUrl }}"
@if($openExternal) target="_blank" rel="noopener" @endif
class="group flex items-center gap-3 rounded-lg px-3 py-2 text-[13px] text-slate-600 transition hover:bg-slate-50 hover:text-slate-900">
<svg class="h-[18px] w-[18px] shrink-0 text-slate-400 group-hover:text-slate-500" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" d="M16.712 4.33a9.027 9.027 0 0 1 1.652 1.306c.51.51.944 1.064 1.306 1.652M16.712 4.33l-3.448 4.138m3.448-4.138a9.014 9.014 0 0 0-9.424 0M19.67 7.288l-4.138 3.448m4.138-3.448a9.014 9.014 0 0 1 0 9.424m-4.138-5.976a3.736 3.736 0 0 0-.88-1.388 3.737 3.737 0 0 0-1.388-.88m2.268 2.268a3.765 3.765 0 0 1 0 2.528m-2.268-4.796a3.765 3.765 0 0 0-2.528 0m4.796 4.796c-.181.506-.475.982-.88 1.388a3.736 3.736 0 0 1-1.388.88m2.268-2.268 4.138 3.448m0 0a9.027 9.027 0 0 1-1.306 1.652c-.51.51-1.064.944-1.652 1.306m0 0-3.448-4.138m3.448 4.138a9.014 9.014 0 0 1-9.424 0m5.976-4.138a3.765 3.765 0 0 1-2.528 0m0 0a3.736 3.736 0 0 1-1.388-.88 3.737 3.737 0 0 1-.88-1.388m2.268 2.268L7.288 19.67m0 0a9.024 9.024 0 0 1-1.652-1.306 9.027 9.027 0 0 1-1.306-1.652m0 0 4.138-3.448M4.33 16.712a9.014 9.014 0 0 1 0-9.424m4.138 5.976a3.765 3.765 0 0 1 0-2.528m0 0c.181-.506.475-.982.88-1.388a3.736 3.736 0 0 1 1.388-.88m-2.268 2.268L4.33 7.288m6.406 1.18L7.288 4.33m0 0a9.024 9.024 0 0 0-1.652 1.306A9.025 9.025 0 0 0 4.33 7.288"/>
</svg>
<span class="flex-1 truncate">Support</span>
@if($openExternal)
<span class="text-[10px] text-slate-400" aria-hidden="true"></span>
@endif
</a>
@@ -45,6 +45,7 @@
</nav>
<div class="shrink-0 border-t border-slate-100 px-3 py-3">
@include('partials.sidebar-support')
<a href="{{ route('account.settings') }}"
class="group flex items-center gap-3 rounded-lg px-3 py-2 text-[13px] transition {{ request()->routeIs('account.settings') ? 'bg-indigo-50 text-indigo-700 font-semibold' : 'text-slate-600 hover:bg-slate-50 hover:text-slate-900' }}">
<svg class="h-[18px] w-[18px] shrink-0 {{ request()->routeIs('account.settings') ? 'text-indigo-600' : 'text-slate-400' }}" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">