{{-- Email theme — Blade-compiled CSS so the accent reads from `.env` via `config('dashboard.theme.*')`. Swapping DASHBOARD_ACCENT_LIGHT reskins the email alongside the dashboard UI. Colors are run through `email_safe_color()` so OKLCH values from `.env` (which Gmail/Outlook silently strip) are converted to hex on the server before reaching the recipient. Hex/rgb inputs pass through unchanged. Many mail clients can't run @media (prefers-color-scheme: dark) reliably, so we ship only the light theme here. Colors are *inlined* by Laravel (CssToInlineStyles) before sending, which strips classes — keep selectors simple (no descendant chains beyond two levels) so the inliner can match. --}} @php $accent = email_safe_color(config('dashboard.theme.accent_light')); $accentForeground = email_safe_color(config('dashboard.theme.accent_foreground_light')); @endphp /* Base */ body, body *:not(html):not(style):not(br):not(tr):not(code) { box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; position: relative; } body { -webkit-text-size-adjust: none; background-color: #f6f7fb; color: #4b5468; height: 100%; line-height: 1.55; margin: 0; padding: 0; width: 100% !important; } p, ul, ol, blockquote { line-height: 1.55; text-align: start; } a { color: {{ $accent }}; } a img { border: none; } /* Typography */ h1 { color: #0f172a; font-size: 28px; font-weight: 700; margin-top: 0; margin-bottom: 8px; text-align: start; letter-spacing: -0.015em; line-height: 1.15; } h2 { color: #0f172a; font-size: 18px; font-weight: 600; margin-top: 0; text-align: start; } h3 { color: #0f172a; font-size: 15px; font-weight: 600; margin-top: 0; text-align: start; } p { font-size: 15px; line-height: 1.65em; margin-top: 0; text-align: start; color: #4b5468; } p.sub { font-size: 12px; } img { max-width: 100%; } /* Layout */ .wrapper { -premailer-cellpadding: 0; -premailer-cellspacing: 0; -premailer-width: 100%; background-color: #f6f7fb; margin: 0; padding: 0; width: 100%; } .content { -premailer-cellpadding: 0; -premailer-cellspacing: 0; -premailer-width: 100%; margin: 0; padding: 0; width: 100%; } /* Brand chip — mirrors .dash-auth-chip on the auth pages. Rendered inside the message body via x-mail::chip so it sits at the top-start of the card, indented by .content-cell padding. */ .chip { margin: 0 0 20px; } .chip-cell { color: {{ $accent }}; font-size: 11px; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; background-color: #eef0fb; padding: 7px 14px; border-radius: 999px; border: 1px solid #dee2f2; line-height: 1; text-align: start; white-space: nowrap; } .brand-spark { display: inline-block; vertical-align: -2px; margin-right: 6px; fill: {{ $accent }}; } /* The original header table slot — left empty by message.blade.php since the chip moved into the body — but keep a tiny gap above the card for breathing room. */ .header { padding: 16px 0 0; } .logo { height: 56px; margin-top: 0; margin-bottom: 0; max-height: 56px; width: auto; } /* Divider — accent pill + fading line, mirrors auth's animated divider */ .divider { -premailer-cellpadding: 0; -premailer-cellspacing: 0; -premailer-width: 100%; margin: 14px 0 22px; width: 100%; } .divider-bar { width: 48px; height: 4px; background-color: {{ $accent }}; border-radius: 999px; display: block; line-height: 4px; font-size: 0; } .divider-line { height: 1px; background-color: #e6e8f0; width: 100%; display: block; line-height: 1px; font-size: 0; } /* Body */ .body { -premailer-cellpadding: 0; -premailer-cellspacing: 0; -premailer-width: 100%; background-color: #f6f7fb; border-bottom: 0; border-top: 0; margin: 0; padding: 0; width: 100%; } .inner-body { -premailer-cellpadding: 0; -premailer-cellspacing: 0; -premailer-width: 600px; background-color: #ffffff; border-color: #e6e8f0; border-radius: 18px; border-width: 1px; box-shadow: 0 14px 40px -22px rgba(63, 92, 150, 0.22), 0 4px 10px -2px rgba(15, 23, 42, 0.04); margin: 0 auto; padding: 0; width: 600px; } .inner-body a { word-break: break-all; } /* Subcopy */ .subcopy { border-top: 1px solid #e6e8f0; margin-top: 28px; padding-top: 24px; } .subcopy p { font-size: 13px; color: #6b7686; } /* Footer */ .footer { -premailer-cellpadding: 0; -premailer-cellspacing: 0; -premailer-width: 600px; margin: 0 auto; padding: 16px 0 32px; text-align: center; width: 600px; } .footer p { color: #95a0b5; font-size: 12px; text-align: center; } .footer a { color: #6b7686; text-decoration: underline; } /* Tables */ .table table { -premailer-cellpadding: 0; -premailer-cellspacing: 0; -premailer-width: 100%; margin: 30px auto; width: 100%; } .table th { border-bottom: 1px solid #e6e8f0; margin: 0; padding-bottom: 8px; } .table td { color: #4b5468; font-size: 15px; line-height: 18px; margin: 0; padding: 10px 0; } .content-cell { max-width: 100vw; padding: 38px 36px; } /* Action button — accent gradient, rounded pill */ .action { -premailer-cellpadding: 0; -premailer-cellspacing: 0; -premailer-width: 100%; margin: 32px auto; padding: 0; text-align: center; width: 100%; float: unset; } .button { -webkit-text-size-adjust: none; border-radius: 999px; color: {{ $accentForeground }}; display: inline-block; overflow: hidden; text-decoration: none; font-weight: 600; font-size: 14px; letter-spacing: 0.02em; } /* Outlook strips CSS gradients, so the borders + background-color stay solid accent. Clients that support gradients also see the inline background-image on the set below (see button.blade.php). */ .button-blue, .button-primary { background-color: {{ $accent }}; border-bottom: 14px solid {{ $accent }}; border-left: 28px solid {{ $accent }}; border-right: 28px solid {{ $accent }}; border-top: 14px solid {{ $accent }}; } .button-green, .button-success { background-color: #16a34a; border-bottom: 12px solid #16a34a; border-left: 24px solid #16a34a; border-right: 24px solid #16a34a; border-top: 12px solid #16a34a; } .button-red, .button-error { background-color: #dc2626; border-bottom: 12px solid #dc2626; border-left: 24px solid #dc2626; border-right: 24px solid #dc2626; border-top: 12px solid #dc2626; } /* Panels */ .panel { border-left: {{ $accent }} solid 4px; margin: 24px 0; border-radius: 0 8px 8px 0; overflow: hidden; } .panel-content { background-color: #f6f7fb; color: #4b5468; padding: 16px; } .panel-content p { color: #4b5468; } .panel-item { padding: 0; } .panel-item p:last-of-type { margin-bottom: 0; padding-bottom: 0; } /* Utilities */ .break-all { word-break: break-all; }