Add app-specific mail branding and sidebar Support links.
Deploy Ladill Hosting / deploy (push) Successful in 38s
Deploy Ladill Hosting / deploy (push) Successful in 38s
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -200,6 +200,7 @@
|
||||
|
||||
@if ($showSettings)
|
||||
<div class="shrink-0 border-t border-slate-200 px-3 py-3">
|
||||
@include('partials.sidebar-support')
|
||||
<a href="{{ $settingsItem['route'] }}"
|
||||
class="flex items-center gap-3 rounded-lg px-3 py-2 text-sm font-medium transition {{ $settingsItem['active'] ? 'bg-indigo-50 text-indigo-700' : 'text-slate-600 hover:bg-slate-50 hover:text-slate-900' }}">
|
||||
<svg class="h-5 w-5 flex-shrink-0 {{ $settingsItem['active'] ? 'text-indigo-600' : 'text-slate-400' }}" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24">
|
||||
|
||||
@@ -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
|
||||
@@ -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;">
|
||||
© {{ 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>
|
||||
@@ -47,6 +47,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">
|
||||
|
||||
Reference in New Issue
Block a user