/* =========================================================================
   TOTALS — ui.css  ·  THE ONE DESIGN KIT
   Tokens + deck engine + component library. Restyle the whole deck here.
   Offline: fonts are local .woff2 under ../assets/fonts/. No CDN. No build.
   ========================================================================= */

/* ---- FONTS (bundled locally) ------------------------------------------- */
@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;
  src:url('../assets/fonts/inter-400.woff2') format('woff2')}
@font-face{font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;
  src:url('../assets/fonts/inter-500.woff2') format('woff2')}
@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;
  src:url('../assets/fonts/inter-600.woff2') format('woff2')}
@font-face{font-family:'Inter';font-style:normal;font-weight:700;font-display:swap;
  src:url('../assets/fonts/inter-700.woff2') format('woff2')}
@font-face{font-family:'Instrument Serif';font-style:italic;font-weight:400;font-display:swap;
  src:url('../assets/fonts/instrument-serif-400-italic.woff2') format('woff2')}
@font-face{font-family:'Instrument Serif';font-style:normal;font-weight:400;font-display:swap;
  src:url('../assets/fonts/instrument-serif-400.woff2') format('woff2')}

/* ---- TOKENS ------------------------------------------------------------ */
:root{
  --paper:#ffffff;
  --alt:#f5f7fd;                 /* even sections get this bg for rhythm */
  --ink:#0f1425;
  --sub:#5a6178;
  --faint:#98a0b5;

  /* Totals brand ramp (from the logo gradient #284DC1 -> #172A69) */
  --brand:#284DC1;
  --brand-700:#213f9e;
  --brand-800:#172A69;
  --brand-050:#eef1fb;
  --brand-100:#dbe2f6;

  --line:#e7eaf3;

  /* brand-post finish: periwinkle-indigo accent + dot-matrix texture tokens */
  --periwinkle:#4C5BF5;
  --surface:#f8f9fe;               /* off-white base under the texture */
  --dot:rgba(22,28,58,.055);       /* faint light-grey dot-matrix       */
  --guide:rgba(22,28,58,.018);     /* optional hairline guide lines      */
  --tile:27px;                     /* grid spacing                       */

  /* status pairs — fintech leans on these HARD */
  --pos-ink:#0f7a4d; --pos-bg:#e9f6ef;    /* income / under budget / success */
  --neg-ink:#b23b34; --neg-bg:#fbeeed;    /* expense / over budget / failed  */
  --amber-ink:#7a5d00; --amber-bg:#fdf6e3;/* pending / warning              */
  --info-ink:#2d5d8a; --info-bg:#edf3f9;  /* neutral info                   */

  --shadow-1:0 1px 2px rgba(16,24,48,.05),0 1px 3px rgba(16,24,48,.06);
  --shadow-2:0 4px 16px rgba(16,24,48,.08),0 1px 3px rgba(16,24,48,.04);
  --shadow-3:0 16px 40px rgba(16,24,48,.14),0 3px 8px rgba(16,24,48,.05);
  --r:16px;

  --maxw:1180px;
}

/* ---- BASE -------------------------------------------------------------- */
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:'Inter',system-ui,-apple-system,sans-serif;
  background:var(--surface);color:var(--ink);-webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility}

/* ---- BRAND-POST TEXTURED FINISH (light surfaces only) -----------------
   Two fixed layers behind all content:
   ::before = soft pale lavender→white wash, brightest toward the top-right.
   ::after  = faint dot-matrix + hairline guides, drifting via --par parallax.
   Dark/demo slides paint an opaque background on top, so they stay plain.  */
