/* ============================================================
   RANGBLAZE MEDIA, 03 · COMPONENTS
   Reusable pieces shared across every page.
   ============================================================ */

/* ---------- BUTTONS ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.55rem;
  position:relative;isolation:isolate;overflow:hidden;
  padding:1rem 1.75rem;border-radius:var(--r-sm);
  font-family:var(--f-num);font-size:.86rem;font-weight:500;letter-spacing:.02em;
  background:var(--blaze);color:#fff;white-space:nowrap;
  transition:transform var(--t) var(--ease),box-shadow var(--t) var(--ease)}
.btn::before{content:"";position:absolute;inset:0;z-index:-1;background:var(--blaze-dk);
  transform:translateY(102%);transition:transform .42s var(--ease-o)}
.btn:hover{transform:translateY(-2px);box-shadow:0 12px 28px rgba(228,28,60,.3)}
.btn:hover::before{transform:translateY(0)}
.btn:active{transform:translateY(0)}
.btn svg{width:1em;height:1em;transition:transform var(--t-fast) var(--ease)}
.btn:hover svg{transform:translateX(3px)}
.btn.ghost{background:transparent;color:var(--ink);box-shadow:inset 0 0 0 1.5px var(--line-2)}
.btn.ghost::before{background:var(--ink)}
.btn.ghost:hover{color:#fff;box-shadow:inset 0 0 0 1.5px var(--ink)}
.on-dark .btn.ghost{color:#fff;box-shadow:inset 0 0 0 1.5px var(--rule-d2)}
.hero .btn.ghost{color:#fff;box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.4)}
.on-dark .btn.ghost:hover,.hero .btn.ghost:hover{box-shadow:inset 0 0 0 1.5px #fff;background:rgba(255,255,255,.08)}
.on-dark .btn.ghost::before{background:#fff}
.on-dark .btn.ghost:hover{color:var(--ink)}
.btn.wa{background:#25D366;color:#062A14}
.btn.wa::before{background:#1EBA57}
.btn.wa:hover{box-shadow:0 12px 28px rgba(37,211,102,.34)}
.btn.sm{padding:.62rem 1.15rem;font-size:.78rem}
.btn.lg{padding:1.15rem 2.1rem;font-size:.92rem}
.btn.wide{width:100%}
.btn-row{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center}
.btn-row.center{justify-content:center}

/* text link with animated rule */
.tlink{display:inline-flex;align-items:center;gap:.4rem;position:relative;padding-bottom:2px;
  font-family:var(--f-num);font-size:.8rem;font-weight:500;color:var(--accent,var(--blaze))}
.tlink::after{content:"";position:absolute;left:0;bottom:0;height:1.5px;width:100%;
  background:currentColor;transform:scaleX(0);transform-origin:right;
  transition:transform .38s var(--ease-o)}
.tlink:hover::after{transform:scaleX(1);transform-origin:left}
.tlink svg{width:.9em;height:.9em;transition:transform var(--t-fast) var(--ease)}
.tlink:hover svg{transform:translateX(3px)}

/* ---------- BADGES / TAGS / PILLS ---------- */
.badge{display:inline-flex;align-items:center;gap:.4rem;
  font-family:var(--f-num);font-size:var(--fs-2xs);font-weight:500;letter-spacing:.09em;
  text-transform:uppercase;padding:.35rem .7rem;border-radius:6px;
  background:color-mix(in srgb,var(--accent,var(--blaze)) 12%,transparent);
  color:var(--accent-deep,var(--blaze))}
.tag{display:inline-flex;align-items:center;gap:.42rem;align-self:flex-start;
  font-family:var(--f-num);font-size:var(--fs-2xs);font-weight:500;letter-spacing:.11em;
  text-transform:uppercase;color:var(--accent,var(--mute))}
.tag::before{content:"";width:7px;height:7px;border-radius:2px;background:currentColor;
  transform:rotate(45deg);flex:0 0 7px}
.pill{font-family:var(--f-num);font-size:.76rem;padding:.42rem .85rem;border-radius:99px;
  background:var(--paper-2);color:var(--ink);transition:background var(--t-fast),color var(--t-fast)}
