/* =========================================================
   Dex Studios — Design tokens
   Identity: "ledger grid" (banking ledger + bark-cloth stripe)
   meets a live systems-connection map. Built for East African
   fintech / ERP / mobile-money integration work out of Kampala.
   ========================================================= */
:root{
  --teal-deep:#0E6E6B;      /* primary — Lake Victoria teal */
  --teal-ink:#0A4F4D;
  --indigo:#121A2B;         /* dark sections */
  --indigo-2:#1B2740;
  --gold:#E3A438;           /* accent — acacia gold */
  --gold-soft:#F1C874;
  --clay:#B5562F;           /* rare, secondary accent */
  --sand:#F1EEE6;           /* paper background */
  --sand-2:#E9E4D6;
  --ink:#1D2126;             /* body text */
  --ink-soft:#4B5560;
  --line:rgba(29,33,38,0.12);
  --line-dark:rgba(241,238,230,0.14);
  --radius:14px;
  --shadow-1:0 10px 30px -12px rgba(18,26,43,0.25);
  --ff-display:'Fraunces', ui-serif, Georgia, serif;
  --ff-body:'Work Sans', -apple-system, Segoe UI, sans-serif;
  --ff-mono:'IBM Plex Mono', ui-monospace, Menlo, monospace;
}

html{scroll-behavior:smooth;}
body{
  font-family:var(--ff-body);
  color:var(--ink);
  background:var(--sand);
  -webkit-font-smoothing:antialiased;
}
h1,h2,h3,h4,.display-font{
  font-family:var(--ff-display);
  font-weight:600;
  letter-spacing:-0.01em;
  color:var(--indigo);
}
.mono{font-family:var(--ff-mono); letter-spacing:0.02em;}
a{color:inherit;}
.text-teal{color:var(--teal-deep) !important;}
.text-gold{color:var(--gold) !important;}
.bg-teal{background:var(--teal-deep) !important;}
.bg-indigo{background:var(--indigo) !important; color:var(--sand);}
.bg-sand2{background:var(--sand-2) !important;}
.eyebrow{
  font-family:var(--ff-mono);
  text-transform:uppercase;
  letter-spacing:0.14em;
  font-size:0.72rem;
  color:var(--teal-deep);
  display:inline-flex;
  align-items:center;
  gap:0.5rem;
}
.eyebrow::before{
  content:"";
  width:22px;height:1px;
  background:var(--gold);
  display:inline-block;
}

/* ---------- Ledger-line motif ---------- */
.ledger{
  background-image:repeating-linear-gradient(
    to bottom,
    transparent 0,
    transparent 38px,
    var(--line) 39px
  );
}
.ledger-dark{
  background-image:repeating-linear-gradient(
    to bottom,
    transparent 0,
    transparent 38px,
    var(--line-dark) 39px
  );
}
hr.rule{border:0; border-top:1px solid var(--line); margin:0;}
.divider-stripe{
  height:6px;
  background:repeating-linear-gradient(90deg, var(--gold) 0 22px, var(--teal-deep) 22px 44px, var(--clay) 44px 66px);
  opacity:0.9;
}

/* ---------- Navbar ---------- */
.navbar{
  background:rgba(241,238,230,0.92);
  backdrop-filter:blur(8px);
  border-bottom:1px solid var(--line);
}
.navbar-brand{
  font-family:var(--ff-display);
  font-weight:700;
  font-size:1.35rem;
  color:var(--indigo) !important;
}
.navbar-brand .dot{color:var(--gold);}
.navbar .nav-link{
  font-size:0.92rem;
  color:var(--ink) !important;
  font-weight:500;
}
.navbar .nav-link:hover{color:var(--teal-deep) !important;}
.dropdown-menu{
  border:1px solid var(--line);
  border-radius:12px;
  box-shadow:var(--shadow-1);
  padding:0.6rem;
}
.dropdown-item{
  border-radius:8px;
  padding:0.55rem 0.75rem;
  font-size:0.9rem;
}
.dropdown-item small{display:block; color:var(--ink-soft); font-size:0.76rem;}
.dropdown-item:hover{background:var(--sand-2);}

/* ---------- Buttons ---------- */
.btn-gold{
  background:var(--gold);
  border:1px solid var(--gold);
  color:var(--indigo);
  font-weight:600;
  border-radius:999px;
  padding:0.65rem 1.4rem;
  position:relative;
  overflow:hidden;
  transition:transform .18s ease, box-shadow .18s ease;
}
.btn-gold:hover{
  color:var(--indigo);
  transform:translateY(-2px);
  box-shadow:0 12px 24px -10px rgba(227,164,56,0.55);
}
.btn-gold::after{
  content:"";
  position:absolute; inset:0;
  background:radial-gradient(circle, rgba(255,255,255,0.55) 0%, transparent 60%);
  opacity:0; transition:opacity .3s;
}
.btn-gold:hover::after{opacity:1;}
.btn-outline-line{
  border:1px solid var(--line);
  border-radius:999px;
  color:var(--ink);
  padding:0.65rem 1.4rem;
  font-weight:500;
  transition:border-color .18s, color .18s;
}
.btn-outline-line:hover{border-color:var(--teal-deep); color:var(--teal-deep);}
.btn-outline-sand{
  border:1px solid rgba(241,238,230,0.4);
  border-radius:999px;
  color:var(--sand);
  padding:0.65rem 1.4rem;
  font-weight:500;
}
.btn-outline-sand:hover{border-color:var(--gold); color:var(--gold);}