body::before{content:"";position:fixed;inset:0;z-index:0;pointer-events:none;
  background:
    radial-gradient(135% 115% at 100% 0%,
      rgba(76,91,245,.12) 0%,
      rgba(76,91,245,.055) 24%,
      rgba(232,235,251,.34) 52%,
      rgba(255,255,255,0) 78%),
    linear-gradient(180deg,#fbfcff 0%,var(--surface) 100%)}
body::after{content:"";position:fixed;inset:-64px;z-index:0;pointer-events:none;
  background-image:
    linear-gradient(0deg,  var(--guide) 1px, transparent 1px),
    linear-gradient(90deg, var(--guide) 1px, transparent 1px),
    radial-gradient(var(--dot) 1.1px, transparent 1.7px);
  background-size:var(--tile) var(--tile), var(--tile) var(--tile), var(--tile) var(--tile);
  transform:translate3d(0,var(--par,0px),0);will-change:transform}
@media (prefers-reduced-motion:reduce){body::after{transform:none}}
.serif{font-family:'Instrument Serif',Georgia,serif}
h1,h2,h3{margin:0;line-height:1.05;letter-spacing:-.02em;font-weight:700}
h1{font-size:clamp(2.3rem,5vw,4rem)}
h2{font-size:clamp(1.6rem,3.3vw,2.6rem)}
h3{font-size:clamp(1.15rem,1.7vw,1.5rem);letter-spacing:-.01em}
p{margin:0;line-height:1.55}
em{font-style:normal}
h1 em,h2 em,h3 em,.q em{font-family:'Instrument Serif',Georgia,serif;
  font-style:italic;font-weight:400;color:var(--brand);letter-spacing:0}
a{color:var(--brand);text-decoration:none}
img{max-width:100%;display:block}
::selection{background:var(--brand-100)}
.tnum{font-variant-numeric:tabular-nums}

.kicker{color:var(--brand);font-size:.78rem;letter-spacing:.28em;
  text-transform:uppercase;font-weight:600;display:inline-flex;align-items:center;gap:.6em}
.kicker::before{content:"";width:26px;height:2px;background:var(--brand);
  display:inline-block;border-radius:2px}
.lead{font-size:clamp(1.05rem,1.5vw,1.35rem);color:var(--sub);line-height:1.5;max-width:46ch}
.muted{color:var(--sub)}
.faint{color:var(--faint)}
.center{text-align:center}
.wrap{width:100%;max-width:var(--maxw);margin:0 auto}

/* ---- DECK ENGINE ------------------------------------------------------- */
#deck{height:100vh;overflow-y:auto;scroll-snap-type:y mandatory;scroll-behavior:smooth;
  position:relative;z-index:1}                 /* above the fixed texture layers */
#deck>section{min-height:100vh;scroll-snap-align:start;display:flex;
  flex-direction:column;justify-content:center;padding:7vh 8vw;position:relative;
  overflow:hidden}
/* even slides keep a gentle rhythm via a translucent cool tint that still lets
   the dot-matrix texture read through (no longer an opaque fill) */
#deck>section:nth-of-type(even){
  background:linear-gradient(rgba(226,230,249,.5),rgba(226,230,249,.5))}

/* reveal on enter */
.rv{opacity:0;transform:translateY(22px);transition:opacity .7s ease,transform .7s ease}
section.on .rv{opacity:1;transform:none}
section.on .rv:nth-child(1){transition-delay:.02s}
section.on .rv:nth-child(2){transition-delay:.10s}
section.on .rv:nth-child(3){transition-delay:.18s}
section.on .rv:nth-child(4){transition-delay:.26s}
section.on .rv:nth-child(5){transition-delay:.34s}
section.on .rv:nth-child(6){transition-delay:.42s}
.rv.d1{transition-delay:.12s}.rv.d2{transition-delay:.22s}.rv.d3{transition-delay:.32s}
.rv.d4{transition-delay:.42s}.rv.d5{transition-delay:.52s}.rv.d6{transition-delay:.62s}
@media (prefers-reduced-motion:reduce){.rv{transition:none;opacity:1;transform:none}}

.sec-no{position:absolute;top:5vh;right:8vw;font-size:.8rem;color:var(--faint);
  letter-spacing:.2em;font-weight:600;font-variant-numeric:tabular-nums}

/* ---- DOT RAIL ---------------------------------------------------------- */
#rail{position:fixed;right:22px;top:50%;transform:translateY(-50%);z-index:40;
  display:flex;flex-direction:column;gap:11px}
#rail button{width:9px;height:9px;border-radius:50%;border:0;padding:0;cursor:pointer;
  background:var(--brand-100);transition:all .25s;position:relative}
#rail button:hover{background:var(--brand-700);transform:scale(1.25)}
#rail button.active{background:var(--brand);height:22px;border-radius:5px}
#rail button span{position:absolute;right:18px;top:50%;transform:translateY(-50%);
  white-space:nowrap;background:var(--ink);color:#fff;font-size:.68rem;padding:3px 8px;
  border-radius:6px;opacity:0;pointer-events:none;transition:opacity .2s;letter-spacing:.02em}
#rail button:hover span{opacity:1}
@media(max-width:760px){#rail{display:none}}

/* ---- PROGRESS BAR ------------------------------------------------------ */
#prog{position:fixed;top:0;left:0;height:3px;background:var(--brand);z-index:50;
  width:0;transition:width .25s ease}

