{{-- Group menu --}}
{{-- Active group form --}}
@if ($tab === 'website')

{{ __('General') }}

@error('website_name')

{{ $message }}

@enderror

{{ __('The name of your whole system. Like WordPress\'s Site Title it appears everywhere — the browser tab, the admin sidebar, the public landing header and your emails — so changing it here updates the site.') }}

@error('support_email')

{{ $message }}

@enderror

{{ __('Shown to clients in the ticket panel and footer. Leave blank to hide it.') }}

{{ __('Used for order timestamps, reports and scheduling.') }}

{{ __('How dates are displayed across the panel.') }}

@elseif ($tab === 'email') {{-- Outgoing mail (SMTP). Drives welcome, password-reset and billing emails. The provider preset fills host + port; the secret is stored encrypted and shown masked. --}}

{{ __('Email (SMTP)') }}

{{ __('Used to send welcome, password recovery and billing emails to your users.') }}

{{ $mailConfigured ? __('Configured') : __('Not configured') }}
@error('email_host')

{{ $message }}

@enderror
@error('email_port')

{{ $message }}

@enderror
{{-- A secret, NOT type=password: -webkit-text-security masks the characters without inviting Chrome's password manager to save or autofill an SMTP key across the site. --}}
@error('email_from_email')

{{ $message }}

@enderror
@php $ph = $mailProviders[$email_provider] ?? null; @endphp @if ($ph && ($ph['user_hint'] || $ph['note']))
{{ $ph['user_hint'] ?: $ph['note'] }}
@endif
@error('email_test_to')

{{ $message }}

@enderror

{{ __('Customise the subject and text of each automated email in') }} {{ __('Email templates') }}

@elseif ($tab === 'defaults')

{{ __('Default setting') }}

@elseif ($tab === 'currency')

{{ __('Currency') }}

{{ __('Configure the base currency, display format, markup defaults and the automatic converter used during catalogue syncs.') }}

{{-- ================================================ SECTION 1 — Currency Configuration ================================================ --}}

{{ __('Currency configuration') }}

{{-- Currency code --}}

{{ __('PayPal payments only support these currencies: AUD, BRL, CAD, CZK, DKK, EUR, HKD, HUF, ILS, JPY, MYR, MXN, TWD, NZD, NOK, PHP, PLN, GBP, SGD, SEK, CHF, THB, USD.') }}

@error('base_currency')

{{ $message }}

@enderror

{{ __('The ledger is stored in this currency. It cannot be changed once transactions exist.') }} {{ __('Manage currencies →') }}

{{-- Format row: symbol (read-only), thousands sep, decimal sep, decimals --}}
{{-- Symbol — read from the currencies table, not editable here --}}
@php $sym = $currencies->firstWhere('code', $base_currency)?->symbol ?? '$'; @endphp

{{ __('Edit in') }} {{ __('Manage currencies') }}

{{-- Thousands separator --}}
@error('currency_thousands_sep')

{{ $message }}

@enderror
{{-- Decimal separator --}}
@error('currency_decimal_sep')

{{ $message }}

@enderror
{{-- Decimal places --}}
@error('currency_decimals')

{{ $message }}

@enderror
{{-- Live preview of the format --}}
{{ __('Preview') }}: @php $thou = $currency_thousands_sep ?: ','; $dec = $currency_decimal_sep ?: '.'; $decs = $currency_decimals; $sym = $currencies->firstWhere('code', $base_currency)?->symbol ?? '$'; // Guard: same separator would mean a bad config — default to comma/dot if ($thou === $dec) { $thou = ','; $dec = '.'; } @endphp {{ $sym }}{{ number_format(1234567.89, $decs, $dec, $thou) }}
{{-- ================================================ SECTION 2 — Price increment (markup defaults) ================================================ --}}

{{ __('Price increment') }}

{{ __('Used as global defaults when syncing or bulk-importing services from a provider. Each provider can override these from its own catalogue screen.') }}

{{-- Default markup % --}}
@error('default_markup_percent')

{{ $message }}

@enderror

{{ __('owner_price = cost + (cost × markup / 100)') }}

{{-- Auto-round to X decimals --}}
@error('price_round_decimals')

{{ $message }}

@enderror

{{ __('Decimal places used when rounding the computed sale price.') }}

{{-- ================================================ SECTION 3 — Auto currency converter ================================================ --}}

{{ __('Automatic currency converter') }}

{{ __('When active, every catalogue sync automatically applies the conversion rate below — no need to check the box per-run in the sync modal.') }}

{{-- Exchange rate row --}}

{{ __('Applies when you sync or import services from providers whose prices are in a foreign currency.') }}

{{ __('1 original currency') }} = {{ $currencies->firstWhere('code', $base_currency)?->code ?? 'USD' }}
@error('new_currency_rate')

{{ $message }}

@enderror

* {{ __('If you do not want to change the exchange rate, leave this field at 1.') }}

@elseif ($tab === 'branding') {{-- Branding is ONE place — colour, logos and favicon together (like the reference product). The logos used to live in a separate "Logo & favicon" tab; they were merged here so identity is edited in a single screen. Client-portal skins are layout, not identity, so they stay in Appearance and are only linked from the bottom. --}}

{{ __('Branding') }}

{{ __('The colour, logos and favicon that make the panel yours — all in one place.') }}

{{-- ── Brand colour ── --}}
{{ __('Brand colour') }}
{{ __('Primary button') }} {{ __('Badge') }}
@error('primary_color')

{{ $message }}

@enderror

{{ __('The whole panel re-themes from this one colour, in light and dark mode.') }}

{{-- ── Logos & favicon ── --}}
{{ __('Logos & favicon') }}

{{ __('Upload a variant for each context. PNG, SVG or WebP recommended.') }}

@php // The three previews below stand in for artwork the buyer has not // uploaded yet, so they must wear the BUYER's brand: hardcoded // "RF / RedFamosa" placeholders made a rebranded panel look like it // still belonged to someone else. Trimmed to the SVG's fixed width. $brandName = \Illuminate\Support\Str::limit(\App\Support\Brand::name(), 14, ''); $brandInitials = mb_strtoupper(mb_substr($brandName, 0, 2)); @endphp
{{-- Favicon / collapsed icon --}}
@if ($faviconUrl) favicon @else {{ $brandInitials }} @endif 32×32 px

{{ __('Favicon') }}

{{ __('Shown in browser tabs, bookmarks, and as the collapsed sidebar icon.') }} {{ __('ICO, PNG or SVG, 32×32 px, max 256 KB.') }}

@error('favicon')

{{ $message }}

@enderror
{{-- Logo Dark (for light mode) --}}
@if ($logoDarkUrl) logo dark @else {{ $brandInitials }} {{ $brandName }} @endif ☀️ {{ __('Light mode') }}

{{ __('Logo Dark') }}

{{ __('Dark-colored logo shown on light/day mode backgrounds (sidebar, login, emails).') }} {{ __('PNG/SVG/WebP, recommended 300×60 px, max 1 MB.') }}

@error('logo_dark')

{{ $message }}

@enderror
{{-- Logo Light (for dark mode) --}}
@if ($logoLightUrl) logo light @else {{ $brandInitials }} {{ $brandName }} @endif 🌙 {{ __('Dark mode') }}

{{ __('Logo Light') }}

{{ __('Light-colored logo shown on dark/night mode backgrounds.') }} {{ __('PNG/SVG/WebP, recommended 300×60 px, max 1 MB.') }}

@error('logo_light')

{{ $message }}

@enderror
{{-- ── Web / landing logo ── --}}

{{ __('Logo on website / landing page') }}

{{ __('The landing page uses a single design — choose which variant looks best against your selected skin.') }}

@if($web_logo === 'logo_light' && $logoLightUrl)
{{ __('Preview:') }} web logo preview
@elseif($web_logo === 'logo_dark' && $logoDarkUrl)
{{ __('Preview:') }} web logo preview
@endif
{{-- Client-portal skins (layout, not identity) live in Appearance --}} {{ __('Client-portal skins (Aurora, Vibrant, Midnight) live in Appearance.') }}
@elseif ($tab === 'seo')

{{ __('SEO') }}

{{ __('Search-engine and share-preview tags for your public pages (FAQ, Terms, and CMS pages). The landing page has its own SEO in the Landing editor.') }}

@error('seo_meta_title')

{{ $message }}

@enderror

{{ __('Used as the site name in page titles. Blank uses your website name.') }}

@error('seo_meta_description')

{{ $message }}

@enderror
@error('seo_canonical_host')

{{ $message }}

@enderror

{{ __('Forces one address for search engines. Blank uses the current host.') }}

@error('seo_og_image')

{{ $message }}

@enderror

{{ __('Recommended 1200×630. Blank uses your website logo.') }}

{{ __('Controls the robots meta tag and robots.txt. A sitemap is served at') }} /sitemap.xml.

@elseif ($tab === 'social')

{{ __('Social media') }}

{{ __('Profile links shown in the public landing footer. Leave a field blank to hide that network.') }}

@foreach (\App\Support\SocialLinks::NETWORKS as $network)
@error('social.'.$network)

{{ $message }}

@enderror
@endforeach
@elseif ($tab === 'analytics')

{{ __('Analytics') }}

{{ __('Tracking tags injected into your public pages. Nothing loads on the admin panel or while the master switch is off.') }}

{{ $analytics_enabled ? __('On') : __('Off') }}
@error('analytics_ga_id')

{{ $message }}

@enderror
@error('analytics_gtm_id')

{{ $message }}

@enderror
@error('analytics_meta_pixel')

{{ $message }}

@enderror
@error('analytics_custom_head')

{{ $message }}

@enderror

{{ __('Advanced: injected verbatim into the public . Only add code you trust.') }}

@elseif ($tab === 'oauth')

{{ __('Social login') }}

{{ __('Let users sign in with Google or Facebook. Create an app in each provider and paste its credentials. Secrets are stored encrypted and never shown again.') }}

{{-- ── 3-card grid — fixed columns so they fill the whole width ── --}}
{{-- Google Login --}}
{{ __('Google Login') }}
{{ $google_has_secret ? __('Configured') : __('Not set') }}

{{ __('Let customers sign in with their Google account.') }}

{{ __('Manual') }}
{{-- Facebook Login --}}
{{ __('Facebook Login') }}
{{ $facebook_has_secret ? __('Configured') : __('Not set') }}

{{ __('One-tap sign in with a Facebook account.') }}

{{ __('Manual') }}
{{-- Google reCAPTCHA --}}
{{ __('Google reCAPTCHA') }}
{{ $recaptcha_secret_saved ? __('Configured') : __('Not set') }}

{{ __('Protect signup and login forms from bots.') }}

{{ __('Manual') }}
{{-- Giphy — GIF picker in the ticket reply composer --}}
{{ __('Giphy') }}
{{ filled($giphy_api_key) ? __('Configured') : __('Not set') }}

{{ __('Adds a GIF search button to the ticket reply composer.') }}

{{ __('Manual') }}
{{-- /rf-int-grid --}} {{-- ── Modal: Google Login ── --}}
@error('google_client_id')

{{ $message }}

@enderror
{{-- ── Modal: Facebook Login ── --}}
@error('facebook_app_id')

{{ $message }}

@enderror
{{-- ── Modal: Google reCAPTCHA ── --}}
@if ($recaptcha_enabled)

{{ $recaptcha_version === 'v3' ? __('Must be a v3 site key. v2 keys will not work for v3 and vice versa.') : __('Must be a v2 site key.') }}

{{ __('Server-side verification key. Never sent to the browser.') }}

{{ __('Get keys at Google reCAPTCHA Admin →') }} @endif
{{-- ── Modal: Giphy ── --}}

{{ __('The GIF button in the ticket reply composer searches Giphy. Paste your own API key below — without one the button is hidden and the rest of the composer works as usual.') }}

@error('giphy_api_key')

{{ $message }}

@enderror

{{ __('Get a free key: create an account at developers.giphy.com, click "Create an App", choose the API option and copy the key it gives you.') }}

{{ __('Get a key at the Giphy Developers dashboard →') }}
@elseif ($tab === 'security')

{{ __('Security & access') }}

{{ __('Control who can reach the admin area and how sessions and passwords behave.') }}

@error('admin_ip_allowlist')

{{ $message }}

@enderror
{{-- One sentence, one key: split around the IP it read as two fragments, and the second one ("is always allowed…") cannot be translated into a language that puts the subject anywhere else. --}} {!! __('One IP or CIDR per line. LEAVE BLANK to allow every IP (default). Your current IP :ip is always allowed so you cannot lock yourself out.', ['ip' => ''.e(request()->ip()).'']) !!}
@error('session_lifetime')

{{ $message }}

@enderror

{{ __('How long an idle session stays signed in.') }}

@error('password_min_length')

{{ $message }}

@enderror

{{ __('Applied when a user registers or changes their password.') }}

@elseif ($tab === 'maintenance')

{{ __('Maintenance') }}

{{ __('Close the public site with a friendly notice while you work. Staff and the admin panel stay reachable.') }}

{{ $maintenance_mode ? __('On') : __('Off') }}
@error('maintenance_heading')

{{ $message }}

@enderror
@error('maintenance_message')

{{ $message }}

@enderror
@error('maintenance_allowed_ips')

{{ $message }}

@enderror

{{ __('These IPs see the live site during maintenance. Staff always bypass regardless.') }}

@if ($maintenance_mode){{ __('The public site is currently closed.') }}@endif
@endif