<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<meta name="theme-color" content="#5a0b0e">
<title>How to Lose an Account in a Few Easy Steps</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
<style>
:root{
  --red-950:#240405; --red-900:#3d080b; --red-800:#5a0b0e; --red-700:#8f1418; --red-600:#b3191e;
  --hot:#ff4a4a; --soft:#ffc2bd; --line:rgba(255,255,255,.16);
  --text:#ffffff; --muted:#f1d3d0;
  --card:rgba(0,0,0,.18); --card-hi:rgba(255,255,255,.14);
  --radius:16px; --ease:cubic-bezier(.22,.8,.24,1);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%;background:var(--red-900);color:var(--text);
  font-family:Inter,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;overflow:hidden}
body{background:radial-gradient(120% 75% at 80% 0%,var(--red-600),var(--red-800) 50%,var(--red-950));}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
.app{position:fixed;inset:0;display:flex;flex-direction:column;max-width:560px;margin:0 auto}

/* top bar */
.top{display:flex;align-items:center;gap:12px;padding:calc(10px + env(safe-area-inset-top)) 16px 10px}
.top img{height:30px;width:auto}
.top .crumb{flex:1;min-width:0;font-size:13px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.iconbtn{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;background:var(--card);border:1px solid var(--line)}
.iconbtn svg{width:20px;height:20px}
.progress{height:4px;margin:0 16px;background:rgba(255,255,255,.14);border-radius:4px;overflow:hidden}
.progress i{display:block;height:100%;width:0;background:#fff;border-radius:4px;transition:width .5s var(--ease)}

/* stage */
.stage{position:relative;flex:1;overflow:hidden}
.track{position:absolute;inset:0;display:flex;transition:transform .45s var(--ease);will-change:transform}
.screen{position:relative;flex:0 0 100%;height:100%;overflow-y:auto;overscroll-behavior:contain;padding:22px 16px 28px;-webkit-overflow-scrolling:touch}
.screen>.in{opacity:0;transform:translateY(14px);transition:opacity .5s var(--ease) .1s,transform .5s var(--ease) .1s}
.screen.active>.in{opacity:1;transform:none}

/* cover */
.cover{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;padding-bottom:8px;text-align:center;min-height:100%}
.cover img{width:92px;height:auto;margin-bottom:18px;filter:drop-shadow(0 10px 30px rgba(0,0,0,.45))}
.cover .rule{width:80px;height:2px;background:#fff;margin:0 auto 18px;border-radius:2px}
.cover h1{font-size:34px;line-height:1.1;font-weight:800;margin:0 0 12px;letter-spacing:-.02em}
.cover p{color:var(--soft);margin:0 0 30px;font-size:16.5px;line-height:1.45;max-width:340px}
.cover .meta{color:var(--muted);font-size:13px;margin-top:18px}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:52px;padding:0 26px;border-radius:14px;
  font-weight:700;font-size:16px;background:#fff;color:var(--red-800);box-shadow:0 8px 24px rgba(0,0,0,.3);transition:transform .15s}
.btn:active{transform:scale(.97)}
.btn.ghost{background:var(--card);color:#fff;box-shadow:none;border:1px solid var(--line)}
.btn.wide{width:100%}

/* photos */
.cover-bg{position:absolute;inset:0;background:var(--red-900) 50% 18%/cover no-repeat;opacity:0;transition:opacity .8s}
.cover-bg.loaded{opacity:1}
.cover-bg::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(36,4,5,.05) 0%,rgba(61,8,11,.25) 32%,rgba(61,8,11,.88) 56%,rgba(36,4,5,.98) 100%)}
.hero{position:relative;margin:-22px -16px 18px;height:clamp(320px,52vh,470px);background:var(--red-900);display:flex;align-items:flex-end;overflow:hidden}
.hero .ph{position:absolute;inset:0;background:center/cover no-repeat;opacity:0;transform:scale(1.03);transform-origin:center top;transition:opacity .7s,transform 6s ease-out}
.hero .ph.loaded{opacity:1;transform:scale(1)}
.hero::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(61,8,11,0) 30%,rgba(90,11,14,.6) 66%,rgba(90,11,14,1) 100%)}
.hero-in{position:relative;z-index:1;padding:0 16px 4px;width:100%}
.hero h2{margin:10px 0 0;text-shadow:0 2px 14px rgba(0,0,0,.55)}
.hero .kicker{color:#fff;text-shadow:0 1px 6px rgba(0,0,0,.6)}

/* step */
.kicker{display:flex;align-items:center;gap:10px;color:var(--soft);font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}
.kicker .num{width:28px;height:28px;border-radius:8px;background:#fff;color:var(--red-700);display:grid;place-items:center;font-size:13px;letter-spacing:0;text-shadow:none}
h2{font-size:32px;line-height:1.08;font-weight:800;letter-spacing:-.02em;margin:12px 0 8px}
.items{display:flex;flex-direction:column;gap:10px;margin:0;padding:0;list-style:none}
.item{display:flex;gap:14px;align-items:flex-start;padding:14px 14px;border-radius:var(--radius);background:var(--card);border:1px solid var(--line);
  font-size:16.5px;line-height:1.42}
.item .x{flex:0 0 26px;height:26px;border-radius:50%;background:rgba(255,255,255,.12);border:2px solid rgba(255,255,255,.7);display:grid;place-items:center;margin-top:-1px}
.item .x svg{width:12px;height:12px}

.next-wrap{margin-top:22px}

/* closing */
.finish{text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100%;padding:10px 4px}
.badge{width:96px;height:96px;border-radius:50%;background:#fff;display:grid;place-items:center;margin-bottom:28px;box-shadow:0 0 0 10px rgba(255,255,255,.14),0 0 0 22px rgba(255,255,255,.06)}
.badge svg{width:44px;height:44px}
.finish .line{font-size:27px;line-height:1.2;font-weight:800;letter-spacing:-.015em;margin:0 0 18px;max-width:360px}
.finish .line.alt{color:var(--soft)}
.finish .stack{display:flex;flex-direction:column;gap:10px;width:100%;max-width:320px;margin-top:22px}

/* bottom nav */
.nav{display:flex;align-items:center;gap:10px;padding:10px 16px calc(12px + env(safe-area-inset-bottom));border-top:1px solid var(--line);background:rgba(36,4,5,.55);backdrop-filter:blur(10px)}
.nav .dots{flex:1;display:flex;justify-content:center;gap:6px;flex-wrap:wrap}
.nav .dots i{width:7px;height:7px;border-radius:7px;background:rgba(255,255,255,.28);transition:all .3s var(--ease)}
.nav .dots i.on{width:20px;background:#fff}
.nav .dots i.seen{background:rgba(255,194,189,.75)}
.navbtn{width:48px;height:48px;border-radius:14px;display:grid;place-items:center;background:var(--card);border:1px solid var(--line)}
.navbtn.primary{background:#fff;border-color:#fff;color:var(--red-700)}
.navbtn:disabled{opacity:.3}
.navbtn svg{width:22px;height:22px}

/* menu drawer */
.scrim{position:fixed;inset:0;background:rgba(20,2,3,.6);opacity:0;pointer-events:none;transition:opacity .3s;z-index:20}
.drawer{position:fixed;left:0;right:0;bottom:0;max-width:560px;margin:0 auto;max-height:85dvh;overflow-y:auto;z-index:21;
  background:var(--red-900);border-radius:22px 22px 0 0;border:1px solid var(--line);border-bottom:0;
  padding:10px 16px calc(20px + env(safe-area-inset-bottom));transform:translateY(105%);transition:transform .4s var(--ease)}
.menu-open .scrim{opacity:1;pointer-events:auto}
.menu-open .drawer{transform:none}
.grab{width:40px;height:5px;border-radius:5px;background:rgba(255,255,255,.25);margin:0 auto 14px}
.drawer h3{margin:0 0 12px;font-size:13px;letter-spacing:.12em;text-transform:uppercase;color:var(--soft)}
.toc{display:flex;flex-direction:column;gap:6px}
.toc button{display:flex;align-items:center;gap:12px;padding:12px;border-radius:12px;text-align:left;font-size:15.5px;font-weight:600}
.toc button.cur{background:var(--card-hi)}
.toc .n{flex:0 0 30px;height:30px;border-radius:9px;background:var(--card);border:1px solid var(--line);display:grid;place-items:center;font-size:13px}

@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
</style>
</head>
<body>
<div class="app" id="app">
  <div class="top">
    <img src="https://primeoneoperations.com/wp-content/uploads/2026/10/p1-logo-white.png" alt="Prime One">
    <div class="crumb" id="crumb">How to Lose an Account</div>
    <button class="iconbtn" id="menuBtn" aria-label="Open step list">
      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M4 7h16M4 12h16M4 17h10"/></svg>
    </button>
  </div>
  <div class="progress"><i id="bar"></i></div>
  <div class="stage" id="stage"><div class="track" id="track"></div></div>
  <div class="nav">
    <button class="navbtn" id="prev" aria-label="Previous"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M15 5l-7 7 7 7"/></svg></button>
    <div class="dots" id="dots"></div>
    <button class="navbtn primary" id="next" aria-label="Next"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M9 5l7 7-7 7"/></svg></button>
  </div>
</div>
<div class="scrim" id="scrim"></div>
<div class="drawer" id="drawer" role="dialog" aria-label="Steps">
  <div class="grab"></div>
  <h3>Jump to a step</h3>
  <div class="toc" id="toc"></div>
</div>

<script>
const PHOTO_BASE="https://primeoneoperations.com/wp-content/uploads/2026/10/"; // photos live in the primeoneoperations.com media library
const COVER_IMG="p1-red-cover";
/* ===== CONTENT — edit here to update the guide ===== */
const TITLE="How to Lose an Account in a Few Easy Steps";
const INTRO="Every store we run had a detail company before us. These are the steps they followed to lose it.";
const CLOSING=["Every one of these steps opened the door for us.","Every one of them can open the door for someone else."];
const STEPS = [
  { title:"Make the dealership chase you", img:"p1-red-1-chase", focus:"34%", items:[
    "Pick cars by what’s easiest, not by what the dealership needs first.",
    "Don’t keep track of which cars are sold or which deliveries are due today.",
    "Take your time getting started, then rush when it’s too late.",
    "Let cars sit for days without telling anyone.",
    "When a car won’t be ready, don’t warn anyone. Let the dealership find out when they come looking for it.",
    "Promise a time you know you can’t make.",
    "Take your time answering a sales manager’s call or text.",
    "Make the managers walk back to the bay to chase keys, and treat it as normal.",
    "Sit in the cars or on your phone while keys wait on the board.",
    "On slow days, slow down. Assume nothing else is coming in."]},
  { title:"Make the dealership check your work", img:"p1-red-2-quality", focus:"46%", items:[
    "Make “good enough” your standard, and keep moving it.",
    "Go fast on the easy cars and get careless on the tough ones.",
    "Leave plastic, stickers or film on new cars.",
    "Leave trash, towels or your own things in customers’ cars.",
    "Expect the dealership to check your work and tell you if you missed anything.",
    "When salespeople touch up your cars, decide it’s no big deal.",
    "Miss the same thing on the same car twice."]},
  { title:"Don’t be there when the store needs you", img:"p1-red-3-absent", focus:"22%", items:[
    "Show up late.",
    "Call out often, and at the last minute.",
    "Ask to leave early, and give attitude when you’re asked to stay.",
    "Leave for the day without checking with the sales managers.",
    "Learn how to clean cars. Never learn how to run the department.",
    "Show up out of uniform. Look like you don’t belong in a dealership."]},
  { title:"Put the dealership’s cars and money at risk", img:"p1-red-4-risk", focus:"38%", items:[
    "Keep having accidents, especially the preventable ones.",
    "Report damage late, or not at all.",
    "Lose keys.",
    "Leave cars unlocked, keys inside, or windows down overnight.",
    "Drive inventory too fast on the lot.",
    "Use the wrong chemical, and damage paint, trim or wheels."]},
  { title:"Make the relationship hard", img:"p1-red-5-attitude", focus:"24%", items:[
    "Be moody and unprofessional with dealership staff.",
    "Show annoyance when dealership staff bring you work.",
    "Give attitude to a customer who points out a spot you missed.",
    "Argue with your coworkers in front of dealership staff.",
    "Blast your music in the bay, in the cars or anywhere on the lot, profanity and all. Make sure customers and staff hear every word.",
    "Talk badly about the dealership’s managers where their people can hear.",
    "Keep score of who gets the easy cars, and get bitter about it.",
    "Complain about your company, the work and each other."]},
  { title:"Cross lines there’s no coming back from", img:"p1-red-6-lines", focus:"36%", items:[
    "Run side jobs for cash on dealership grounds.",
    "Show up to work smelling of alcohol or marijuana.",
    "Smoke or vape in or near customers’ cars.",
    "Use dealership cars for personal errands."]},
  { title:"If you’re a manager, look the other way", img:"p1-red-7-manager", focus:"30%", items:[
    "See the attitude and say nothing.",
    "When the team drifts from the standard, don’t correct it. Avoid or put off the hard conversations, overlook the problems, and hope for the best.",
    "Let gossip spread until the environment turns toxic.",
    "Turn your team against the dealership.",
    "Blame your detailers or the dealership. Never own the problem.",
    "Don’t follow up after you give instructions or corrections. “I told them” is where your responsibility ends.",
    "Hide the dealership’s complaints from your boss.",
    "After every complaint, get better for a week, then go right back."]},
  { title:"If you’re a manager, let the store slide", img:"p1-red-8-slide-sq", focus:"50%", items:[
    "Wait to be told what to do. Don’t run the operation.",
    "Don’t bother knowing what’s in the queue or what’s due today.",
    "Let everyone take lunch at the same time, and leave the bay empty.",
    "Let trash, floor mats, cigarette butts, junk and clutter pile up. Never take the time to organize or deep clean the detail area.",
    "Neglect the showroom cars. Never walk the lot. Act as if the front line isn’t your problem.",
    "Don’t get to know the dealership’s managers. Stay in your bay, and talk to them only when you have to.",
    "Don’t bother being friendly, polite or cordial. Never become someone they know, like and trust.",
    "Charge extra without approval, and bill some cars twice.",
    "Keep no clear record of what was done, so every invoice turns into a question."]},
  { title:"Take the account for granted", img:"p1-red-9-granted", focus:"26%", items:[
    "Act as if the dealership could never replace you."]}
];
/* ===== END CONTENT ===== */

const KEY="p1-red-guide-v1";
const store={get(){try{return JSON.parse(localStorage.getItem(KEY))||{}}catch(e){return {}}},
             set(v){try{localStorage.setItem(KEY,JSON.stringify(v))}catch(e){}}};
let S=Object.assign({pos:0,seen:{}},store.get());
const save=()=>store.set(S);

const xmark='<svg viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="3.4" stroke-linecap="round"><path d="M6 6l12 12M18 6L6 18"/></svg>';
const esc=s=>s.replace(/&/g,"&amp;").replace(/</g,"&lt;");
const track=document.getElementById("track");
const total=STEPS.length+2; // cover + steps + closing

function build(){
  let h=`<section class="screen"><div class="cover-bg" data-bg="${PHOTO_BASE+COVER_IMG}.jpg"></div><div class="in cover">
    <img src="https://primeoneoperations.com/wp-content/uploads/2026/10/p1-logo-white.png" alt="Prime One">
    <div class="rule"></div>
    <h1>${esc(TITLE)}</h1>
    <p>${esc(INTRO)}</p>
    <button class="btn" data-go="1" id="startBtn">Start</button>
    <div class="meta">${STEPS.length} steps · about 5 minutes · swipe or tap the arrows</div>
  </div></section>`;
  STEPS.forEach((c,i)=>{
    const ci=i+1, last=ci===STEPS.length;
    const items=c.items.map(t=>`<li class="item"><span class="x">${xmark}</span><span>${esc(t)}</span></li>`).join("");
    h+=`<section class="screen"><div class="in">
      <div class="hero"><div class="ph" data-bg="${PHOTO_BASE+c.img}.jpg" style="background-position:center ${c.focus||"30%"}"></div><div class="hero-in">
        <div class="kicker"><span class="num">${ci}</span>Step ${ci} of ${STEPS.length}</div>
        <h2>${esc(c.title)}</h2></div></div>
      <ul class="items">${items}</ul>
      <div class="next-wrap"><button class="btn wide" data-go="${ci+1}">${last?"Read the closing":"Next: Step "+(ci+1)}</button></div>
    </div></section>`;
  });
  h+=`<section class="screen"><div class="in finish">
    <div class="badge"><svg viewBox="0 0 24 24" fill="none" stroke="#8f1418" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round"><path d="M12 8v5M12 16.5v.5"/><path d="M10.3 3.9L2.6 17.5A2 2 0 0 0 4.3 20.5h15.4a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0z"/></svg></div>
    <p class="line">${esc(CLOSING[0])}</p>
    <p class="line alt">${esc(CLOSING[1])}</p>
    <div class="stack">
      <button class="btn" data-go="1">Review from Step 1</button>
      <button class="btn ghost" id="menuBtn2">Jump to a step</button>
    </div>
  </div></section>`;
  track.innerHTML=h;
}

let shown=-1;
function go(n,instant){
  n=Math.max(0,Math.min(total-1,n)); const moved=n!==shown; shown=n; S.pos=n; if(n>0&&n<total-1)S.seen[n]=1; save();
  if(instant){track.style.transition="none";requestAnimationFrame(()=>track.style.transition="")}
  track.style.transform=`translateX(${-n*100}%)`;
  document.querySelectorAll(".screen").forEach((s,i)=>{s.classList.toggle("active",i===n); if(i===n){if(moved)s.scrollTop=0;s.removeAttribute("inert")}else s.setAttribute("inert","")});
  document.querySelectorAll(".screen").forEach((s,i)=>{if(Math.abs(i-n)>1)return;
    s.querySelectorAll("[data-bg]:not(.ready)").forEach(el=>{el.classList.add("ready");const u=el.dataset.bg,im=new Image();
      im.onload=()=>{el.style.backgroundImage=`url("${u}")`;el.classList.add("loaded")};im.src=u})});
  document.getElementById("prev").disabled=n===0;
  document.getElementById("next").disabled=n===total-1;
  document.getElementById("bar").style.width=(n/(total-1)*100)+"%";
  document.getElementById("crumb").textContent=n===0?"How to Lose an Account":n===total-1?"Closing":`Step ${n}. ${STEPS[n-1].title}`;
  document.getElementById("dots").innerHTML=Array.from({length:total},(_,i)=>`<i class="${i===n?"on":S.seen[i]?"seen":""}"></i>`).join("");
  const sb=document.getElementById("startBtn");
  if(sb) sb.textContent=S.pos>0||Object.keys(S.seen).length?"Continue":"Start";
}

function toc(){
  document.getElementById("toc").innerHTML=STEPS.map((c,i)=>{const ci=i+1;
    return `<button data-go="${ci}" class="${S.pos===ci?"cur":""}"><span class="n">${ci}</span>${esc(c.title)}</button>`}).join("")
    +`<button data-go="${total-1}" class="${S.pos===total-1?"cur":""}"><span class="n">!</span>Closing</button>`;
}
const app=document.body;
function openMenu(){toc();app.classList.add("menu-open")}
function closeMenu(){app.classList.remove("menu-open")}

document.addEventListener("click",e=>{
  const g=e.target.closest("[data-go]"); if(g){closeMenu();go(+g.dataset.go);return}
  if(e.target.closest("#menuBtn2"))openMenu();
});
document.getElementById("prev").onclick=()=>go(S.pos-1);
document.getElementById("next").onclick=()=>go(S.pos+1);
document.getElementById("menuBtn").onclick=openMenu;
document.getElementById("scrim").onclick=closeMenu;
document.addEventListener("keydown",e=>{if(e.key==="ArrowRight")go(S.pos+1);if(e.key==="ArrowLeft")go(S.pos-1);if(e.key==="Escape")closeMenu()});

// swipe
let sx=0,sy=0,dx=0,drag=false,lock=null;
const stage=document.getElementById("stage");
stage.addEventListener("scroll",()=>{if(stage.scrollLeft)stage.scrollLeft=0});
stage.addEventListener("touchstart",e=>{sx=e.touches[0].clientX;sy=e.touches[0].clientY;dx=0;drag=true;lock=null},{passive:true});
stage.addEventListener("touchmove",e=>{if(!drag)return;const x=e.touches[0].clientX-sx,y=e.touches[0].clientY-sy;
  if(lock===null&&(Math.abs(x)>8||Math.abs(y)>8))lock=Math.abs(x)>Math.abs(y)*1.3?"x":"y";
  if(lock!=="x")return; dx=x; track.style.transition="none";
  const edge=(S.pos===0&&dx>0)||(S.pos===total-1&&dx<0);
  track.style.transform=`translateX(calc(${-S.pos*100}% + ${edge?dx/3:dx}px))`},{passive:true});
stage.addEventListener("touchend",()=>{if(!drag)return;drag=false;track.style.transition="";
  if(lock==="x"&&Math.abs(dx)>stage.clientWidth*0.18)go(S.pos+(dx<0?1:-1));else go(S.pos)});

build(); go(S.pos,true);
</script>
</body>
</html>