/* ---- HELP / KEYS OVERLAY ---------------------------------------------- */
#help{position:fixed;inset:0;z-index:60;background:rgba(15,20,37,.55);
  backdrop-filter:blur(4px);display:none;align-items:center;justify-content:center}
#help.show{display:flex}
#help .panel{background:var(--paper);border-radius:var(--r);padding:34px 40px;
  box-shadow:var(--shadow-3);max-width:440px;width:90%}
#help h3{margin-bottom:16px}
#help .row{display:flex;justify-content:space-between;align-items:center;
  padding:9px 0;border-bottom:1px solid var(--line);gap:20px}
#help .row:last-child{border-bottom:0}
kbd{font-family:inherit;font-size:.78rem;background:var(--brand-050);color:var(--brand-800);
  border:1px solid var(--brand-100);border-radius:6px;padding:2px 9px;font-weight:600;
  box-shadow:0 1px 0 var(--brand-100)}

/* ---- ICONS ------------------------------------------------------------- */
.icon{width:20px;height:20px;fill:currentColor;vertical-align:-4px;flex:none}
.icon.sm{width:16px;height:16px}
.icon.lg{width:26px;height:26px}
.icon.xl{width:34px;height:34px}

/* ---- GRID HELPERS ------------------------------------------------------ */
.grid{display:grid;gap:22px}
.g2{grid-template-columns:repeat(2,1fr)}
.g3{grid-template-columns:repeat(3,1fr)}
.g4{grid-template-columns:repeat(4,1fr)}
.split{display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(28px,5vw,72px);align-items:center}
.split.rev{grid-template-columns:.95fr 1.05fr}
@media(max-width:900px){.g3,.g4{grid-template-columns:repeat(2,1fr)}
  .split,.split.rev{grid-template-columns:1fr;gap:34px}}
@media(max-width:560px){.g2,.g3,.g4{grid-template-columns:1fr}}
.stack>*+*{margin-top:16px}
.stack-lg>*+*{margin-top:26px}
.row-inline{display:flex;align-items:center;gap:12px;flex-wrap:wrap}

/* ---- CARD -------------------------------------------------------------- */
.card{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);
  padding:24px;box-shadow:var(--shadow-1);transition:transform .28s,box-shadow .28s,border-color .28s}
.card.hoverable:hover{transform:translateY(-3px);box-shadow:var(--shadow-2);
  border-color:var(--brand-100)}
