/* Morya website + admin panel (online server only). Same look as the demo screens. */
:root{--ink:#14213D;--paper:#F7F4EE;--card:#FFFFFF;--line:#E2DDD3;--mute:#4A5568;--soft:#6B7280;--accent:#C4561B;--accent-soft:#FDF1EA;--ok:#2F855A;--ok-soft:#E6F4EA;--bad:#B42318;--bad-soft:#FDECEC;--blue:#2563A6;--navy2:#24375E}
*{box-sizing:border-box}
body{margin:0;background:var(--paper);color:var(--ink);font:var(--fs,16px)/1.5 var(--fb,"DM Sans"),system-ui,sans-serif}
h1,h2,h3,.brand{font-family:var(--fh,"Sora"),var(--fb,"DM Sans"),sans-serif;line-height:1.15;margin:0}
a{color:var(--blue)}
.wrap{max-width:1200px;margin:0 auto;padding:0 16px}
.nav{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between;padding-top:18px;padding-bottom:18px}
.brand{font-weight:700;font-size:22px;color:var(--ink);text-decoration:none}.brand span{color:var(--accent)}
a.brand{display:inline-flex;align-items:flex-end;gap:10px}.brand-logo{height:56px;width:auto;display:block}@media (max-width:520px){.brand-logo{height:44px}}.brand-sub{font:700 13px var(--fb,"DM Sans"),sans-serif;letter-spacing:2px;color:var(--mute);text-transform:uppercase;padding-bottom:10px}
.navlinks{display:flex;flex-wrap:wrap;gap:16px;align-items:center;font-size:15px}
.btn{display:inline-block;border:0;cursor:pointer;border-radius:10px;padding:12px 20px;font:700 16px var(--fb,"DM Sans"),sans-serif;text-decoration:none;text-align:center;background:var(--ink);color:var(--paper)}
.btn.orange{background:var(--accent);color:#fff}.btn.ghost{background:transparent;color:var(--ink);border:2px solid var(--ink);padding:10px 18px}
.btn.green{background:var(--ok);color:#fff}.btn.red{background:var(--bad);color:#fff}.btn.small{padding:7px 12px;font-size:14px;border-radius:8px}
.btn:disabled{opacity:.5;cursor:not-allowed}
.hero{display:flex;flex-wrap:wrap;gap:32px;align-items:center;padding:40px 0}
.hero .text{flex:1 1 480px;display:flex;flex-direction:column;gap:18px}
.kicker{font-size:13px;font-weight:700;letter-spacing:2px;color:var(--accent);margin:0}
.hero h1{font-size:clamp(32px,5vw,50px)}
.lead{font-size:18px;color:var(--mute);margin:0}
.offer{flex:1 1 320px;background:var(--ink);color:var(--paper);border-radius:16px;padding:26px;display:flex;flex-direction:column;gap:10px}
.offer b{font-family:var(--fh,"Sora"),sans-serif;font-size:40px;color:var(--hi,#F2A65A)}
.tabs{display:inline-flex;gap:4px;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:4px}
.tabs button{border:0;background:transparent;padding:9px 14px;border-radius:8px;font:700 14px var(--fb,"DM Sans"),sans-serif;color:var(--ink);cursor:pointer}
.tabs button.on{background:var(--ink);color:var(--paper)}
.plans{display:grid;grid-template-columns:repeat(auto-fit,minmax(270px,1fr));gap:18px}
.plans{padding-top:14px;row-gap:32px}
.plan{position:relative;background:var(--card);border:1px solid var(--line);border-radius:16px;padding:24px;display:flex;flex-direction:column;gap:12px}
.plan h3{margin:0}
/* same border width on every card (the highlight is drawn outside), so nothing inside shifts */
.plan.pop{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent),0 12px 32px rgba(20,33,61,.12)}
/* badge sits on the top edge, so it does not push the card's text down */
.pill{position:absolute;top:0;left:24px;transform:translateY(-50%);background:var(--accent);color:#fff;font-size:12px;font-weight:700;padding:3px 10px;border-radius:20px;white-space:nowrap}
.feats{display:flex;flex-direction:column;gap:12px;flex:1}
/* line up name, text, price, "billed …", list and button across the cards in a row */
@supports (grid-template-rows:subgrid){.plan{display:grid;grid-row:span 7;grid-template-rows:subgrid;row-gap:12px;align-content:start}.plan .feats{align-self:start}}
.price{font-family:var(--fh,"Sora"),sans-serif;font-size:38px;font-weight:700}.price small{font:400 15px var(--fb,"DM Sans"),sans-serif;color:var(--mute)}
.feat{display:flex;gap:8px;font-size:15px}.feat::before{content:"";flex:none;width:16px;height:16px;margin-top:4px;background:no-repeat center/contain url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232F855A' stroke-width='3'%3E%3Cpath d='M5 12l5 5L20 7'/%3E%3C/svg%3E")}
.grid4{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:14px}
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:20px}
.mute{color:var(--mute)}.soft{color:var(--soft);font-size:14px}.small{font-size:13px}
footer{border-top:1px solid var(--line);margin-top:40px;padding:24px 0;color:var(--soft);font-size:14px}
/* forms */
label.f{display:flex;flex-direction:column;gap:5px;font-size:14px;font-weight:700}
input,select,textarea{font:500 16px var(--fb,"DM Sans"),sans-serif;padding:11px 12px;border:1px solid #CFC8BA;border-radius:8px;background:var(--card);color:var(--ink);width:100%}
input:focus,select:focus,textarea:focus{outline:2px solid var(--accent);border-color:var(--accent)}
.fgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{border:2px solid var(--line);background:var(--card);color:var(--ink);cursor:pointer;padding:10px 14px;border-radius:10px;text-align:left;font:500 15px var(--fb,"DM Sans"),sans-serif}
.chip.on{border-color:var(--accent);background:var(--accent-soft)}
.two{display:flex;flex-wrap:wrap;gap:24px;align-items:flex-start;padding:16px 0 40px}
.two>.main{flex:1 1 520px;display:flex;flex-direction:column;gap:16px}
.summary{flex:1 1 320px;background:var(--ink);color:var(--paper);border-radius:16px;padding:24px;display:flex;flex-direction:column;gap:10px;position:sticky;top:12px}
.summary .row{display:flex;justify-content:space-between;gap:12px}.summary .tot{font-family:var(--fh,"Sora"),sans-serif;font-size:24px;font-weight:700}
.summary hr{border:0;border-top:1px solid #33476E;width:100%}
.msg{font-size:14px;min-height:18px}.msg.ok{color:var(--ok);font-weight:700}.msg.bad{color:var(--bad);font-weight:700}
.note{background:var(--accent-soft);border:1px solid var(--accent-line,#F3C9AE);border-radius:10px;padding:12px 14px;font-size:14px}
.note.red{background:var(--bad-soft);border-color:#F5B5B0}.note.green{background:var(--ok-soft);border-color:#B6E0C2}
.done{max-width:640px;margin:40px auto;display:flex;flex-direction:column;gap:14px;text-align:center;align-items:center}
.key{font-family:var(--fh,"Sora"),sans-serif;font-size:22px;letter-spacing:2px;background:var(--ink);color:var(--paper);padding:12px 18px;border-radius:10px;word-break:break-all}
/* admin */
.adm{display:flex;min-height:100vh}
.side{flex:0 0 220px;background:var(--ink);color:var(--paper);padding:20px 12px;display:flex;flex-direction:column;gap:4px}
.side button{all:unset;cursor:pointer;padding:10px 12px;border-radius:8px;color:#C9D3E3}
.side button.on{background:var(--navy2);color:#fff;font-weight:700}
.body{flex:1;min-width:0;padding:24px;display:flex;flex-direction:column;gap:18px}
.tbl{background:var(--card);border:1px solid var(--line);border-radius:12px;overflow-x:auto}
.tbl table{width:100%;border-collapse:collapse}
.tbl th,.tbl td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--line);font-size:14px;white-space:nowrap;vertical-align:top}
.tbl th{background:var(--paper)}
.badge{padding:3px 9px;border-radius:20px;font-weight:700;font-size:12px}
.b-ACTIVE,.b-PAID,.b-SENT{background:var(--ok-soft);color:var(--ok)}.b-TRIAL,.b-CREATED,.b-SENDING{background:var(--accent-soft);color:var(--accent)}
.b-EXPIRED,.b-FAILED,.b-NOT_SENT{background:var(--bad-soft);color:var(--bad)}.b-DISABLED{background:#ECEEF2;color:var(--mute)}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px}
.kpi{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px}.kpi b{display:block;font-family:var(--fh,"Sora"),sans-serif;font-size:26px}
.modal{position:fixed;inset:0;background:rgba(20,33,61,.45);display:flex;align-items:flex-start;justify-content:center;padding:40px 12px;overflow:auto;z-index:20}
.modal .box{background:var(--card);border-radius:14px;padding:22px;width:100%;max-width:640px;display:flex;flex-direction:column;gap:14px}
.toast{position:fixed;right:12px;top:12px;z-index:30;max-width:min(420px,calc(100vw - 24px));padding:14px 18px;font-size:15px;box-shadow:0 8px 24px rgba(0,0,0,.25);border-radius:10px;color:#fff;font-weight:700;background:var(--ok)}.toast.err{background:var(--bad)}
.hide{display:none!important}
@media (max-width:760px){.adm{flex-direction:column}.side{flex:none;flex-direction:row;flex-wrap:wrap;padding:10px}.body{padding:14px}}
.agree{display:flex;gap:10px;align-items:flex-start;font-size:13px;line-height:1.45;color:#DCE3EE;cursor:pointer}
.agree input{width:18px;height:18px;flex:none;margin-top:2px;padding:0}
.agree a{color:var(--hi,#F2A65A)}
.legal-links{display:flex;flex-wrap:wrap;gap:6px 16px;margin-top:8px;font-size:13px}

.announce{background:var(--ink);color:#fff;text-align:center;font:700 15px var(--fb,"DM Sans"),sans-serif;padding:9px 16px;position:relative;overflow:hidden}.announce.preview{background:#B45309}
/* announcement bar colours */
.ann-orange{background:#E8590C}.ann-dark{background:#14213D}.ann-red{background:#B42318}.ann-green{background:#2F855A}.ann-gold{background:#F2B33D;color:#14213D}
/* scrolling: the text runs right to left, pauses while the mouse is on it */
.fx-scroll{padding:9px 0;white-space:nowrap}.ann-track{display:inline-flex;gap:80px;padding-left:100%;animation:annScroll linear infinite}.fx-scroll:hover .ann-track{animation-play-state:paused}
@keyframes annScroll{from{transform:translateX(0)}to{transform:translateX(-100%)}}
/* shine: a soft light sweeps across every few seconds */
.fx-shine::after{content:"";position:absolute;top:0;bottom:0;left:-40%;width:30%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.45),transparent);transform:skewX(-20deg);animation:annShine 3.2s ease-in-out infinite}
@keyframes annShine{0%{left:-40%}60%,100%{left:120%}}
/* pulse: a gentle glow, no hard flashing */
.fx-pulse span{display:inline-block;animation:annPulse 1.8s ease-in-out infinite}
@keyframes annPulse{0%,100%{transform:scale(1);text-shadow:none}50%{transform:scale(1.04);text-shadow:0 0 12px rgba(255,255,255,.7)}}
/* people who turn off motion on their phone / PC see a still bar */
@media (prefers-reduced-motion:reduce){.ann-track,.fx-shine::after,.fx-pulse span{animation:none}.ann-track{padding-left:0}.ann-track span[aria-hidden]{display:none}.fx-scroll{white-space:normal;padding:9px 16px}}
/* admin on a phone (build 75): one menu strip you can swipe sideways instead of four uneven rows */
@media (max-width:760px){
  .side{flex-direction:row;flex-wrap:nowrap;overflow-x:auto;align-items:center;gap:2px;padding:8px 10px;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .side::-webkit-scrollbar{display:none}
  .side>*{flex:0 0 auto;white-space:nowrap}
  .side .brand{position:sticky;left:-10px;z-index:1;background:var(--ink);padding:6px 10px 6px 10px!important;font-size:16px!important;box-shadow:8px 0 8px -6px rgba(0,0,0,.5)}
  .side>div:not(.brand){display:none}
  .side button,.side a{padding:9px 11px!important;font-size:15px;white-space:nowrap!important;flex:0 0 auto}
}
/* build 118: Flexible plan module picker */
.mods{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px}
.mod{display:flex;gap:10px;align-items:flex-start;border:2px solid var(--line);border-radius:12px;padding:12px;cursor:pointer;background:var(--card)}
.mod input{width:20px;height:20px;margin:2px 0 0;flex:none;accent-color:var(--accent)}
.mod span{display:flex;flex-direction:column;gap:2px;min-width:0}
.mod small{color:var(--soft);font-size:13px;line-height:1.35}
.mod em{font-style:normal;font-weight:700;font-size:13px;color:var(--accent);margin-top:4px}
.mod.on{border-color:var(--accent);background:var(--accent-soft)}
.mod.own{border-color:var(--ok);background:var(--ok-soft);cursor:default}.mod.own em{color:var(--ok)}
.flexbase{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;align-items:center;background:var(--paper);border:1px solid var(--line);border-radius:12px;padding:12px 14px}

/* build 118: ready packs on top of Basic, and a custom plan code */
.packs{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:10px}
.pack{display:flex;flex-direction:column;gap:3px;text-align:left;border:2px solid var(--line);border-radius:12px;padding:12px;background:var(--card);cursor:pointer;font:inherit;color:inherit}
.pack b{font-size:15px}.pack .pp{font-weight:700;font-size:18px;color:var(--ink,#101828)}
.pack small{color:var(--soft);font-size:12.5px;line-height:1.35}.pack em{font-style:normal;font-weight:700;font-size:12.5px;color:var(--ok)}
.pack.on{border-color:var(--accent);background:var(--accent-soft)}.pack.mine{cursor:default}
.pack:disabled{cursor:default;opacity:.55}
.mods.locked .mod{cursor:default}
.custom-note{background:var(--ok-soft);border:1px solid var(--ok);border-radius:12px;padding:12px 14px;font-size:14px}
.flexpk{display:flex;flex-direction:column;gap:6px;margin-top:6px}
.flexpk a{display:flex;justify-content:space-between;gap:10px;align-items:center;padding:8px 10px;border:1px solid var(--line);border-radius:10px;color:inherit;text-decoration:none;font-size:14px}
.flexpk a:hover{border-color:var(--accent)}.flexpk em{font-style:normal;color:var(--ok);font-weight:700;font-size:12.5px}.flexpk small{font-size:12px}

/* build 135: page templates (Admin → Look & theme) — classic = as above */
body.tpl-modern .card,body.tpl-modern .plan,body.tpl-modern .kpi{border-radius:20px;border-color:transparent;box-shadow:0 1px 2px rgba(15,23,42,.06),0 10px 30px rgba(15,23,42,.08)}
body.tpl-modern .btn{border-radius:999px}body.tpl-modern .btn.small{border-radius:999px}
body.tpl-modern .offer{border-radius:24px;background:linear-gradient(135deg,var(--ink),var(--navy2) 55%,var(--accent));box-shadow:0 18px 40px rgba(15,23,42,.18)}
body.tpl-modern .tabs{border-radius:999px}body.tpl-modern .tabs button{border-radius:999px}
body.tpl-modern input,body.tpl-modern select,body.tpl-modern textarea{border-radius:12px}
body.tpl-modern .side{background:linear-gradient(180deg,var(--ink),var(--navy2))}
body.tpl-minimal{background:var(--card)}
body.tpl-minimal .card,body.tpl-minimal .plan,body.tpl-minimal .kpi{box-shadow:none!important;border-radius:6px;border:1px solid var(--line)}
body.tpl-minimal .btn{border-radius:6px}body.tpl-minimal .btn:not(.orange):not(.green):not(.red){background:transparent;color:var(--ink);border:1.5px solid var(--ink);padding:10.5px 18.5px}
body.tpl-minimal .offer{background:var(--card);color:var(--ink);border:2px solid var(--accent);border-radius:8px}body.tpl-minimal .offer *{color:inherit!important}body.tpl-minimal .offer h2,body.tpl-minimal .offer h3{color:var(--accent)!important}body.tpl-minimal .offer b{color:var(--accent)}
body.tpl-minimal .side{background:var(--card);border-right:1px solid var(--line)}body.tpl-minimal .side button{color:var(--mute)}body.tpl-minimal .side button.on{background:var(--accent-soft);color:var(--accent)}body.tpl-minimal .side .brand,body.tpl-minimal .side *{color:inherit}
body.tpl-minimal .plan.pop{box-shadow:0 0 0 2px var(--accent)!important}
body.tpl-bold .nav{border-bottom:4px solid var(--accent)}body.tpl-bold .navlinks a:not(.btn){font-weight:700;text-decoration:none;color:var(--ink)}
body.tpl-bold h1{letter-spacing:-.02em}body.tpl-bold .hero h1{font-size:clamp(36px,6vw,62px)}
body.tpl-bold h2{position:relative;padding-bottom:8px}body.tpl-bold h2::after{content:"";position:absolute;left:0;bottom:0;width:56px;height:4px;border-radius:2px;background:var(--accent)}
body.tpl-bold .offer{background:var(--accent);color:#fff}body.tpl-bold .offer b{color:#fff}
body.tpl-bold .plan{border-width:2px;border-color:var(--ink)}body.tpl-bold .btn{text-transform:uppercase;letter-spacing:.04em}
body.tpl-bold .side button.on{background:var(--accent)}

/* Admin → Look & theme */
.lk-themes{display:grid;grid-template-columns:repeat(auto-fill,minmax(86px,1fr));gap:8px;margin-top:6px}
.lk-th{all:unset;cursor:pointer;display:flex;flex-direction:column;gap:4px;align-items:center;padding:6px;border:2px solid var(--line);border-radius:10px;background:var(--card)}
.lk-th span{display:flex;gap:4px;padding:6px;border-radius:6px;width:100%;justify-content:center;box-sizing:border-box}.lk-th i{width:18px;height:18px;border-radius:50%;display:block}
.lk-th.on,.lk-tp.on{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.lk-th small,.lk-tp small{font-size:11px;color:var(--mute);text-align:center}
.lk-tpls{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:8px;margin-top:6px}
.lk-tp{all:unset;cursor:pointer;display:flex;flex-direction:column;gap:4px;padding:6px;border:2px solid var(--line);border-radius:10px;background:var(--card)}
.lk-mini{border-radius:6px;overflow:hidden;border:1px solid rgba(0,0,0,.08)}

/* build 142: template "3D" — depth, light, tilting cards and the plan wheel (fx3d.js) */
body.tpl-3d{background:radial-gradient(1100px 620px at 85% -8%,var(--accent-soft),transparent 62%),radial-gradient(900px 520px at -12% 28%,var(--accent-soft),transparent 60%),var(--paper);background-attachment:fixed;overflow-x:hidden}
body.tpl-3d::before{content:"";position:fixed;left:-50%;right:-50%;bottom:-34vh;height:78vh;z-index:-1;pointer-events:none;opacity:.55;
  background-image:linear-gradient(var(--line) 1.5px,transparent 1.5px),linear-gradient(90deg,var(--line) 1.5px,transparent 1.5px);background-size:64px 64px;
  transform:perspective(520px) rotateX(64deg);transform-origin:50% 0;-webkit-mask:linear-gradient(transparent,#000 35%,#000);mask:linear-gradient(transparent,#000 35%,#000)}
body.tpl-3d::after{content:"";position:fixed;z-index:-1;pointer-events:none;width:420px;height:420px;right:-120px;top:22vh;border-radius:50%;background:radial-gradient(circle at 35% 35%,var(--hi),var(--accent) 60%,transparent 70%);filter:blur(60px);opacity:.22;animation:fx3Float 14s ease-in-out infinite alternate}
@keyframes fx3Float{from{transform:translate(0,0) scale(1)}to{transform:translate(-120px,80px) scale(1.15)}}
body.tpl-3d .nav{position:relative;z-index:2}
body.tpl-3d .hero h1{letter-spacing:-.02em;text-shadow:1px 1px 0 var(--accent-line),2px 2px 0 var(--accent-line),3px 3px 0 var(--accent-soft),0 14px 30px rgba(15,23,42,.14)}
body.tpl-3d h2{text-shadow:1px 1px 0 var(--accent-line),2px 2px 0 var(--accent-soft)}
body.tpl-3d .btn{border-radius:12px;box-shadow:0 5px 0 rgba(0,0,0,.28),0 12px 22px rgba(15,23,42,.16);transition:transform .15s,box-shadow .15s}
body.tpl-3d .btn:hover{transform:translateY(-2px);box-shadow:0 7px 0 rgba(0,0,0,.28),0 16px 28px rgba(15,23,42,.2)}
body.tpl-3d .btn:active{transform:translateY(4px);box-shadow:0 1px 0 rgba(0,0,0,.28),0 4px 10px rgba(15,23,42,.14)}
body.tpl-3d .btn.ghost{box-shadow:0 5px 0 var(--ink),0 12px 22px rgba(15,23,42,.12);background:var(--card)}
body.tpl-3d .tabs{border-radius:999px;box-shadow:inset 0 2px 6px rgba(15,23,42,.12),0 1px 0 #fff}
body.tpl-3d .tabs button{border-radius:999px}body.tpl-3d .tabs button.on{box-shadow:0 3px 0 rgba(0,0,0,.3),0 6px 12px rgba(15,23,42,.2)}
body.tpl-3d .card,body.tpl-3d .plan,body.tpl-3d .kpi{border-radius:18px;border-color:transparent;box-shadow:0 1px 0 #fff inset,0 2px 4px rgba(15,23,42,.06),0 18px 40px -12px rgba(15,23,42,.22)}
body.tpl-3d .offer{border-radius:22px;background:linear-gradient(145deg,var(--navy2),var(--ink) 55%);box-shadow:0 30px 60px -18px rgba(15,23,42,.5),0 0 0 1px rgba(255,255,255,.06) inset}
body.tpl-3d .offer,body.tpl-3d .grid4 .card,body.tpl-3d .plans:not(.w3-on) .plan{position:relative;transform:perspective(900px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg));transition:transform .5s cubic-bezier(.2,.8,.2,1),opacity .8s,box-shadow .3s}
body.tpl-3d .fx-tilt{transition:transform .12s ease-out,box-shadow .3s!important;box-shadow:0 30px 60px -16px rgba(15,23,42,.35)}
body.tpl-3d .fx-tilt::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;background:radial-gradient(circle at var(--gx,50%) var(--gy,50%),rgba(255,255,255,.35),transparent 55%);mix-blend-mode:soft-light}
/* sections come up in 3D */
body.tpl-3d .fx-rv{opacity:0;transform:perspective(900px) rotateX(22deg) translateY(36px)}
body.tpl-3d .fx-rv.fx-in{opacity:1;transform:perspective(900px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg));transition:transform .9s cubic-bezier(.2,.8,.2,1) var(--d,0ms),opacity .9s var(--d,0ms)}
body.tpl-3d .fx-rv.fx-in.fx-tilt{transition:transform .12s ease-out!important}

/* the plan wheel: the plans section holds still while scrolling turns the wheel */
.w3-sec{height:calc(100vh + (var(--w3n) - 1) * 55vh);padding:0!important;display:block!important}
.w3-pin{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;justify-content:center;gap:14px}
.w3-sec.w3-free{height:auto}.w3-sec.w3-free .w3-pin{position:static;height:auto;padding:20px 0}
.plans.w3-on{display:block;padding:0}
.w3{position:relative;--w3w:320px;--w3r:600px;--w3h:560px;--w3hu:560px;--w3s:1}
.w3-stage{position:relative;height:calc(var(--w3h) + 56px);perspective:1500px;perspective-origin:50% 35%;outline:none;cursor:grab;user-select:none;-webkit-user-select:none}
.w3-stage:focus-visible{outline:2px dashed var(--accent);outline-offset:6px;border-radius:18px}
.w3-stage.w3-drag{cursor:grabbing}
.w3-scale{position:absolute;inset:0 0 56px 0;transform:scale(var(--w3s));transform-origin:50% 50%;transform-style:preserve-3d}
.w3-ring{position:absolute;left:50%;top:50%;width:0;height:0;transform-style:preserve-3d}
.w3-ring .plan{position:absolute;left:0;top:0;width:var(--w3w);margin:0;display:flex!important;flex-direction:column;gap:12px;backface-visibility:hidden;-webkit-backface-visibility:hidden;will-change:transform,opacity}
.w3-ring .plan:not(.w3-front){cursor:pointer}
/* the wheel ring is drawn on its own layer under the cards (one 3D scene would let it show through the front card); the badge sits inside the card */
.w3-under{pointer-events:none}
/* the scene layers are flat at the front of the wheel: they must not catch the clicks meant for the plans */
.w3-scale,.w3-ring{pointer-events:none}.w3-ring .plan{pointer-events:auto}
.w3-ring .pill{position:static;transform:none;align-self:flex-start;margin-bottom:-4px}
.w3-ring .plan:not(.w3-front) .btn,.w3-ring .plan:not(.w3-front) a{pointer-events:none}
.w3-ring .plan.w3-front{box-shadow:0 0 0 2px var(--accent),0 40px 70px -20px rgba(15,23,42,.45),0 1px 0 #fff inset}
.w3-ring .plan.pop.w3-front{box-shadow:0 0 0 3px var(--accent),0 40px 70px -20px rgba(15,23,42,.45)}
.w3-dial{position:absolute;left:0;top:0;width:calc(var(--w3r) * 2);height:calc(var(--w3r) * 2);border-radius:50%;pointer-events:none;
  background:repeating-conic-gradient(from 0deg,var(--accent) 0 .5deg,transparent .5deg 5.667deg),repeating-conic-gradient(from 0deg,var(--ink) 0 1deg,transparent 1deg 34deg);
  -webkit-mask:radial-gradient(closest-side,transparent calc(100% - 26px),#000 calc(100% - 25px),#000 calc(100% - 2px),transparent 100%);mask:radial-gradient(closest-side,transparent calc(100% - 26px),#000 calc(100% - 25px),#000 calc(100% - 2px),transparent 100%);opacity:.5}
.w3-glow{position:absolute;left:50%;bottom:-18px;width:calc(var(--w3w) * 1.25);height:60px;transform:translateX(-50%);border-radius:50%;background:radial-gradient(closest-side,rgba(15,23,42,.28),transparent);filter:blur(6px);pointer-events:none}
.w3-ctl{display:flex;align-items:center;justify-content:center;gap:14px}
.w3-arrow{width:46px;height:46px;border-radius:50%;border:0;cursor:pointer;background:var(--ink);color:var(--paper);font:700 26px/1 var(--fh,"Sora"),sans-serif;box-shadow:0 4px 0 rgba(0,0,0,.3),0 10px 18px rgba(15,23,42,.2);transition:transform .15s}
.w3-arrow:hover{transform:translateY(-2px)}.w3-arrow:active{transform:translateY(3px)}.w3-arrow:disabled{opacity:.3;cursor:default;transform:none}
.w3-dots{display:flex;gap:8px}.w3-dots button{width:10px;height:10px;padding:0;border:0;border-radius:99px;background:var(--line);cursor:pointer;transition:width .25s,background .25s}
.w3-dots button.on{width:30px;background:var(--accent)}
.w3-hint{display:flex;justify-content:center;gap:14px;align-items:baseline;color:var(--soft);font-size:13px;letter-spacing:.04em}
.w3-count{font:700 15px var(--fh,"Sora"),sans-serif;color:var(--ink);letter-spacing:.12em}
@media (max-width:640px){.w3-hint span:last-child{display:none}.w3-stage{perspective:1100px}}
@media (prefers-reduced-motion:reduce){body.tpl-3d::after{animation:none}body.tpl-3d .fx-rv{opacity:1;transform:none}}

/* build 143: every plan box the same size (the button at the bottom), the wheel turns by itself */
.w3-ring .plan .feats{flex:1}
.w3-ring .plan > .btn{margin-top:auto}
.w3-state{transition:color .2s}.w3.w3-paused .w3-state{color:var(--accent)}
.w3.w3-paused .w3-state::before{content:"⏸ "}
/* the opening scene: the logo flies in from the right with speed lines, then the view goes into it */
html.fxi-lock,html.fxi-lock body{overflow:hidden}
#fx-intro{position:fixed;inset:0;z-index:9999;overflow:hidden;background:radial-gradient(120% 90% at 50% 50%,var(--card),var(--paper) 60%,var(--accent-soft));display:flex;align-items:center;justify-content:center;perspective:900px;transition:opacity .7s ease .1s}
#fx-intro.fxi-out{opacity:0;pointer-events:none}
.fxi-lines{position:absolute;inset:0;opacity:0;animation:fxiLinesIn .15s ease 1s forwards,fxiLinesOut .4s ease 2.6s forwards}
@keyframes fxiLinesIn{to{opacity:1}}
.fxi-lines i{position:absolute;right:-60vw;border-radius:99px;background:linear-gradient(90deg,transparent,var(--accent) 40%,var(--ink));opacity:.55;animation:fxiLine linear infinite}
.fxi-lines i:nth-child(3n){background:linear-gradient(90deg,transparent,var(--ink));opacity:.35}
@keyframes fxiLine{from{transform:translateX(0)}to{transform:translateX(-190vw)}}
@keyframes fxiLinesOut{to{opacity:0}}
.fxi-fly{animation:fxiFly 1s cubic-bezier(.3,.55,.2,1) 1.55s both}
@keyframes fxiFly{0%{transform:translateX(110vw) skewX(-24deg) scaleX(1.5);filter:blur(10px)}55%{filter:blur(2px)}78%{transform:translateX(-3vw) skewX(6deg) scaleX(.97);filter:none}100%{transform:none}}
.fxi-logo{position:relative;width:min(560px,78vw)}
.fxi-logo img{display:block;width:100%;height:auto;filter:drop-shadow(0 18px 30px rgba(15,23,42,.25))}
.fxi-logo::after{content:"";position:absolute;inset:-10% -5%;background:linear-gradient(100deg,transparent 35%,rgba(255,255,255,.85) 50%,transparent 65%);transform:translateX(-120%);opacity:0;animation:fxiShine .6s ease 2.55s forwards;mix-blend-mode:overlay}
@keyframes fxiShine{0%{opacity:1}90%{opacity:1}to{transform:translateX(120%);opacity:0}}
/* speed trail behind the logo while it flies */
.fxi-trail{position:absolute;left:100%;top:18%;bottom:18%;width:70vw;background:repeating-linear-gradient(180deg,var(--accent) 0 3px,transparent 3px 11px);-webkit-mask:linear-gradient(90deg,#000,transparent);mask:linear-gradient(90deg,#000,transparent);opacity:0;animation:fxiTrail .9s ease 1.55s both}
@keyframes fxiTrail{0%{opacity:.75;transform:scaleX(1);transform-origin:0 50%}80%{opacity:.4}100%{opacity:0;transform:scaleX(.1);transform-origin:0 50%}}
/* into the logo: it comes at you and the website appears behind it */
#fx-intro.fxi-zoom .fxi-logo{animation:fxiInto .6s cubic-bezier(.55,0,.8,.3) forwards}
@keyframes fxiInto{0%{transform:none}60%{opacity:1}to{transform:translateZ(700px) scale(2.4);opacity:0;filter:blur(8px)}}
#fx-intro.fxi-zoom{background:transparent;transition:background .5s}
body.fxi-wait > *:not(#fx-intro){opacity:0}
body.fxi-enter > *:not(#fx-intro){animation:fxiSite .95s cubic-bezier(.2,.8,.2,1) both}
@keyframes fxiSite{from{opacity:0;transform:perspective(1200px) translateZ(-260px) rotateX(8deg)}to{opacity:1;transform:none}}
.fxi-skip{position:absolute;right:18px;bottom:18px;border:0;background:transparent;color:var(--soft);font:600 14px var(--fb,"DM Sans"),sans-serif;cursor:pointer;padding:8px 12px}
@media (prefers-reduced-motion:reduce){#fx-intro{display:none}body.fxi-wait > *{opacity:1!important}}

/* build 144: the opening starts with M for Make and D for Deliver flashing, then FAST streaks across, then the logo */
.fxi-w{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;opacity:0;pointer-events:none}
.fxi-w b{font:800 clamp(140px,26vw,300px)/.9 var(--fh,"Sora"),sans-serif;letter-spacing:-.04em;color:var(--ink);text-shadow:4px 4px 0 var(--accent-line),0 24px 50px rgba(15,23,42,.22)}
.fxi-w span{font:700 clamp(18px,2.6vw,30px) var(--fb,"DM Sans"),sans-serif;letter-spacing:.55em;text-transform:uppercase;color:var(--accent);padding-left:.55em}
.fxi-d b{color:var(--accent);text-shadow:4px 4px 0 var(--ink),0 24px 50px rgba(15,23,42,.22)}.fxi-d span{color:var(--ink)}
.fxi-m{animation:fxiPop .52s cubic-bezier(.2,.9,.3,1) .05s both}
.fxi-d{animation:fxiPop .52s cubic-bezier(.2,.9,.3,1) .55s both}
@keyframes fxiPop{0%{opacity:0;transform:scale(.55);filter:blur(8px)}22%{opacity:1;transform:scale(1.08);filter:none}70%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(1.35);filter:blur(4px)}}
.fxi-f b{font-style:italic;color:var(--accent);text-shadow:5px 5px 0 var(--ink),0 24px 50px rgba(15,23,42,.22)}
.fxi-f{animation:fxiStreak .58s cubic-bezier(.3,.7,.3,1) 1.02s both}
@keyframes fxiStreak{0%{opacity:0;transform:translateX(75vw) skewX(-24deg) scaleX(1.4);filter:blur(10px)}32%{opacity:1;transform:translateX(0) skewX(-8deg);filter:none}72%{opacity:1;transform:translateX(-2vw) skewX(-8deg)}100%{opacity:0;transform:translateX(-90vw) skewX(-28deg) scaleX(1.5);filter:blur(12px)}}
/* a flash of light at each new letter / word and when the logo lands */
.fxi-flash{position:absolute;inset:0;pointer-events:none;background:radial-gradient(circle at 50% 50%,#fff 0,var(--hi) 22%,transparent 62%);opacity:0;animation:fxiFlash 2.9s linear both}
@keyframes fxiFlash{0%{opacity:.9}5%{opacity:0}18%{opacity:0}19%{opacity:.85}24%{opacity:0}35%{opacity:0}36%{opacity:.7}41%{opacity:0}78%{opacity:0}80%{opacity:.95}88%{opacity:0}100%{opacity:0}}

/* build 145: Admin → Look & theme → colour theme by day */
.lk-days{display:flex;flex-direction:column;gap:8px;border:1px solid var(--line);border-radius:12px;padding:12px;background:var(--paper)}
.lk-days table{width:100%;border-collapse:collapse;font-size:14px}.lk-days th{text-align:left;font-size:12px;color:var(--mute);padding:4px 6px}
.lk-days td{padding:5px 6px;border-top:1px solid var(--line);vertical-align:middle}.lk-days tr.lk-today td{background:var(--accent-soft)}
.lk-days select{padding:7px 6px;font-size:14px;flex:1;min-width:110px}.lk-dsel{display:flex;gap:6px;align-items:center}.lk-days td:first-child{white-space:nowrap}.lk-days [data-act="lk-dprev"]{padding:6px 10px}
.lk-dot{flex:none;display:inline-flex;gap:2px;padding:4px;border-radius:6px;border:1px solid var(--line)}.lk-dot i{width:10px;height:10px;border-radius:50%;display:block}.lk-dot0{width:28px;height:20px}
@media (max-width:760px){.lk-days th:nth-child(4),.lk-days td:nth-child(4){display:none}}

/* build 147: hero banner "before → with MDFAST" (story.js) */
.st-slot{flex:1 1 440px;min-width:0}
.story{background:var(--card);border-radius:20px;padding:14px 14px 12px;box-shadow:0 1px 0 #fff inset,0 24px 50px -18px rgba(15,23,42,.35);display:flex;flex-direction:column;gap:10px;position:relative;overflow:hidden}
.st-top{display:flex;flex-direction:column;gap:8px}
.st-tag{font:700 12px var(--fb,"DM Sans"),sans-serif;letter-spacing:.12em;text-transform:uppercase;color:var(--accent)}
.st-chips{display:flex;flex-wrap:wrap;gap:6px}
.st-chips button{border:1px solid var(--line);background:var(--paper);color:var(--ink);border-radius:99px;padding:5px 11px;font:600 12.5px var(--fb,"DM Sans"),sans-serif;cursor:pointer;transition:background .2s,color .2s}
.st-chips button.on{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.st-box{position:relative;border-radius:14px;overflow:hidden;background:linear-gradient(180deg,#EEF1F5,#E2E7EE);transition:background .5s}
.story[data-k=fixed] .st-box{background:linear-gradient(180deg,var(--accent-soft),var(--card))}
.st-svg{display:block;width:100%;height:auto}
.st-m{display:none}
.story[data-s=neon] .st-neon,.story[data-s=router] .st-router,.story[data-s=laser] .st-laser,.story[data-s=quote] .st-quote,.story[data-s=counter] .st-counter{display:inline}
.story[data-k=pain] .st-ok-f,.story[data-k=flash] .st-ok-f{display:none}
.story[data-k=fixed] .st-pain-f{display:none}
.st-svg *{transform-box:fill-box;transform-origin:center}
/* the shop owner */
.story[data-k=pain] .st-head{animation:stShake .5s ease-in-out infinite alternate}
@keyframes stShake{from{transform:rotate(-3deg)}to{transform:rotate(3deg)}}
.st-sweat{animation:stSweat 1.1s ease-in infinite}.st-s2{animation-delay:.5s}
@keyframes stSweat{0%{transform:translateY(-4px);opacity:0}30%{opacity:1}100%{transform:translateY(22px);opacity:0}}
.st-papers rect{animation:stPaper 1.6s ease-in-out infinite alternate}.st-papers rect:nth-child(2){animation-delay:.4s}.st-papers rect:nth-child(3){animation-delay:.8s}
@keyframes stPaper{from{transform:translateY(0) rotate(-12deg)}to{transform:translateY(-12px) rotate(14deg)}}
.st-q{animation:stBlink .6s steps(2) infinite}
@keyframes stBlink{50%{opacity:0}}
.st-arm-up{transform-origin:0% 100%!important;animation:stThumb .9s cubic-bezier(.3,1.6,.5,1) both}
@keyframes stThumb{from{transform:rotate(-40deg)}to{transform:none}}
.st-spark path{animation:stSpark 1.4s ease-in-out infinite}.st-spark path:nth-child(2){animation-delay:.45s}.st-spark path:nth-child(3){animation-delay:.9s}
@keyframes stSpark{0%,100%{transform:scale(.4);opacity:.3}50%{transform:scale(1.15);opacity:1}}
/* neon & LED */
.st-neon-t{fill:none;stroke:#5B6170;stroke-width:2.5;stroke-dasharray:6 5}
.story[data-k=fixed] .st-neon-t{stroke:var(--hi);stroke-width:4;stroke-dasharray:none;filter:url(#stGlow);animation:stFlick 2.4s linear both}
@keyframes stFlick{0%,8%,12%,20%{opacity:.15}10%,16%,24%,100%{opacity:1}}
.st-leds circle{fill:#FFE9A8;opacity:.12;animation:stLed 1.8s ease-in-out var(--d,0ms) infinite}
@keyframes stLed{0%,100%{opacity:.25}50%{opacity:1;fill:#FFF6D8}}
/* router + laser: the cut drawn by the machine */
.st-cut{stroke-dasharray:1600;stroke-dashoffset:0}
.story[data-k=pain] .st-router .st-cut{opacity:.35}
.story[data-k=fixed] .st-router .st-cut,.story[data-k=fixed] .st-parts .st-cut{animation:stDraw 3.4s ease-out both}
.story[data-k=fixed] .st-parts .st-cut{stroke-dasharray:420;animation-duration:2.6s}
@keyframes stDraw{from{stroke-dashoffset:1600}to{stroke-dashoffset:0}}
.story[data-k=fixed] .st-parts .st-cut{animation-name:stDraw2}
@keyframes stDraw2{from{stroke-dashoffset:420}to{stroke-dashoffset:0}}
.st-gantry{animation:stGantry 1.7s ease-in-out infinite alternate}
@keyframes stGantry{from{transform:translateX(0)}to{transform:translateX(292px)}}
.st-spindle{animation:stSpin 0.85s ease-in-out infinite alternate}
@keyframes stSpin{from{transform:translateY(0)}to{transform:translateY(140px)}}
.st-head2{animation:stLaser 2.6s linear infinite}
@keyframes stLaser{0%{transform:translate(40px,20px)}25%{transform:translate(250px,30px)}50%{transform:translate(230px,120px)}75%{transform:translate(60px,130px)}100%{transform:translate(40px,20px)}}
.st-beam{animation:stBeam .12s steps(2) infinite}
@keyframes stBeam{50%{opacity:.35}}
/* quotation chat */
.st-b{animation:stPop .35s cubic-bezier(.3,1.6,.5,1) both;transform-origin:0% 100%!important}
.st-b2{animation-delay:.5s}.st-b3{animation-delay:1s}.st-b4{animation-delay:1.5s}
.story[data-k=fixed] .st-quote .st-b2{animation-delay:.25s}.story[data-k=fixed] .st-quote .st-b3{animation-delay:1.6s}
@keyframes stPop{from{transform:scale(0);opacity:0}to{transform:none;opacity:1}}
/* counter */
.st-person{animation:stBob .7s ease-in-out var(--d) infinite alternate}
@keyframes stBob{to{transform:translateY(-4px)}}
.st-slip{animation:stSlip 1.4s ease-out both}
@keyframes stSlip{from{transform:translateY(-62px)}to{transform:none}}
.st-upi{animation:stPop .4s cubic-bezier(.3,1.6,.5,1) 1.2s both}
/* the MDFAST flash between "before" and "with MDFAST" */
.st-flash{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;pointer-events:none;opacity:0;background:radial-gradient(circle,#fff 0,var(--hi) 30%,transparent 70%)}
.story[data-k=flash] .st-flash{opacity:1}
.st-flash b{font:900 italic clamp(34px,6vw,64px)/1 var(--fh,"Sora"),sans-serif;color:var(--accent);text-shadow:4px 4px 0 var(--ink);letter-spacing:-.02em}
.story[data-k=flash] .st-flash b{animation:stZip .65s cubic-bezier(.2,.8,.3,1) both}
@keyframes stZip{0%{transform:translateX(120%) skewX(-25deg);filter:blur(6px)}45%{transform:translateX(0) skewX(-8deg);filter:none}100%{transform:translateX(-4%) skewX(-8deg)}}
.st-flash i{position:absolute;height:3px;right:-40%;width:50%;border-radius:3px;background:linear-gradient(90deg,transparent,var(--accent))}
.st-flash i:nth-child(1){top:30%}.st-flash i:nth-child(2){top:52%;height:2px}.st-flash i:nth-child(3){top:70%}
.story[data-k=flash] .st-flash i{animation:stLine .4s linear infinite}
@keyframes stLine{to{transform:translateX(-260%)}}
/* captions under the picture */
.st-cap{position:relative;min-height:64px}
.st-cap p{position:absolute;inset:0;margin:0;display:flex;flex-direction:column;gap:2px;font-size:15px;line-height:1.35;transition:opacity .35s,transform .35s}
.st-cap b{font-size:12px;letter-spacing:.1em;text-transform:uppercase}
.st-bad b{color:#C2410C}.st-good b{color:var(--accent)}.st-good span{font-weight:600;color:var(--ink)}
.story[data-k=fixed] .st-bad,.story:not([data-k=fixed]) .st-good{opacity:0;transform:translateY(8px)}
.st-bar{height:4px;border-radius:4px;background:var(--line);overflow:hidden}.st-bar i{display:block;height:100%;background:var(--accent);transform-origin:0 50%;transform:scaleX(0)}
.story.st-hold .st-tag::after{content:" · stopped";color:var(--soft);text-transform:none;letter-spacing:0}
.story.st-still *{animation:none!important}
/* How it works — a slim line under the hero */
.hw{display:flex;flex-wrap:wrap;gap:8px 22px;align-items:baseline;padding:14px 18px;margin:-12px 0 18px;border-radius:14px;background:var(--card);border:1px solid var(--line);font-size:15px}
.hw-t{font-family:var(--fh,"Sora"),sans-serif}.hw small{color:var(--soft);font-size:13px}
/* features */
.features{padding:24px 0 10px;display:flex;flex-direction:column;gap:16px}
.ft-tick{overflow:hidden;border-radius:999px;background:var(--ink);color:var(--paper);padding:10px 0;-webkit-mask:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);mask:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent)}
.ft-tick div{display:inline-flex;gap:34px;white-space:nowrap;animation:ftTick 38s linear infinite;font-weight:700;font-size:15px}
.ft-tick span{color:var(--paper)}.ft-tick span:nth-child(3n+1){color:var(--hi)}
.ft-tick:hover div{animation-play-state:paused}
@keyframes ftTick{to{transform:translateX(-50%)}}
.ft-head h2{font-size:clamp(26px,3.6vw,36px)}.ft-head p{margin:6px 0 0;max-width:720px}
.ft-group{font-size:14px;letter-spacing:.12em;text-transform:uppercase;color:var(--accent);margin:10px 0 0}
.ft-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px}
.ft-card{position:relative;background:var(--card);border:1px solid var(--line);border-radius:16px;padding:18px;display:flex;flex-direction:column;gap:8px;transition:transform .25s,box-shadow .25s}
.ft-card:hover{transform:translateY(-4px);box-shadow:0 18px 36px -14px rgba(15,23,42,.3)}
.ft-ic{width:46px;height:46px;border-radius:14px;display:grid;place-items:center;font-size:24px;background:var(--accent-soft)}
.ft-card h3{font-size:18px;margin:2px 0 0}
.ft-card ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px;font-size:14.5px}
.ft-card li{display:flex;gap:8px}.ft-card li::before{content:"✓";flex:none;width:20px;height:20px;border-radius:50%;display:grid;place-items:center;font-size:12px;font-weight:800;color:#fff;background:var(--ok,#2F855A);margin-top:1px}
.ft-ben{margin:auto 0 0;padding-top:8px;border-top:1px dashed var(--line);font-weight:700;color:var(--accent);font-size:14.5px}
.ft-ben::before{content:"⚡ "}
.ft-plan{align-self:flex-start;font-size:12px;font-weight:700;padding:3px 9px;border-radius:99px;background:var(--paper);color:var(--mute);border:1px solid var(--line)}
/* the points tick in one by one when the card comes into view */
.ft-card:not(.ft-in) li,.ft-card:not(.ft-in) .ft-ben{opacity:0;transform:translateX(-10px)}
.ft-card.ft-in li{animation:ftIn .45s ease calc(var(--n) * 220ms + 120ms) both}
.ft-card.ft-in li::before{animation:ftFlash .9s ease calc(var(--n) * 220ms + 200ms) both}
.ft-card.ft-in .ft-ben{animation:ftIn .5s ease .85s both}
@keyframes ftIn{from{opacity:0;transform:translateX(-10px)}to{opacity:1;transform:none}}
@keyframes ftFlash{0%{transform:scale(0)}50%{transform:scale(1.35);box-shadow:0 0 0 6px var(--accent-soft)}100%{transform:none}}
.ft-cta{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:center;justify-content:center;padding:20px;border-radius:16px;background:var(--accent-soft);border:1px solid var(--accent-line,#F3C9AE);font-size:17px;text-align:center}
@media (prefers-reduced-motion:reduce){.ft-tick div{animation:none;flex-wrap:wrap;white-space:normal;padding:0 16px}.ft-card li,.ft-card .ft-ben{opacity:1!important;transform:none!important;animation:none!important}}
@media (max-width:560px){.st-chips button{font-size:12px;padding:4px 9px}.st-cap{min-height:84px}}

/* build 148: the hero is a cover — the before/after banner full width on top, the headline, text and buttons under it */
.hero.hero-cover{flex-direction:column;align-items:stretch;gap:26px;padding:26px 0 30px}
.hero-cover .st-slot{flex:none;width:100%}
.hero-cover .text{flex:none;gap:14px}
.hero-cover h1{max-width:980px}
.hero-row{display:flex;flex-wrap:wrap;gap:16px 32px;align-items:center;justify-content:space-between}
.hero-row .lead{flex:1 1 520px;max-width:760px}
.hero-btns{display:flex;flex-wrap:wrap;gap:12px;flex:none}
/* the banner as a wide cover: the picture on the left, scene chips + before / after text on the right */
.hero-cover .story{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);grid-template-areas:"box top" "box cap" "box bar";grid-template-rows:auto 1fr auto;column-gap:26px;row-gap:14px;padding:18px}
.hero-cover .st-top{grid-area:top}.hero-cover .st-box{grid-area:box;align-self:center}.hero-cover .st-cap{grid-area:cap;align-self:center;min-height:150px}.hero-cover .st-bar{grid-area:bar;align-self:end}
.hero-cover .st-chips button{font-size:13.5px;padding:7px 13px}
.hero-cover .st-cap p{gap:8px;font-size:clamp(18px,1.9vw,24px);line-height:1.3;justify-content:center}
.hero-cover .st-cap b{font-size:13px}
@media (max-width:860px){
  .hero-cover .story{grid-template-columns:minmax(0,1fr);grid-template-areas:"top" "box" "cap" "bar";grid-template-rows:auto;padding:12px}
  .hero-cover .st-cap{min-height:84px}.hero-cover .st-cap p{font-size:16px;gap:3px;justify-content:flex-start}
  .hero-cover .st-chips{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin:0 -12px;padding:0 12px}.hero-cover .st-chips::-webkit-scrollbar{display:none}
  .hero-cover .st-chips button{flex:none;font-size:12.5px;padding:6px 11px}
  .hero-btns{width:100%}.hero-btns .btn{flex:1 1 140px}
}

/* build 148: feature cards line up — icon, title, points, benefit and plan sit on the same lines across a row */
.ft-ben{display:flex;gap:6px;align-items:flex-start;line-height:1.35}
.ft-ben::before{content:"⚡";flex:none;line-height:1.35}
@supports (grid-template-rows:subgrid){
  .ft-grid{grid-auto-rows:auto;row-gap:14px}
  .ft-card{display:grid;grid-row:span 5;grid-template-rows:subgrid;row-gap:10px;align-content:start}
  .ft-card .ft-ben{margin:0;align-self:start}
  .ft-card .ft-plan{align-self:end;justify-self:start}
}
/* build 148: the side plans of the wheel never make the page wider than the screen (phones) */
.w3{overflow-x:clip;overflow-y:visible}
@supports not (overflow:clip){.w3{overflow-x:hidden;overflow-y:visible}}

/* build 148: feature grid — 4 across on a PC, 2 on a tablet, 1 on a phone (no single card left alone on a row) */
.ft-grid{grid-template-columns:repeat(4,minmax(0,1fr))}
@media (max-width:1080px){.ft-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:560px){.ft-grid{grid-template-columns:minmax(0,1fr)}}
.ft-plan{white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.ft-plan::before{content:"In: ";font-weight:600}
.ft-card.ft-go{background:var(--ink);color:var(--paper);border-color:transparent;grid-template-rows:subgrid}
.ft-card.ft-go h3{color:var(--paper)}.ft-card.ft-go p{margin:0;color:var(--paper);opacity:.85;font-size:14.5px}
.ft-card.ft-go .ft-ic{background:var(--accent);color:#fff}
.ft-card.ft-go .btn{justify-self:stretch;align-self:end}.ft-card.ft-go .btn.ghost{color:var(--paper);border-color:var(--paper);background:transparent;box-shadow:none}
/* How it works: title, three steps in columns, the note under them */
.hw{display:grid;grid-template-columns:auto repeat(3,minmax(0,1fr));gap:10px 22px;align-items:start}

@media (max-width:860px){.hw{grid-template-columns:minmax(0,1fr);gap:6px}.hw small{grid-column:auto}}
/* build 148: phones — tidy top menu, full-width hero buttons, even package / start buttons on sign-up */
@media (max-width:560px){
  .nav{row-gap:10px}
  .navlinks{width:100%;justify-content:space-between;gap:10px}
  .hero-btns .btn{flex:1 1 100%}
  #planChips,#startChips{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
  #startChips{grid-template-columns:minmax(0,1fr)}
  #planChips .chip,#startChips .chip{width:100%}
}

/* build 150: the hero banner in a shop — our shop owner (confused → smiling), the shop around him, his thought bubble, the steps */
.st-env{transition:filter .6s}
.story:not([data-k=fixed]) .st-env{filter:saturate(.25) brightness(.97)}
.story[data-k=fixed] .st-env{filter:none}
.story[data-k=fixed] .st-box,.st-box{background:#EEF2F8}
.story[data-k=pain] .st-head{animation:stPuzzle 2.4s ease-in-out infinite}
@keyframes stPuzzle{0%,100%{transform:rotate(-4deg)}50%{transform:rotate(3deg) translateY(1px)}}
.story[data-k=pain] .st-eyes{animation:stLook 2.4s ease-in-out infinite}
@keyframes stLook{0%,100%{transform:translateX(0)}50%{transform:translateX(3px)}}
.st-scratch{transform-origin:85% 95%!important;animation:stScratch .45s ease-in-out infinite alternate}
@keyframes stScratch{from{transform:rotate(-4deg)}to{transform:rotate(4deg)}}
.st-qs text{animation:stQ 1.6s ease-in-out infinite}.st-qs text:nth-child(2){animation-delay:.4s}.st-qs text:nth-child(3){animation-delay:.8s}
@keyframes stQ{0%,100%{transform:translateY(0);opacity:.5}50%{transform:translateY(-8px);opacity:1}}
.story[data-k=fixed] .st-head{animation:stNod .9s cubic-bezier(.3,1.5,.5,1) 1 both}
@keyframes stNod{0%{transform:translateY(0)}40%{transform:translateY(-6px) rotate(-2deg)}100%{transform:none}}
.st-blink ellipse,.st-blink circle{animation:stBlink2 3.2s ease-in-out 1.4s infinite}
@keyframes stBlink2{0%,94%,100%{transform:scaleY(1)}97%{transform:scaleY(.1)}}
.st-palm{transform-origin:10% 20%!important;animation:stPalm .7s cubic-bezier(.3,1.4,.5,1) .15s both}
@keyframes stPalm{from{transform:rotate(18deg);opacity:0}to{transform:none;opacity:1}}
/* his thought: grey with a question while stuck, the theme colour once it is done */
.st-bubble{position:absolute;left:23%;top:2.5%;max-width:34%;background:#fff;border:2.5px solid #94A3B8;border-radius:18px;padding:6px 13px;font:800 clamp(11px,1.45vw,16px)/1.25 var(--fh,"Sora"),sans-serif;color:var(--ink);box-shadow:0 8px 18px -8px rgba(15,23,42,.35);transition:border-color .3s;pointer-events:none}
.st-bubble::after{content:"";position:absolute;left:14px;bottom:-11px;width:16px;height:16px;background:#fff;border-right:2.5px solid #94A3B8;border-bottom:2.5px solid #94A3B8;transform:rotate(45deg) skew(10deg,10deg);transition:border-color .3s}
.story[data-k=fixed] .st-bubble,.story[data-k=fixed] .st-bubble::after{border-color:var(--accent)}
.story[data-k=fixed] .st-bubble span{color:var(--ink)}
.st-bubble span{display:block;animation:stPop .35s cubic-bezier(.3,1.6,.5,1) both}
.story[data-k=flash] .st-bubble{opacity:0}
/* With MDFAST: Quote › Design › Machine file › Bill & deliver — they light up one after the other once it is done */
.st-steps{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;font:700 13px var(--fb,"DM Sans"),sans-serif;color:var(--soft)}
.st-steps span{display:inline-flex;align-items:center;gap:6px;padding:5px 10px 5px 5px;border-radius:99px;background:var(--paper);border:1px solid var(--line);transition:background .3s,color .3s}
.st-steps i{font-style:normal;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;background:var(--card);font-size:13px}
.st-steps b{color:var(--line);font-size:16px}
.story[data-k=fixed] .st-steps span{animation:stStep .4s ease calc(var(--n) * 380ms + 200ms) both}
@keyframes stStep{from{background:var(--paper);color:var(--soft)}to{background:var(--accent);color:#fff;border-color:var(--accent)}}
.hero-cover .story{grid-template-areas:"box top" "box cap" "box steps" "box bar";grid-template-rows:auto 1fr auto auto}
.hero-cover .st-steps{grid-area:steps}
@media (max-width:860px){.hero-cover .story{grid-template-areas:"top" "box" "cap" "steps" "bar"}.st-steps{font-size:12px}.st-steps span{padding:3px 8px 3px 3px}.st-steps i{width:20px;height:20px;font-size:11px}}

/* build 152: light waves behind the plan wheel (fx3d.js) — fill the space round the cards, under them */
.w3{position:relative}
.w3-waves{position:absolute;left:0;right:0;top:4%;height:92%;width:100%;pointer-events:none;z-index:0;-webkit-mask:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);mask:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
.w3 .w3-stage,.w3 .w3-ctl,.w3 .w3-hint{position:relative;z-index:1}

/* build 154: the logo comes alive (brand-fx.js) — pull back, dash forward with speed lines, a light runs over it */
.brand-fx{position:relative;display:inline-block;line-height:0}
.brand-fx .bfx-lines{position:absolute;right:100%;top:22%;width:0;height:56%;pointer-events:none;opacity:0;
  background:repeating-linear-gradient(180deg,var(--accent) 0 3px,transparent 3px 9px);-webkit-mask:linear-gradient(90deg,transparent,#000);mask:linear-gradient(90deg,transparent,#000)}
.brand-fx .bfx-shine{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.brand-fx .bfx-shine::after{content:"";position:absolute;top:-20%;bottom:-20%;left:-40%;width:30%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.9),transparent);transform:skewX(-20deg);opacity:0}
.brand-fx.go img{animation:bfxDash 1.15s cubic-bezier(.3,.7,.2,1)}
.brand-fx.go .bfx-lines{animation:bfxLines 1.15s ease-out}
.brand-fx.go .bfx-shine::after{animation:bfxShine .9s ease .45s}
@keyframes bfxDash{0%{transform:none}18%{transform:translateX(-8px) scaleX(.96)}42%{transform:translateX(12px) skewX(-10deg) scaleX(1.05)}62%{transform:translateX(-3px) skewX(3deg)}80%{transform:translateX(1px)}100%{transform:none}}
@keyframes bfxLines{0%,15%{width:0;opacity:0}40%{width:46px;opacity:.85}100%{width:0;opacity:0}}
@keyframes bfxShine{0%{left:-40%;opacity:1}100%{left:120%;opacity:1}}
@media (prefers-reduced-motion:reduce){.brand-fx.go img,.brand-fx.go .bfx-lines,.brand-fx.go .bfx-shine::after{animation:none}}
/* build 154: the welcome / thank-you screen */
.mdfx-cel{position:fixed;inset:0;width:100vw;height:100vh;pointer-events:none;z-index:60}
.done.celebrate{max-width:680px;gap:12px}
.cel-badge{display:inline-block;padding:6px 14px;border-radius:99px;background:var(--accent);color:#fff;font:800 13px var(--fb,"DM Sans"),sans-serif;letter-spacing:.08em;text-transform:uppercase;animation:celPop .6s cubic-bezier(.3,1.6,.5,1) .2s both}
.done.celebrate h1{font-size:clamp(26px,4.4vw,40px);animation:celUp .7s ease .35s both}
.done.celebrate .lead{animation:celUp .7s ease .5s both}
.cel-p{margin:0;font-size:16px;line-height:1.55;color:var(--mute);animation:celUp .7s ease .65s both}.cel-p.small{font-size:14px}
.cel-steps{text-align:left;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 18px;width:100%;max-width:520px;animation:celUp .7s ease .8s both}
.cel-steps ol{margin:8px 0 0;padding-left:20px;display:flex;flex-direction:column;gap:6px}
.cel-go{font-size:18px;padding:14px 26px;animation:celPop .6s cubic-bezier(.3,1.6,.5,1) 1s both}
.cel-promise{margin:4px 0 0;padding:12px 16px;border-radius:12px;background:var(--accent-soft);border:1px solid var(--accent-line,#F3C9AE);font-size:15px;line-height:1.5}
@keyframes celPop{from{transform:scale(.4);opacity:0}to{transform:none;opacity:1}}
@keyframes celUp{from{transform:translateY(14px);opacity:0}to{transform:none;opacity:1}}
@media (prefers-reduced-motion:reduce){.cel-badge,.done.celebrate h1,.done.celebrate .lead,.cel-p,.cel-steps,.cel-go{animation:none}}

/* build 163: Free demo button + form */
.ld-fab { position: fixed; right: 18px; bottom: 18px; z-index: 60; display: inline-flex; align-items: center; gap: 8px; padding: 12px 18px; border-radius: 999px; border: 0; cursor: pointer;
  background: var(--accent, #C4561B); color: #fff; font: 700 15px var(--fb, "DM Sans"), sans-serif; box-shadow: 0 8px 24px rgba(0,0,0,.25); animation: ldpop .5s ease-out 1.5s both; }
.ld-fab:hover { transform: translateY(-2px); } @keyframes ldpop { from { transform: scale(.6); opacity: 0; } to { transform: none; opacity: 1; } }
@media (max-width: 520px) { .ld-fab { right: 12px; bottom: 12px; padding: 11px 14px; } .ld-fab span { display: none; } }
.ld-modal { position: fixed; inset: 0; z-index: 90; background: rgba(15,23,42,.55); display: flex; align-items: center; justify-content: center; padding: 16px; }
.ld-box { position: relative; width: min(460px, 100%); max-height: 92vh; overflow: auto; background: var(--paper, #fff); color: var(--ink, #0F172A); border-radius: 16px; padding: 22px; display: flex; flex-direction: column; gap: 10px; box-shadow: 0 20px 60px rgba(0,0,0,.35); }
.ld-x { position: absolute; top: 8px; right: 10px; border: 0; background: none; font-size: 28px; cursor: pointer; color: inherit; }

/* build 165: 💬 Ask us */
.ask-fab { bottom: 78px; background: #14213D; animation-delay: 1.8s; }
@media (max-width: 520px) { .ask-fab { bottom: 70px; } }
.ask-panel { position: fixed; right: 18px; bottom: 18px; z-index: 85; width: min(380px, calc(100vw - 24px)); height: min(560px, calc(100vh - 36px)); display: flex; flex-direction: column;
  background: var(--paper, #fff); color: var(--ink, #0F172A); border-radius: 16px; box-shadow: 0 20px 60px rgba(0,0,0,.35); overflow: hidden; }
@media (max-width: 520px) { .ask-panel { right: 12px; bottom: 12px; } }
.ask-head { display: flex; justify-content: space-between; align-items: center; padding: 12px 14px; background: #14213D; color: #fff; } .ask-head .ld-x { position: static; color: #fff; }
.ask-msgs { flex: 1; overflow: auto; padding: 12px; display: flex; flex-direction: column; gap: 8px; background: rgba(148,163,184,.08); }
.ask-m { max-width: 86%; padding: 9px 12px; border-radius: 14px; font-size: 14.5px; line-height: 1.45; overflow-wrap: anywhere; }
.ask-m.bot { align-self: flex-start; background: #fff; border: 1px solid #E2E8F0; color: #0F172A; } .ask-m.me { align-self: flex-end; background: var(--accent, #C4561B); color: #fff; }
.ask-m.typing { opacity: .6; } .ask-links { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 8px; }
.ask-chips { display: flex; gap: 6px; flex-wrap: wrap; padding: 8px 12px 0; } .ask-chips button { border: 1px solid #CBD5E1; background: #fff; color: #0F172A; border-radius: 999px; padding: 5px 10px; font-size: 13px; cursor: pointer; }
.ask-form { display: flex; gap: 6px; padding: 10px 12px; } .ask-form input { flex: 1; width: auto; min-width: 0; }
.ask-note { font-size: 11.5px; color: #64748B; padding: 0 12px 10px; }