a.pill:hover{background:var(--blaze);color:#fff}
.pill-row{display:flex;flex-wrap:wrap;gap:.5rem}

/* ---------- CARDS ---------- */
.card{background:#fff;border:1px solid var(--line);border-radius:var(--r);
  padding:clamp(1.4rem,2.4vw,1.9rem);height:100%;
  display:flex;flex-direction:column;gap:.6rem;position:relative;overflow:hidden;
  transition:transform .45s var(--ease),box-shadow .45s var(--ease),border-color var(--t)}
.card::after{content:"";position:absolute;inset:auto 0 0 0;height:2.5px;
  background:var(--accent,var(--blaze));transform:scaleX(0);transform-origin:left;
  transition:transform .45s var(--ease-o)}
.card:hover{transform:translateY(-5px);box-shadow:var(--sh-lg);border-color:transparent}
.card:hover::after{transform:scaleX(1)}
.card.flat:hover{transform:none;box-shadow:var(--sh)}
.card h3{margin-bottom:.1rem}
.card p{font-size:var(--fs-sm);flex:1}
.card .tlink,.card .badge{align-self:flex-start}
.card .tlink{margin-top:.35rem}
.card-ico{width:46px;height:46px;border-radius:12px;display:grid;place-items:center;
  background:color-mix(in srgb,var(--accent,var(--blaze)) 10%,var(--paper));
  color:var(--accent,var(--blaze));margin-bottom:.4rem;flex:0 0 auto;
  transition:background var(--t),color var(--t),transform .45s var(--ease)}
.card-ico svg{width:22px;height:22px}
.card:hover .card-ico{background:var(--accent,var(--blaze));color:#fff;transform:rotate(-6deg) scale(1.06)}
.card-num{font-family:var(--f-num);font-size:var(--fs-2xs);font-weight:500;letter-spacing:.12em;
  color:var(--accent,var(--blaze))}

/* ---------- STATS ---------- */
.stat b{display:block;font-family:var(--f-num);font-variant-numeric:tabular-nums;
  font-size:clamp(2rem,4vw,3rem);font-weight:600;color:var(--blaze);line-height:1;
  letter-spacing:-.03em;margin-bottom:.5rem}
.stat h4{margin-bottom:.3rem}
.stat p{font-size:var(--fs-sm);color:var(--body)}
.on-dark .stat p{color:var(--text-d2)}

/* ---------- MARQUEE ---------- */
.marquee{overflow:hidden;padding-block:1rem;border-block:1px solid var(--line);background:var(--paper);
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);
          mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent)}
.marquee-track{display:flex;width:max-content;gap:2.6rem;animation:mq 36s linear infinite}
.marquee:hover .marquee-track{animation-play-state:paused}
@keyframes mq{to{transform:translateX(-50%)}}
.mq-i{display:flex;align-items:center;gap:.7rem;white-space:nowrap;
  font-family:var(--f-num);font-size:.79rem;letter-spacing:.1em;text-transform:uppercase;color:var(--mute)}
.mq-i i{width:4px;height:4px;background:var(--blaze);border-radius:50%;flex:0 0 4px}

/* ---------- FAQ ---------- */
.faq{border-top:1px solid var(--line);max-width:820px}
.on-dark .faq{border-top-color:var(--rule-d)}
.faq li{border-bottom:1px solid var(--line)}
.on-dark .faq li{border-bottom-color:var(--rule-d)}
.faq-q{width:100%;display:flex;align-items:center;justify-content:space-between;gap:1.4rem;
  padding:1.3rem 0;text-align:left;
  font-family:var(--f-dis);font-weight:700;font-size:1rem;color:var(--ink);
  letter-spacing:-.015em;transition:color var(--t-fast)}
