loreal-sla-calculator/client.html
Alessandro Benedetti Admin 95451fc86c Add syndication lead-time note and disclaimer to results
Adds "Assumes 2-week lead time between syndication and Live Date"
to the Syndication card and results section in both the full SLA
Calculator (index.html) and the Brief Advisor (client.html).
Includes a reference-only disclaimer with BCM confirmation guidance.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 18:21:23 +00:00

218 lines
13 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en" class="scroll-smooth">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SLA Brief Advisor — eCom Content Factory</title>
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
darkMode: 'class',
theme: {
extend: {
colors: {
brand: { 50: '#fef3f2', 100: '#fee4e2', 200: '#fecdd3', 300: '#fda4af', 400: '#fb7185', 500: '#f43f5e', 600: '#e11d48', 700: '#be123c', 800: '#9f1239', 900: '#881337' }
}
}
}
}
</script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/themes/airbnb.css">
<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
<style>
.fade-in { animation: fadeIn 0.3s ease-in-out; }
@keyframes fadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
@media print { .no-print { display: none !important; } }
</style>
</head>
<body class="bg-gray-50 dark:bg-gray-900 text-gray-800 dark:text-gray-100 min-h-screen transition-colors">
<!-- Header -->
<header class="bg-white dark:bg-gray-800 shadow-sm border-b border-gray-200 dark:border-gray-700 no-print">
<div class="max-w-3xl mx-auto px-4 py-4 flex items-center justify-between">
<div>
<h1 class="text-xl font-bold text-brand-700 dark:text-brand-400">SLA Brief Advisor</h1>
<p class="text-xs text-gray-500 dark:text-gray-400 mt-0.5">eCom Content Factory</p>
</div>
<button id="darkToggle" class="p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors" title="Toggle dark mode">
<svg id="sunIcon" class="w-5 h-5 hidden" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"/></svg>
<svg id="moonIcon" class="w-5 h-5" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"/></svg>
</button>
</div>
</header>
<!-- Disclaimer -->
<div class="max-w-3xl mx-auto px-4 mt-4 no-print">
<div class="bg-amber-50 dark:bg-amber-900/20 border border-amber-200 dark:border-amber-700 rounded-lg px-4 py-2.5 flex items-start gap-2">
<svg class="w-4 h-4 text-amber-500 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
<p class="text-xs text-amber-700 dark:text-amber-300">These dates are <strong>non-contractual estimates</strong> based on standard SLAs. Actual timelines may vary depending on project complexity and team availability.</p>
</div>
</div>
<!-- Main Content -->
<main class="max-w-3xl mx-auto px-4 py-6">
<div class="bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-200 dark:border-gray-700 p-6">
<p class="text-sm text-gray-600 dark:text-gray-400 mb-6">Tell us what you need and when — we'll tell you the right brief type and when to submit it.</p>
<!-- Form -->
<form id="clientForm" class="space-y-5" autocomplete="off">
<!-- Content Type -->
<div>
<label for="contentType" class="block text-sm font-semibold text-gray-700 dark:text-gray-300 mb-1.5">What is this for?</label>
<select id="contentType" class="w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 px-3 py-2.5 text-sm focus:ring-2 focus:ring-brand-500 focus:border-brand-500 outline-none transition-colors">
<option value="">— Select —</option>
<option value="pdp">Product (PDP)</option>
<option value="eventing">Eventing</option>
</select>
</div>
<!-- Asset Volume -->
<div>
<label for="assetVolume" class="block text-sm font-semibold text-gray-700 dark:text-gray-300 mb-1.5">How many assets do you need?</label>
<select id="assetVolume" class="w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 px-3 py-2.5 text-sm focus:ring-2 focus:ring-brand-500 focus:border-brand-500 outline-none transition-colors">
<option value="0_30">0 30</option>
<option value="30_50">30 50</option>
<option value="50_100">50 100</option>
<option value="100_200">100 200</option>
<option value="200_300">200 300</option>
<option value="300_400">300 400</option>
</select>
</div>
<!-- Yes/No Toggles -->
<div class="space-y-3">
<p class="text-sm font-semibold text-gray-700 dark:text-gray-300">What do you need?</p>
<!-- Video -->
<label class="flex items-center justify-between p-3 rounded-lg border border-gray-200 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-700/40 cursor-pointer transition-colors">
<div class="flex items-center gap-3">
<span class="text-lg">🎬</span>
<span class="text-sm font-medium text-gray-700 dark:text-gray-300">Video / Motion content</span>
</div>
<div class="relative">
<input type="checkbox" id="needsVideo" class="sr-only peer">
<div class="w-10 h-5 bg-gray-300 dark:bg-gray-600 rounded-full peer-checked:bg-brand-500 transition-colors"></div>
<div class="absolute top-0.5 left-0.5 w-4 h-4 bg-white rounded-full shadow peer-checked:translate-x-5 transition-transform"></div>
</div>
</label>
<!-- HTML -->
<label class="flex items-center justify-between p-3 rounded-lg border border-gray-200 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-700/40 cursor-pointer transition-colors">
<div class="flex items-center gap-3">
<span class="text-lg">🖥️</span>
<span class="text-sm font-medium text-gray-700 dark:text-gray-300">HTML / Rich media</span>
</div>
<div class="relative">
<input type="checkbox" id="needsHTML" class="sr-only peer">
<div class="w-10 h-5 bg-gray-300 dark:bg-gray-600 rounded-full peer-checked:bg-brand-500 transition-colors"></div>
<div class="absolute top-0.5 left-0.5 w-4 h-4 bg-white rounded-full shadow peer-checked:translate-x-5 transition-transform"></div>
</div>
</label>
<!-- Translation -->
<label class="flex items-center justify-between p-3 rounded-lg border border-gray-200 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-700/40 cursor-pointer transition-colors">
<div class="flex items-center gap-3">
<span class="text-lg">🌐</span>
<span class="text-sm font-medium text-gray-700 dark:text-gray-300">Translation</span>
</div>
<div class="relative">
<input type="checkbox" id="needsTranslation" class="sr-only peer">
<div class="w-10 h-5 bg-gray-300 dark:bg-gray-600 rounded-full peer-checked:bg-brand-500 transition-colors"></div>
<div class="absolute top-0.5 left-0.5 w-4 h-4 bg-white rounded-full shadow peer-checked:translate-x-5 transition-transform"></div>
</div>
</label>
<!-- Syndication -->
<label class="flex items-center justify-between p-3 rounded-lg border border-gray-200 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-700/40 cursor-pointer transition-colors">
<div class="flex items-center gap-3">
<span class="text-lg">📤</span>
<span class="text-sm font-medium text-gray-700 dark:text-gray-300">Syndication</span>
</div>
<div class="relative">
<input type="checkbox" id="needsSyndication" class="sr-only peer">
<div class="w-10 h-5 bg-gray-300 dark:bg-gray-600 rounded-full peer-checked:bg-brand-500 transition-colors"></div>
<div class="absolute top-0.5 left-0.5 w-4 h-4 bg-white rounded-full shadow peer-checked:translate-x-5 transition-transform"></div>
</div>
</label>
</div>
<!-- Go-Live Date -->
<div>
<label for="golive" class="block text-sm font-semibold text-gray-700 dark:text-gray-300 mb-1.5">When do you need this live?</label>
<input id="golive" type="text" placeholder="Select your go-live date…" class="w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 px-3 py-2.5 text-sm focus:ring-2 focus:ring-brand-500 focus:border-brand-500 outline-none transition-colors" readonly>
</div>
<!-- Calculate Button -->
<button type="submit" id="calcBtn" disabled class="w-full bg-brand-600 hover:bg-brand-700 disabled:bg-gray-300 dark:disabled:bg-gray-600 disabled:cursor-not-allowed text-white font-semibold py-3 px-4 rounded-lg transition-colors text-sm">
Show me the result
</button>
</form>
<!-- Results -->
<div id="results" class="hidden mt-8 fade-in">
<hr class="border-gray-200 dark:border-gray-700 mb-6">
<!-- Brief Type Result -->
<div class="rounded-xl p-5 mb-4 bg-brand-50 dark:bg-brand-900/20 border border-brand-200 dark:border-brand-800">
<div class="flex items-start gap-3">
<div class="w-10 h-10 rounded-full bg-brand-500 flex items-center justify-center flex-shrink-0 shadow">
<svg class="w-5 h-5 text-white" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/></svg>
</div>
<div>
<p class="text-xs font-medium text-brand-600 dark:text-brand-400 uppercase tracking-wide">Brief type to submit</p>
<p id="resultBriefType" class="text-lg font-bold text-brand-800 dark:text-brand-200 mt-0.5"></p>
<p id="resultBriefDesc" class="text-xs text-brand-600 dark:text-brand-400 mt-1"></p>
</div>
</div>
</div>
<!-- Submission Deadline -->
<div id="deadlineBanner" class="rounded-xl p-5 mb-4"></div>
<!-- Timeline Summary -->
<div id="timelineSummary" class="space-y-3"></div>
<!-- Summary Row -->
<div class="mt-6 grid grid-cols-1 sm:grid-cols-3 gap-3">
<div class="bg-gray-50 dark:bg-gray-700/50 rounded-lg p-3 text-center">
<p class="text-xs text-gray-500 dark:text-gray-400 mb-1">Submit Brief By</p>
<p id="summarySubmitBy" class="text-sm font-bold text-brand-600 dark:text-brand-400"></p>
</div>
<div class="bg-gray-50 dark:bg-gray-700/50 rounded-lg p-3 text-center">
<p class="text-xs text-gray-500 dark:text-gray-400 mb-1">Estimated Completion</p>
<p id="summaryCompletion" class="text-sm font-bold"></p>
</div>
<div class="bg-gray-50 dark:bg-gray-700/50 rounded-lg p-3 text-center">
<p class="text-xs text-gray-500 dark:text-gray-400 mb-1">Total Business Days</p>
<p id="summaryDays" class="text-sm font-bold"></p>
</div>
</div>
<!-- Lead-time & Disclaimer Notes -->
<div class="mt-4 space-y-2">
<p class="text-xs text-gray-500 dark:text-gray-400 italic">Assumes 2-week lead time between syndication and Live Date.</p>
<p class="text-xs text-gray-500 dark:text-gray-400 italic">These timings are for reference only. Please confirm final deadlines with your BCM after studio evaluation. Creative requests follow ad-hoc production timelines.</p>
</div>
<!-- Start Over -->
<div class="mt-6 text-center no-print">
<button id="resetBtn" type="button" class="inline-flex items-center gap-2 px-4 py-2 rounded-lg border border-gray-300 dark:border-gray-600 text-sm font-medium hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors">
<svg class="w-4 h-4" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/></svg>
Start Over
</button>
</div>
</div>
</div>
<!-- Footer -->
<p class="text-center text-xs text-gray-400 dark:text-gray-500 mt-6 no-print">
For detailed stage-by-stage configuration, use the <a href="index.html" class="underline hover:text-brand-500">full SLA Calculator</a>.
</p>
</main>
<script src="client-script.js?v=2026031303"></script>
</body>
</html>