/* pulse for primary CTA */
.pulse-dot{
  width:9px; height:9px; border-radius:50%;
  background:var(--gold);
  display:inline-block;
  box-shadow:0 0 0 0 rgba(227,164,56,0.6);
  animation:pulse 2.2s infinite;
}
@keyframes pulse{
  0%{box-shadow:0 0 0 0 rgba(227,164,56,0.55);}
  70%{box-shadow:0 0 0 12px rgba(227,164,56,0);}
  100%{box-shadow:0 0 0 0 rgba(227,164,56,0);}
}

/* ---------- Hero connection map (signature element) ---------- */
.hero-wrap{position:relative; overflow:hidden;}
.node{
  fill:var(--gold);
  animation:blink 3s ease-in-out infinite;
}
.node.alt{animation-delay:1.1s; fill:var(--teal-deep);}
.node.alt2{animation-delay:2s;}
@keyframes blink{
  0%,100%{opacity:0.35; r:3;}
  50%{opacity:1; r:5;}
}
.route{
  stroke:var(--sand);
  stroke-width:1.2;
  stroke-dasharray:4 6;
  opacity:0.55;
  animation:dash 30s linear infinite;
}
@keyframes dash{ to{ stroke-dashoffset:-400; } }

/* ---------- Cards ---------- */
.card-lift{
  background:#fff;
  border:1px solid var(--line);
  border-radius:var(--radius);
  transition:transform .2s ease, box-shadow .2s ease, border-color .2s;
}
.card-lift:hover{
  transform:translateY(-6px);
  box-shadow:var(--shadow-1);
  border-color:rgba(14,110,107,0.35);
}
.icon-tile{
  width:46px; height:46px;
  border-radius:10px;
  background:var(--sand-2);
  display:flex; align-items:center; justify-content:center;
  color:var(--teal-deep);
  font-family:var(--ff-mono);
  font-weight:700;
}
.tag-chip{
  font-family:var(--ff-mono);
  font-size:0.72rem;
  color:var(--teal-ink);
  background:rgba(14,110,107,0.08);
  border:1px solid rgba(14,110,107,0.18);
  border-radius:999px;
  padding:0.2rem 0.6rem;
  display:inline-block;
}

/* ---------- Stats ---------- */
.stat-num{
  font-family:var(--ff-display);
  font-size:2.2rem;
  color:var(--indigo);
  font-weight:700;
}

/* ---------- Sections ---------- */
section{position:relative;}
.section-pad{padding:5rem 0;}
@media (max-width: 768px){ .section-pad{padding:3.2rem 0;} }

.footer-nx{
  background:var(--indigo);
  color:rgba(241,238,230,0.82);
}
.footer-nx a{color:rgba(241,238,230,0.82); text-decoration:none;}
.footer-nx a:hover{color:var(--gold);}
.footer-nx h6{
  font-family:var(--ff-mono);
  text-transform:uppercase;
  letter-spacing:0.1em;
  font-size:0.74rem;
  color:var(--gold-soft);
  margin-bottom:1rem;
}

/* breadcrumb */
.breadcrumb-nx{font-family:var(--ff-mono); font-size:0.78rem; color:var(--ink-soft);}
.breadcrumb-nx a:hover{color:var(--teal-deep);}

/* accordion (faq) */
.accordion-item{border:1px solid var(--line); border-radius:10px !important; margin-bottom:0.6rem; overflow:hidden;}
.accordion-button{font-family:var(--ff-display); font-weight:600; color:var(--indigo);}
.accordion-button:not(.collapsed){background:var(--sand-2); color:var(--teal-ink); box-shadow:none;}
.accordion-button:focus{box-shadow:none;}

/* image frame */
.img-frame{
  border-radius:var(--radius);
  overflow:hidden;
  border:1px solid var(--line);
  box-shadow:var(--shadow-1);
}
.img-frame img{width:100%; height:100%; object-fit:cover; display:block;}

/* back to top */
#backToTop{
  position:fixed; right:1.2rem; bottom:1.2rem;
  width:44px; height:44px; border-radius:50%;
  background:var(--indigo); color:var(--sand);
  display:flex; align-items:center; justify-content:center;
  opacity:0; pointer-events:none; transition:opacity .25s, transform .25s;
  z-index:999; border:1px solid rgba(241,238,230,0.2);
}
#backToTop.show{opacity:1; pointer-events:auto;}
#backToTop:hover{transform:translateY(-3px);}

/* whatsapp float */
.wa-float{
  position:fixed; left:1.2rem; bottom:1.2rem; z-index:999;
  background:var(--teal-deep); color:#fff;
  width:52px; height:52px; border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  box-shadow:var(--shadow-1);
  animation:floaty 3.2s ease-in-out infinite;
}
@keyframes floaty{ 0%,100%{transform:translateY(0);} 50%{transform:translateY(-6px);} }

/* process numbers — used only for genuinely sequential steps */
.step-num{
  font-family:var(--ff-mono);
  font-size:0.85rem;
  color:var(--gold);
  border:1px solid var(--gold);
  border-radius:999px;
  width:30px; height:30px;
  display:flex; align-items:center; justify-content:center;
  flex:none;
}

.marquee-track{
  display:flex; gap:2.5rem; white-space:nowrap;
  animation:scrollx 26s linear infinite;
}
@keyframes scrollx{ from{transform:translateX(0);} to{transform:translateX(-50%);} }