.on-dark .faq-q{color:#fff}
.faq-q:hover{color:var(--blaze)}
.on-dark .faq-q:hover{color:var(--blaze-hi)}
.faq-q i{flex:0 0 17px;width:17px;height:17px;position:relative}
.faq-q i::before,.faq-q i::after{content:"";position:absolute;background:var(--blaze);border-radius:1px;
  transition:transform var(--t) var(--ease)}
.faq-q i::before{left:0;right:0;top:7.5px;height:2px}
.faq-q i::after{top:0;bottom:0;left:7.5px;width:2px}
.faq li.open .faq-q i::after{transform:scaleY(0)}
.faq li.open .faq-q{color:var(--blaze)}
.faq-a{display:grid;grid-template-rows:0fr;transition:grid-template-rows .42s var(--ease)}
.faq li.open .faq-a{grid-template-rows:1fr}
.faq-a > div{overflow:hidden}
.faq-a p{padding-bottom:1.3rem;max-width:70ch;font-size:var(--fs-sm)}
.on-dark .faq-a p{color:var(--text-d)}
.faq-a p a{color:var(--blaze);text-decoration:underline;text-underline-offset:2px}

/* ---------- FORMS ---------- */
.field{margin-bottom:1rem}
.field label{display:block;margin-bottom:.4rem;
  font-family:var(--f-num);font-size:.72rem;font-weight:500;letter-spacing:.09em;
  text-transform:uppercase;color:var(--mute)}
.field input,.field select,.field textarea{width:100%;padding:.85rem 1rem;
  border:1.5px solid var(--line);border-radius:var(--r-sm);background:#fff;
  font-size:.98rem;color:var(--ink);transition:border-color var(--t-fast),box-shadow var(--t-fast)}
.field textarea{resize:vertical;min-height:96px}
.field input:focus,.field select:focus,.field textarea:focus{outline:0;
  border-color:var(--blaze);box-shadow:0 0 0 4px rgba(228,28,60,.1)}
/* form on dark */
.on-dark .field label{color:var(--text-d2)}
.on-dark .field input,.on-dark .field select,.on-dark .field textarea{
  background:rgba(255,255,255,.05);border-color:var(--rule-d2);color:#fff}
.on-dark .field input::placeholder,.on-dark .field textarea::placeholder{color:#5F6E8C}
.on-dark .field select option{background:var(--ink-2);color:#fff}
.on-dark .field input:focus,.on-dark .field select:focus,.on-dark .field textarea:focus{
  border-color:var(--blaze);background:rgba(255,255,255,.08);box-shadow:0 0 0 4px rgba(228,28,60,.15)}
.fmsg{display:none;padding:.85rem 1rem;border-radius:var(--r-sm);font-size:.88rem;margin-bottom:1rem}
.fmsg.ok{display:block;background:rgba(30,158,94,.1);border:1px solid rgba(30,158,94,.3);color:#15693A}
.fmsg.err{display:block;background:rgba(228,28,60,.1);border:1px solid rgba(228,28,60,.3);color:#A0182B}
.on-dark .fmsg.ok{background:rgba(53,199,126,.12);border-color:rgba(53,199,126,.35);color:#7FE3AF}
.on-dark .fmsg.err{background:rgba(228,28,60,.14);border-color:rgba(228,28,60,.4);color:#FF9BA8}
.fnote{margin-top:.85rem;font-family:var(--f-num);font-size:.7rem;color:var(--mute);line-height:1.6}
.on-dark .fnote{color:var(--text-d2)}
.honey{position:absolute;left:-9999px}

/* ---------- BREADCRUMBS ---------- */
.crumbs{display:flex;flex-wrap:wrap;gap:.45rem;align-items:center;margin-bottom:1.4rem;
  font-family:var(--f-num);font-size:.76rem;color:var(--mute)}
.crumbs a:hover{color:var(--blaze)}
.crumbs sep,.crumbs .sep{opacity:.4}
.on-dark .crumbs{color:var(--text-d2)}
.on-dark .crumbs a:hover{color:#fff}

/* ---------- FLOATING WHATSAPP ---------- */
.wa-float{position:fixed;right:clamp(1rem,3vw,1.7rem);bottom:clamp(1rem,3vw,1.7rem);z-index:70;
  width:52px;height:52px;border-radius:50%;background:#25D366;color:#062A14;
  display:grid;place-items:center;box-shadow:0 8px 24px rgba(37,211,102,.4);
  transition:transform var(--t) var(--ease)}
.wa-float:hover{transform:scale(1.08)}
.wa-float svg{width:25px;height:25px}
.wa-float::after{content:"";position:absolute;inset:0;border-radius:50%;
  border:2px solid #25D366;animation:ring 2.6s var(--ease) infinite}
@keyframes ring{0%{transform:scale(1);opacity:.6}100%{transform:scale(1.6);opacity:0}}

/* build-time note flag */
.note{display:inline-block;margin-top:1.5rem;padding:.65rem .9rem;border:1px dashed var(--line-2);
  border-radius:7px;font-family:var(--f-num);font-size:.68rem;color:var(--mute);letter-spacing:.04em}

/* ---------- ANNOUNCEMENT PILL (e.g. new office) ---------- */
.anno{display:inline-flex;align-items:center;gap:.55rem;margin-top:1.5rem;
  padding:.55rem .95rem;border-radius:99px;
  font-family:var(--f-num);font-size:.76rem;letter-spacing:.01em;color:#fff;
  background:color-mix(in srgb,var(--blaze) 15%,transparent);
  border:1px solid color-mix(in srgb,var(--blaze) 42%,transparent);
  transition:background var(--t),border-color var(--t)}
.anno:hover{background:color-mix(in srgb,var(--blaze) 24%,transparent);
  border-color:color-mix(in srgb,var(--blaze) 60%,transparent)}
.anno .dot{width:7px;height:7px;border-radius:50%;background:var(--blaze-hi);flex:0 0 7px;
  box-shadow:0 0 0 3px rgba(228,28,60,.22);animation:beat 2.6s infinite}
.anno svg{width:.9em;height:.9em;transition:transform var(--t-fast) var(--ease)}
.anno:hover svg{transform:translateX(3px)}
/* light-context variant */
.anno.light{color:var(--blaze-dk);background:color-mix(in srgb,var(--blaze) 9%,#fff);
  border-color:color-mix(in srgb,var(--blaze) 28%,transparent)}

/* ---------- MEDIA SLOT (real image or designed placeholder) ---------- */
.media{position:relative;border-radius:var(--r);overflow:hidden;background:var(--paper-2);
  border:1px solid var(--line);width:100%}
.media img{width:100%;height:100%;object-fit:cover;display:block}
.media-ph{display:grid;place-items:center;
  background:
    radial-gradient(120% 120% at 78% 12%,color-mix(in srgb,var(--accent,var(--blaze)) 24%,transparent),transparent 60%),
    linear-gradient(150deg,var(--accent-tint,var(--paper-2)),#fff);
  border-color:color-mix(in srgb,var(--accent,var(--blaze)) 18%,var(--line))}
.media-ph::after{content:"";position:absolute;inset:0;opacity:.5;pointer-events:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)' opacity='.04'/%3E%3C/svg%3E")}
.media-ico{width:clamp(56px,12%,88px);color:var(--accent,var(--blaze));opacity:.85}
.media-ico svg{width:100%;height:auto}
.media-tag{position:absolute;left:12px;bottom:12px;font-family:var(--f-num);font-size:.6rem;
  letter-spacing:.06em;color:var(--accent-deep,var(--mute));background:rgba(255,255,255,.7);
  padding:.3rem .55rem;border-radius:6px;backdrop-filter:blur(4px)}

/* ---------- DEV-ONLY BUILD NOTES ---------- */
/* Rendered only when RB_DEV_NOTES is on (localhost, or RB_DEV_NOTES=1).
   Coloured differently from .note so internal reminders are obvious at a
   glance and never get mistaken for copy that is meant to ship. */
.note-dev{border-style:solid;border-color:#c2410c;color:#c2410c;
  background:color-mix(in srgb,#c2410c 7%,transparent)}
.note-dev::before{content:"DEV ";font-weight:700;letter-spacing:.08em}

/* ---------- MEDIA VARIANTS ---------- */
/* Wide media sits full-width inside its wrap, used for case study and blog
   heroes. Round is a circular portrait for the founder block. Both fall back
   to the same designed placeholder until a real file is dropped in. */
.media-wide{width:100%}
.media-round{border-radius:50%;max-width:240px;margin:0 auto}
.media-round img,.media-round.media-ph{border-radius:50%}
@media(max-width:640px){
  .founder-split{grid-template-columns:1fr !important;text-align:center}
  .founder-split .media-round{margin:0 auto 1rem}
}