.card h3{margin-bottom:8px}
section:nth-of-type(even) .card{background:#fff}

/* ---- ICON BADGE -------------------------------------------------------- */
.iconBadge{width:44px;height:44px;border-radius:12px;background:var(--brand-050);
  color:var(--brand);display:inline-flex;align-items:center;justify-content:center;flex:none}
.iconBadge.pos{background:var(--pos-bg);color:var(--pos-ink)}
.iconBadge.neg{background:var(--neg-bg);color:var(--neg-ink)}
.iconBadge.amber{background:var(--amber-bg);color:var(--amber-ink)}
.iconBadge.info{background:var(--info-bg);color:var(--info-ink)}
.iconBadge.solid{background:var(--brand);color:#fff}

/* ---- CHIP -------------------------------------------------------------- */
.chipm{display:inline-flex;align-items:center;gap:6px;font-size:.76rem;font-weight:600;
  padding:4px 11px;border-radius:999px;background:var(--brand-050);color:var(--brand-700);
  letter-spacing:.01em;line-height:1.3;white-space:nowrap}
.chipm .icon{width:14px;height:14px}
.chipm.pos{background:var(--pos-bg);color:var(--pos-ink)}
.chipm.neg{background:var(--neg-bg);color:var(--neg-ink)}
.chipm.amber{background:var(--amber-bg);color:var(--amber-ink)}
.chipm.info{background:var(--info-bg);color:var(--info-ink)}
.chipm.neutral{background:#eef0f5;color:var(--sub)}
.chipm.outline{background:transparent;border:1px solid var(--line);color:var(--sub)}

/* ---- STAT (count-up) --------------------------------------------------- */
.stat .num{font-size:clamp(2.2rem,4vw,3.4rem);font-weight:700;color:var(--brand);
  font-variant-numeric:tabular-nums;line-height:1;letter-spacing:-.03em}
.stat .num .unit{font-size:.5em;color:var(--brand-700);margin-left:.12em;font-weight:600}
.stat .lbl{margin-top:8px;color:var(--sub);font-size:.95rem}
.stat.big .num{font-size:clamp(3rem,7vw,5rem)}

/* ---- BLOCKQUOTE -------------------------------------------------------- */
.q{border-left:3px solid var(--brand);padding:6px 0 6px 26px;
  font-family:'Instrument Serif',Georgia,serif;font-style:italic;
  font-size:clamp(1.4rem,2.6vw,2.1rem);line-height:1.35;color:var(--ink)}
.q cite{display:block;margin-top:16px;font-family:'Inter',sans-serif;font-style:normal;
  font-size:.9rem;color:var(--sub);letter-spacing:.02em}

/* ---- FLIP CARD --------------------------------------------------------- */
.flip{perspective:1400px;min-height:230px}
.flip .inner{position:relative;width:100%;height:100%;min-height:230px;
  transition:transform .7s cubic-bezier(.4,.2,.2,1);transform-style:preserve-3d}
.flip:hover .inner,.flip.flipped .inner{transform:rotateY(180deg)}
.flip .face{position:absolute;inset:0;backface-visibility:hidden;border-radius:var(--r);
  padding:24px;display:flex;flex-direction:column;justify-content:space-between;border:1px solid var(--line)}
.flip .front{background:var(--neg-bg)}
.flip .front .lab{color:var(--neg-ink)}
.flip .back{background:var(--brand);color:#fff;transform:rotateY(180deg);border-color:transparent}
.flip .back .lab{color:var(--brand-100)}
.flip .back h3{color:#fff}
.flip .lab{font-size:.72rem;letter-spacing:.22em;text-transform:uppercase;font-weight:700;margin-bottom:10px}
.flip .front h3{color:var(--neg-ink)}
.flip .foot{font-size:.82rem;opacity:.85;display:flex;align-items:center;gap:7px}

/* ---- TABS -------------------------------------------------------------- */
.tabs{display:inline-flex;background:var(--brand-050);border-radius:12px;padding:5px;gap:4px;
  flex-wrap:wrap}
.tabs button{border:0;background:transparent;font:inherit;font-weight:600;font-size:.92rem;
  color:var(--sub);padding:9px 18px;border-radius:8px;cursor:pointer;transition:all .2s}
.tabs button.active{background:#fff;color:var(--brand);box-shadow:var(--shadow-1)}
.tabpane{display:none}
.tabpane.active{display:block;animation:fade .35s ease}
@keyframes fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ---- PHONE DEVICE FRAME (the product-showcase primitive) --------------- */
.phone{--pw:270px;width:var(--pw);flex:none}
.phone .bezel{position:relative;border-radius:36px;background:#0b0f1c;
  padding:9px;box-shadow:var(--shadow-3),inset 0 0 0 1.5px #232a3d;overflow:hidden}
.phone .bezel::before{content:"";position:absolute;top:11px;left:50%;transform:translateX(-50%);
  width:70px;height:5px;border-radius:3px;background:#232a3d;z-index:3}
.phone .screen{border-radius:28px;overflow:hidden;background:#0b0f1c;display:block;
  aspect-ratio:1080/2400}
.phone .screen img{width:100%;height:100%;object-fit:cover;object-position:top center}
.phone .cap{margin-top:14px;text-align:center}
.phone .cap .t{font-weight:600;font-size:.95rem}
.phone .cap .s{color:var(--sub);font-size:.82rem;margin-top:2px}
.phone.sm{--pw:210px}
.phone.lg{--pw:310px}
.phone.tilt{transform:rotate(-3deg)}
.phone.tilt2{transform:rotate(3deg)}
.phone.ios .bezel{border-radius:44px;padding:11px}
.phone.ios .bezel::before{width:104px;height:24px;border-radius:14px;top:12px;background:#000}
.phone.ios .screen{border-radius:33px}

.phone-row{display:flex;gap:clamp(16px,3vw,40px);align-items:flex-start;justify-content:center;
  flex-wrap:wrap}
.phone-fan{display:flex;justify-content:center;align-items:flex-end}
.phone-fan .phone{margin:0 -26px;transition:transform .4s}
.phone-fan .phone:hover{transform:translateY(-14px) rotate(0)!important;z-index:5}

/* screen-glow accent behind hero phones */
.glow{position:relative}
.glow::after{content:"";position:absolute;inset:-8% -6%;z-index:-1;border-radius:50%;
  background:radial-gradient(closest-side,rgba(40,77,193,.20),transparent 72%);filter:blur(10px)}

/* ---- DEVICE-PRESENCE INDICATOR (demo) ---------------------------------- */
.presence{display:inline-flex;gap:12px;align-items:center;background:#fff;border:1px solid var(--line);
  border-radius:999px;padding:9px 16px;box-shadow:var(--shadow-1)}
.dvz{display:flex;align-items:center;gap:8px;opacity:.32;transition:opacity .5s,transform .5s;
  filter:grayscale(1)}
.dvz.live{opacity:1;filter:none;transform:translateY(0)}
.dvz .dot{width:8px;height:8px;border-radius:50%;background:var(--faint);transition:background .4s}
.dvz.live .dot{background:var(--pos-ink);box-shadow:0 0 0 0 rgba(15,122,77,.5);animation:pulse 1.8s infinite}
.dvz .name{font-size:.82rem;font-weight:600;color:var(--ink)}
.dvz .os{font-size:.68rem;color:var(--sub)}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(15,122,77,.45)}70%{box-shadow:0 0 0 7px rgba(15,122,77,0)}100%{box-shadow:0 0 0 0 rgba(15,122,77,0)}}

/* ---- DEMO INTERSTITIAL ------------------------------------------------- */
.demo-sec{background:var(--brand-800)!important;color:#fff}
.demo-sec .kicker{color:#9fb2ef}
.demo-sec .kicker::before{background:#9fb2ef}
.demo-sec h1,.demo-sec h2,.demo-sec h3{color:#fff}
.demo-sec h1 em,.demo-sec h2 em{color:#cdd8f7}
.demo-sec .lead,.demo-sec .muted{color:#b9c4e6}
.demo-sec .card{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.14);color:#e7ecf9;box-shadow:none}
.demo-sec .card h3{color:#fff}
.live-pill{display:inline-flex;align-items:center;gap:9px;background:#fff;color:var(--brand-800);
  font-weight:700;padding:9px 18px;border-radius:999px;font-size:.9rem;letter-spacing:.02em}
.live-pill .rec{width:10px;height:10px;border-radius:50%;background:var(--neg-ink);
  animation:pulse-red 1.4s infinite}
@keyframes pulse-red{0%,100%{opacity:1}50%{opacity:.35}}

/* run-of-show steps */
.ros{counter-reset:ros}
.ros li{list-style:none;position:relative;padding:12px 0 12px 44px;border-bottom:1px solid rgba(255,255,255,.12)}
.ros li:last-child{border-bottom:0}
.ros li::before{counter-increment:ros;content:counter(ros);position:absolute;left:0;top:11px;
  width:28px;height:28px;border-radius:8px;background:rgba(255,255,255,.12);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:.82rem;font-weight:700}
.ros .tap{font-weight:600}
.ros .tp{color:#aab6dd;font-size:.86rem;margin-top:2px}

/* ---- FEATURE ROW / LIST ------------------------------------------------ */
.frow{display:flex;gap:14px;align-items:flex-start}
.frow .iconBadge{width:38px;height:38px;border-radius:10px}
.frow .ft{font-weight:600;font-size:1.02rem}
.frow .fs{color:var(--sub);font-size:.9rem;margin-top:2px;line-height:1.45}
.ticks{list-style:none;padding:0;margin:0}
.ticks li{position:relative;padding:8px 0 8px 30px;color:var(--ink)}
.ticks li .icon{position:absolute;left:0;top:9px;color:var(--pos-ink);width:18px;height:18px}
.ticks li .s{color:var(--sub);font-size:.9rem}

/* ---- PILL / DIVIDER ---------------------------------------------------- */
.pill{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line);
  background:#fff;border-radius:999px;padding:7px 15px;font-size:.85rem;font-weight:500;color:var(--sub)}
.pill .dot{width:7px;height:7px;border-radius:50%;background:var(--pos-ink)}
.bignum{font-size:clamp(3.2rem,9vw,7rem);font-weight:700;letter-spacing:-.04em;
  line-height:.9;color:var(--brand);font-variant-numeric:tabular-nums}

/* ---- PLACEHOLDER MARK (must be visible & replaced) --------------------- */
.ph{display:inline-flex;align-items:center;gap:6px;background:repeating-linear-gradient(45deg,
  #fff7e6,#fff7e6 8px,#fdf0d0 8px,#fdf0d0 16px);color:#8a6a00;border:1px dashed #d9b24d;
  border-radius:8px;padding:2px 10px;font-size:.8em;font-weight:600;letter-spacing:.01em;
  font-variant-numeric:tabular-nums}
.ph::before{content:"⚑";font-size:.85em}
.ph-block{display:block;padding:16px 18px;border-radius:12px;font-weight:600}

/* ---- BANK LOGO STRIP --------------------------------------------------- */
.banks{display:flex;flex-wrap:wrap;gap:10px}
.banks .b{display:inline-flex;align-items:center;gap:8px;background:#fff;border:1px solid var(--line);
  border-radius:10px;padding:8px 14px;font-weight:600;font-size:.9rem;color:var(--ink);box-shadow:var(--shadow-1)}
.banks .b .d{width:9px;height:9px;border-radius:50%;background:var(--brand)}

/* ---- COVER-SPECIFIC ---------------------------------------------------- */
.cover-logo{width:76px;height:76px;border-radius:20px;box-shadow:var(--shadow-2)}
.cover-badge{display:inline-flex;align-items:center;gap:9px;border:1px solid var(--line);
  background:#fff;border-radius:999px;padding:8px 16px;font-size:.85rem;font-weight:600;color:var(--sub)}

/* ---- MISC -------------------------------------------------------------- */
.hr{height:1px;background:var(--line);border:0;margin:0}
.tag-brand{color:var(--brand)}
.nowrap{white-space:nowrap}
.hint{position:fixed;bottom:16px;left:50%;transform:translateX(-50%);z-index:30;
  font-size:.75rem;color:var(--faint);background:rgba(255,255,255,.8);backdrop-filter:blur(4px);
  padding:5px 14px;border-radius:999px;border:1px solid var(--line);transition:opacity .5s}
.hint.hide{opacity:0}

/* ---- VIDEO IN DEVICE FRAME (drop-in for screenshots→video) ------------- */
.phone .screen video{width:100%;height:100%;object-fit:cover;object-position:top center;
  display:block;border-radius:inherit}

/* subtle, eased hero float (single hero phones only) */
.floaty{animation:floaty 6.5s ease-in-out infinite}
@keyframes floaty{0%,100%{transform:translateY(0)}50%{transform:translateY(-9px)}}

/* ---- INTERACTIVE DEMO WALKTHROUGH -------------------------------------- */
.ros li.wstep{cursor:pointer;border-radius:10px;padding-left:44px;
  transition:background .25s ease}
.ros li.wstep:hover{background:rgba(255,255,255,.06)}
.ros li.wstep.active{background:rgba(255,255,255,.11)}
.ros li.wstep.active::before{background:#fff;color:var(--brand-800)}
.ros li.wstep .devtag{display:inline-flex;align-items:center;gap:5px;font-size:.68rem;
  font-weight:700;letter-spacing:.02em;padding:2px 8px;border-radius:999px;margin-right:8px;
  background:rgba(255,255,255,.12);color:#fff;vertical-align:1px}
.ros li.wstep .devtag.ios{background:rgba(157,178,239,.22);color:#cdd8f7}

.wctl{display:flex;gap:10px;align-items:center;margin-top:18px;flex-wrap:wrap}
.wbtn{display:inline-flex;align-items:center;gap:8px;background:#fff;color:var(--brand-800);
  border:0;border-radius:999px;padding:10px 18px;font:inherit;font-weight:700;font-size:.86rem;
  cursor:pointer;transition:transform .15s ease,opacity .15s ease}
.wbtn:hover{transform:translateY(-1px)}
.wbtn.ghost{background:rgba(255,255,255,.12);color:#fff}
.wbtn.playing{opacity:.55}

/* the live phone preview on demo slides */
.demo-sec .phone .cap .t{color:#fff}
.demo-sec .phone .cap .s{color:#aab6dd}
.wshot{animation:shotfade .5s ease}
@keyframes shotfade{from{opacity:.12;transform:scale(1.015)}to{opacity:1;transform:none}}

/* device-presence: active device gets a ring */
.dvz.activedev{box-shadow:0 0 0 2px rgba(255,255,255,.55);border-radius:10px}

/* ---- WORD CYCLE (closing line) ---------------------------------------- */
.wordcycle{display:inline-block;transition:opacity .45s ease,transform .45s ease;
  min-width:0}
.wordcycle.out{opacity:0;transform:translateY(-.16em)}
.cycA{color:var(--sub)}   /* problem word muted; solution word keeps brand accent */

@media (prefers-reduced-motion:reduce){
  .floaty{animation:none}
  .wshot{animation:none}
  .wordcycle{transition:none}
}
