Files
callista-odoo-demo/templates/one-pager.template.html
T

146 lines
9.3 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="{{LANG}}">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{SELLER}} × {{CLIENT}} — {{HEADLINE_SHORT}}</title>
<style>
/* Reusable brand theme for callista-odoo-demo docs — Callista house style.
Gold #D1AA7A on warm cream #F8F2EB / #F2E7D9, black ink, Lato. Taken from
www.callista.be (Odoo theme: o-color-1 #D1AA7A, o-color-2 #CA9E67, link #976B34,
body font Lato, --border-radius .4rem). Inline this into each single-file HTML doc.
The Lato @import below is the one external reference a doc may carry; it swaps in
and the stack below falls back offline. Swap the brand footer per the SELLING
company — and if that company is not Callista, swap this palette with it. */
@import url('https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,300;0,400;0,700;0,900;1,400&display=swap');
:root{--gold:#D1AA7A;--gold-2:#CA9E67;--gold-ink:#976B34;--gold-tint:rgba(209,170,122,.16);
--ink:#000;--txt:#000;--dim:#4a4540;--faint:#8a8279;--bg:#F8F2EB;--band:#F2E7D9;
--hero:linear-gradient(180deg,#F2E7D9 0%,#EFE1CF 100%);--surface:#fff;--line:#E8DFD3;
--ok:#2E7D32;--warn:#B45309;--bad:#C0392B;--sh-sm:0 1px 2px rgba(70,50,25,.05);
--sh-md:0 12px 24px -8px rgba(70,50,25,.14);--r:1rem;--r-sm:.4rem;}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--txt);font:15px/1.6 Lato,-apple-system,system-ui,sans-serif;-webkit-font-smoothing:antialiased}
.wrap{max-width:1000px;margin:0 auto;padding:36px 28px 60px}
h1,h2,h3{font-family:Lato,sans-serif;color:var(--ink);line-height:1.2}
h1{font-size:34px;margin:0 0 6px;font-weight:900;letter-spacing:-.01em}
h2{font-size:21px;margin:34px 0 12px;font-weight:700;border-bottom:2px solid var(--gold);padding-bottom:8px}
h3{font-size:15px;margin:18px 0 6px;font-weight:700;color:var(--gold-ink);text-transform:uppercase;letter-spacing:.04em}
.sub{color:var(--dim);margin:0 0 4px;font-size:15px}.src{color:var(--faint);font-size:12px;margin:0 0 22px}
a{color:var(--gold-ink);text-decoration:none}a:hover{text-decoration:underline}
.gradient-text{background:linear-gradient(135deg,var(--gold-2),var(--gold-ink));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.label{font-size:11px;font-weight:700;color:var(--gold-ink);text-transform:uppercase;letter-spacing:.1em;background:var(--gold-tint);padding:5px 14px;border-radius:50rem;display:inline-block;margin-bottom:14px}
.lead{background:#fff;border:1px solid var(--line);border-left:4px solid var(--gold);padding:14px 18px;border-radius:var(--r-sm);margin:16px 0;box-shadow:var(--sh-sm)}
.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:22px 0}
.card{background:#fff;border:1px solid var(--line);border-radius:var(--r-sm);padding:18px;box-shadow:var(--sh-sm);min-width:0}
.card .n{font-size:28px;font-weight:900;color:var(--ink);line-height:1.1;overflow-wrap:anywhere}.card .n.blue,.card .n.gold{color:var(--gold-ink)}.card .l{color:var(--dim);font-size:13px;margin-top:3px}
.card-dark{background:var(--ink);color:#fff;border-radius:var(--r-sm);padding:22px 24px;box-shadow:var(--sh-md);margin:18px 0}.card-dark h3{color:var(--gold)}.card-dark p{color:#ded7cd;margin:6px 0 0}.card-dark a{color:var(--gold)}
table{width:100%;border-collapse:collapse;font-size:14px;background:#fff;border:1px solid var(--line);border-radius:var(--r-sm);overflow:hidden}
th,td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:top}
th{color:var(--gold-ink);font-weight:700;font-size:11px;text-transform:uppercase;letter-spacing:.06em;background:var(--band)}tr:last-child td{border-bottom:none}
.pill{display:inline-block;padding:2px 10px;border-radius:50rem;font-size:11.5px;font-weight:700}.pill.live{background:#e3f1e4;color:#1f6d24}.pill.bad{background:#fbe4e1;color:#a3271b}
.box{background:#fff;border:1px solid var(--line);border-left:4px solid var(--ok);border-radius:var(--r-sm);padding:12px 16px;margin:10px 0;box-shadow:var(--sh-sm)}.box.warn{border-left-color:var(--warn)}.box.info{border-left-color:var(--gold)}
.steps{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:18px 0}
.step{background:#fff;border:1px solid var(--line);border-radius:var(--r-sm);padding:16px;position:relative;box-shadow:var(--sh-sm)}.step.here{border-color:var(--gold);box-shadow:0 0 0 2px var(--gold) inset}
.step .num{font-size:11px;color:var(--faint);font-weight:700;text-transform:uppercase;letter-spacing:.06em}.step .ttl{font-size:15px;font-weight:900;color:var(--ink);margin:4px 0 6px}.step .d{font-size:12.5px;color:var(--dim)}
.step.here .badge{position:absolute;top:-10px;right:10px;background:var(--gold);color:#000;font-size:11px;font-weight:700;padding:2px 10px;border-radius:50rem}
code{background:var(--band);border:1px solid var(--line);border-radius:var(--r-sm);padding:1px 6px;font:12.5px ui-monospace,SFMono-Regular,Consolas,monospace;color:var(--gold-ink)}
footer{margin-top:40px;color:var(--faint);font-size:12px;border-top:1px solid var(--line);padding-top:16px}
.hero{background:var(--hero);border-top:4px solid var(--gold);border-bottom:1px solid #E2D2BB;padding:44px 28px 34px}.hero .wrap{padding:0;max-width:1000px;margin:0 auto}
.hero .label{background:#fff;border:1px solid #E2D2BB}
@media(max-width:760px){.grid,.steps{grid-template-columns:1fr 1fr}h1{font-size:26px}}
@media print{body{background:#fff}.wrap{padding:0}@page{size:A4;margin:12mm}}
/* one-pager extras */
.tbl-wrap{overflow-x:auto}
td.was{color:var(--dim)}td.now b{color:var(--ink)}
</style>
</head>
<body>
<!-- EXTERNAL leave-behind. Branded for the SELLING company, addressed to the economic
buyer. Everything here must be something the demo actually showed. -->
<div class="hero">
<div class="wrap">
<span class="label">{{SELLER}}</span>
<h1>{{HEADLINE_A}} <span class="gradient-text">{{HEADLINE_B}}</span></h1>
<p class="sub">{{SUBHEAD}}</p>
<p class="src">{{PROVENANCE}}<!-- e.g. "Prepared after the meeting of <date>, for <buyer names>" --></p>
</div>
</div>
<div class="wrap">
<div class="lead">
{{OPENING_MIRROR}}<!-- Their ask, in their words, answered. One short paragraph. -->
</div>
<h2>{{BEFORE_AFTER_TITLE}}</h2>
<div class="tbl-wrap">
<table>
<thead><tr><th style="width:34%">What happens today</th><th>What happens instead</th></tr></thead>
<tbody>
<!-- One row per pain, worst first. Left column is THEIR description, not yours.
Right column names the concrete mechanism, not a benefit adjective. -->
<tr><td class="was">{{WAS1}}</td><td class="now"><b>{{NOW1_LEAD}}</b> {{NOW1}}</td></tr>
<tr><td class="was">{{WAS2}}</td><td class="now"><b>{{NOW2_LEAD}}</b> {{NOW2}}</td></tr>
<tr><td class="was">{{WAS3}}</td><td class="now"><b>{{NOW3_LEAD}}</b> {{NOW3}}</td></tr>
<tr><td class="was">{{WAS4}}</td><td class="now"><b>{{NOW4_LEAD}}</b> {{NOW4}}</td></tr>
</tbody>
</table>
</div>
<h2>What is already running in your environment</h2>
<!-- Real figures from the built demo. If a number is not in the verification log,
it does not go on this page. -->
<div class="grid">
<div class="card"><div class="n gold">{{PROOF1_N}}</div><div class="l">{{PROOF1_L}}</div></div>
<div class="card"><div class="n">{{PROOF2_N}}</div><div class="l">{{PROOF2_L}}</div></div>
<div class="card"><div class="n">{{PROOF3_N}}</div><div class="l">{{PROOF3_L}}</div></div>
<div class="card"><div class="n">{{PROOF4_N}}</div><div class="l">{{PROOF4_L}}</div></div>
</div>
<div class="box">{{AUTOMATED_1}}</div>
<div class="box info">{{AUTOMATED_2}}</div>
<h2>What is not in it</h2>
<!-- The out-of-scope list, stated plainly. This is what makes the rest credible —
and it is cheaper to say here than to be caught on later. -->
<div class="box warn">
{{OUT_OF_SCOPE_INTRO}}
{{OUT_OF_SCOPE_LIST}}
</div>
<h2>Path to go-live</h2>
<div class="steps">
<div class="step here"><div class="badge">you are here</div><div class="num">Step 1</div><div class="ttl">{{STEP1_T}}</div><div class="d">{{STEP1_D}}</div></div>
<div class="step"><div class="num">Step 2</div><div class="ttl">{{STEP2_T}}</div><div class="d">{{STEP2_D}}</div></div>
<div class="step"><div class="num">Step 3</div><div class="ttl">{{STEP3_T}}</div><div class="d">{{STEP3_D}}</div></div>
<div class="step"><div class="num">Step 4</div><div class="ttl">{{STEP4_T}}</div><div class="d">{{STEP4_D}}</div></div>
</div>
<!-- INVESTMENT. Only fill this in from an agreed rate card. With no rate card and no
budget conversation, DELETE the grid and keep the note — a number you invented
here becomes the number you are held to. -->
<h2>Investment and timing</h2>
<div class="grid">
<div class="card"><div class="n gold">{{PRICE}}</div><div class="l">Phase 1</div></div>
<div class="card"><div class="n">{{ALL_PHASES}}</div><div class="l">All phases</div></div>
<div class="card"><div class="n">{{DURATION}}</div><div class="l">Duration</div></div>
<div class="card"><div class="n">{{PAYMENT_TERMS}}</div><div class="l">Payment terms</div></div>
</div>
<div class="box info">{{INVESTMENT_NOTE}}</div>
<div class="card-dark">
<h3>{{WHY_TITLE}}</h3>
<p>{{WHY_P1}}</p>
<p>{{WHY_P2}}</p>
</div>
<footer>
{{SELLER}} · <a href="{{SELLER_URL}}">{{SELLER_URL_LABEL}}</a> — for {{CLIENT}}, {{CLIENT_CITY}}<br>
Demo environment: <code>{{ODOO_HOST}}</code> · Odoo {{ODOO_VERSION}}{{STACK_SUFFIX}}
</footer>
</div>
</body>
</html>