/* starbucks88casino.com - .kb-* operator game floor.
   Cold, flat, one accent. 4px radii, 1px hairlines, no gradients outside the hero scrim and the
   wheel. Spacing runs on a 6px step (6/12/18/24/36/48), which is deliberately not the 8px step the
   most shells use. The floor is ONE centred column at every width. */

:root {
  --pg: #062018;
  --pn: #0a2b20;
  --ch: #0d3528;
  --hl: #18503c;
  --ac: #e8a33d;
  --ad: #b3741d;
  --jd: #19a06a;
  --ink: #f3faf6;
  --mut: #92b3a4;
  --ok: #3fd98f;
  --w: 1180px;
  --bar: 56px;
  --s1: 6px;
  --s2: 12px;
  --s3: 18px;
  --s4: 24px;
  --s5: 36px;
  --s6: 48px;
}

* { box-sizing: border-box; }

html {
  overflow-x: clip;
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  background: var(--pg);
  color: var(--ink);
  font: 15px/1.65 Inter, "Helvetica Neue", Arial, sans-serif;
  padding-bottom: calc(var(--bar) + 54px);
}

img {
  display: block;
  max-width: 100%;
  min-width: 0;
  height: auto;
}

a { color: inherit; text-decoration: none; }

h1, h2, h3, h4 {
  margin: 0;
  font-weight: 700;
  line-height: 1.25;
  letter-spacing: -0.01em;
}

.w {
  width: 100%;
  max-width: var(--w);
  margin-inline: auto;
  padding-inline: var(--s3);
}

.kb-off { display: none !important; }

/* ---------------------------------------------------------------- buttons */
.kb-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--s1);
  min-height: 38px;
  padding: 0 var(--s3);
  border: 1px solid transparent;
  border-radius: 4px;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  cursor: pointer;
  transition: background .15s linear, border-color .15s linear;
}

.kb-btn.p { background: var(--ac); color: #041611; }
.kb-btn.p:hover { background: #f2bb5d; }
.kb-btn.q { background: #2b5c47; color: var(--ink); }
.kb-btn.q:hover { background: #356b53; }
.kb-btn.o { border-color: var(--hl); color: var(--ink); background: none; }
.kb-btn.o:hover { border-color: var(--ac); color: var(--ac); }
.kb-btn.g { background: none; border-color: var(--ac); color: var(--ac); }
.kb-btn.lg { min-height: 46px; padding: 0 var(--s4); font-size: 14px; }
.kb-btn.w { width: 100%; }

/* ---------------------------------------------------------------- header */
.kb-head { position: relative; z-index: 40; }

.kb-top { background: var(--pg); border-bottom: 1px solid var(--hl); }

.kb-top .w {
  display: flex;
  align-items: center;
  gap: var(--s3);
  min-height: 62px;
}

.kb-logo { flex: 0 0 auto; min-width: 0; }
.kb-logo svg { width: 92px; height: 40px; display: block; }

.kb-burger {
  display: none;
  width: 44px;
  height: 44px;
  border: 1px solid var(--hl);
  border-radius: 4px;
  background: none;
  color: var(--ink);
  font-size: 17px;
  cursor: pointer;
}

.kb-auth {
  margin-left: auto;
  display: flex;
  gap: var(--s2);
  min-width: 0;
}

.kb-chrome { background: var(--ch); border-bottom: 1px solid var(--hl); }

.kb-chrome .w {
  display: flex;
  align-items: center;
  gap: var(--s3);
  min-height: 44px;
}

.kb-verts {
  display: flex;
  flex-wrap: wrap;
  gap: var(--s4);
  min-width: 0;
}

.kb-verts a {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: #bcd6c8;
  padding: var(--s2) 0;
  border-bottom: 2px solid transparent;
}

.kb-verts a:hover { color: var(--ac); border-bottom-color: var(--ac); }

.kb-meta {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: var(--s3);
  font-size: 11px;
  color: var(--mut);
  min-width: 0;
}

.clk { font-variant-numeric: tabular-nums; white-space: nowrap; }

.kb-lang { display: flex; gap: 2px; }

.kb-lang a {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding: 3px 9px;
  border: 1px solid var(--hl);
  border-radius: 3px;
  font-size: 11px;
  color: var(--mut);
}

.kb-lang a.on { background: var(--ac); border-color: var(--ac); color: #041611; }

.kb-tick {
  overflow: hidden;
  background: var(--pn);
  border-bottom: 1px solid var(--hl);
  padding: var(--s1) 0;
}

.kb-tick span {
  display: inline-block;
  padding-left: 100%;
  white-space: nowrap;
  font-size: 12px;
  color: #a8c7b6;
  animation: m8scroll 46s linear infinite;
}

@keyframes m8scroll { to { transform: translateX(-100%); } }

/* ---------------------------------------------------------------- hero */
.kb-hero { position: relative; margin-bottom: var(--s5); }

.kb-hero > img {
  width: 100%;
  aspect-ratio: 16 / 7;
  object-fit: cover;
}

.kb-hero .ov {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  background: linear-gradient(90deg, rgba(4,22,17,.94) 0%, rgba(4,22,17,.72) 46%, rgba(4,22,17,0) 78%);
}

.kb-hero .eb {
  display: inline-block;
  margin-bottom: var(--s2);
  padding: 5px 12px;
  border: 1px solid var(--ac);
  border-radius: 3px;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ac);
}

.kb-hero strong {
  display: block;
  max-width: 18ch;
  font-size: clamp(25px, 5vw, 64px);
  font-weight: 800;
  line-height: 1.1;
  letter-spacing: -0.02em;
}

.kb-hero .nums {
  display: flex;
  gap: var(--s5);
  margin: var(--s4) 0;
}

.kb-hero .nums b {
  display: block;
  font-size: 36px;
  font-weight: 800;
  color: var(--ac);
}

/* The hero carries the page's main offer, so its button is sized to the headline rather than
   to the sitewide .lg step. Scoped to .kb-hero: every other .lg button is unchanged. */
.kb-hero .kb-btn {
  min-height: 56px;
  padding: 0 var(--s5);
  font-size: 16px;
  letter-spacing: 0.04em;
}

.kb-hero .nums small {
  font-size: 12px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--mut);
}

/* ---------------------------------------------------------------- floor */
.kb-floor {
  width: 100%;
  max-width: var(--w);
  margin-inline: auto;
  padding-inline: var(--s3);
  display: flex;
  flex-direction: column;
  gap: var(--s6);
}

.kb-sh {
  display: flex;
  align-items: center;
  gap: var(--s3);
  margin-bottom: var(--s3);
  padding-bottom: var(--s2);
  border-bottom: 1px solid var(--hl);
}

.kb-sh h2 { font-size: 17px; letter-spacing: 0; }

.kb-sh > a {
  margin-left: auto;
  font-size: 12px;
  color: var(--ac);
  white-space: nowrap;
}

/* --- recommended, vertical tabs --- */
.kb-tabs {
  display: flex;
  flex-wrap: wrap;
  gap: var(--s1);
  margin-left: auto;
}

.kb-tabs button {
  padding: 5px 11px;
  border: 1px solid var(--hl);
  border-radius: 3px;
  background: none;
  color: var(--mut);
  font-size: 12px;
  font-family: inherit;
  cursor: pointer;
}

.kb-tabs button.on { background: var(--ac); border-color: var(--ac); color: #041611; font-weight: 700; }

.kb-rec .bd {
  display: grid;
  grid-template-columns: 270px minmax(0, 1fr);
  gap: var(--s4);
  align-items: start;
}

.kb-feat {
  position: relative;
  display: block;
  min-width: 0;
  border: 1px solid var(--hl);
  border-radius: 4px;
  overflow: hidden;
}

.kb-feat img { width: 100%; aspect-ratio: 3 / 4; object-fit: cover; }

.kb-feat .ov {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  padding: var(--s4) var(--s3) var(--s3);
  background: linear-gradient(0deg, rgba(4,22,17,.95), rgba(4,22,17,0));
}

.kb-feat .ov b { display: block; font-size: 15px; }
.kb-feat .ov small { font-size: 11px; color: var(--mut); }

.kb-rec .panes { min-width: 0; }

.kb-rec .pane {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--s2);
}

.kb-rec .sq {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--s1);
  min-width: 0;
  min-height: 106px;
  padding: var(--s2);
  border: 1px solid var(--hl);
  border-radius: 4px;
  background: var(--pn);
  text-align: center;
}

.kb-rec .sq:hover { border-color: var(--ac); }

.kb-rec .sq .ic {
  display: flex;
  align-items: center;
  justify-content: center;
  min-width: 0;
  width: 100%;
  min-height: 38px;
  padding: 4px 8px;
  border-radius: 3px;
  background: #fff;
}

.kb-rec .sq .ic img { max-height: 28px; width: auto; min-width: 0; object-fit: contain; }
.kb-rec .sq .ic.t { font-size: 15px; font-weight: 800; color: var(--ac); }
.kb-rec .sq > span:last-child { font-size: 11px; color: var(--mut); }

.kb-rec .dots { display: flex; justify-content: center; gap: var(--s1); margin-top: var(--s3); }
.kb-rec .dots i { width: 6px; height: 6px; border-radius: 50%; background: var(--hl); }
.kb-rec .dots i.on { width: 20px; border-radius: 3px; background: var(--ac); }

/* --- game cards --- */
.kb-picks .gr {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  gap: var(--s2);
}

.kb-game { display: block; min-width: 0; }

.kb-game .th {
  position: relative;
  display: block;
  border: 1px solid var(--hl);
  border-radius: 4px;
  overflow: hidden;
}

.kb-game .th img { width: 100%; aspect-ratio: 1 / 1; object-fit: cover; }
.kb-game:hover .th { border-color: var(--ac); }

.kb-tag {
  position: absolute;
  top: 5px;
  left: 5px;
  padding: 2px 6px;
  border-radius: 2px;
  font-size: 9px;
  font-style: normal;
  font-weight: 800;
  letter-spacing: 0.08em;
  color: #041611;
  background: var(--ac);
}

.kb-tag.new { background: var(--ok); }

.kb-game b { display: block; margin-top: var(--s1); font-size: 12px; font-weight: 600; }

.kb-game small {
  display: flex;
  justify-content: space-between;
  gap: var(--s1);
  font-size: 10px;
  color: var(--mut);
}

.kb-game small i { font-style: normal; color: var(--ad); }

/* --- live dealer rail --- */
.kb-live .rail {
  display: flex;
  gap: var(--s2);
  overflow-x: auto;
  padding-bottom: var(--s2);
  scroll-snap-type: x mandatory;
}

.kb-live .it { flex: 0 0 212px; min-width: 0; scroll-snap-align: start; }

.kb-live .im {
  position: relative;
  display: block;
  border: 1px solid var(--hl);
  border-radius: 4px;
  overflow: hidden;
}

.kb-live .im img { width: 100%; aspect-ratio: 1 / 1; object-fit: cover; object-position: 50% 32%; }

.kb-live .pl {
  position: absolute;
  inset: 0;
  margin: auto;
  width: 38px;
  height: 38px;
  border: 2px solid rgba(255,255,255,.85);
  border-radius: 50%;
  opacity: 0;
  transition: opacity .15s linear;
}

.kb-live .pl::after {
  content: "";
  position: absolute;
  inset: 0;
  margin: auto;
  width: 0;
  height: 0;
  border-left: 11px solid #fff;
  border-top: 7px solid transparent;
  border-bottom: 7px solid transparent;
  transform: translateX(2px);
}

.kb-live .it:hover .pl { opacity: 1; }

.kb-live .nm {
  display: flex;
  align-items: center;
  gap: var(--s1);
  margin-top: var(--s1);
  font-size: 12px;
  font-weight: 600;
}

.kb-live .nm em {
  padding: 1px 5px;
  border-radius: 2px;
  font-size: 9px;
  font-style: normal;
  font-weight: 800;
  color: #041611;
  background: var(--ac);
}

.kb-live .nm em.new { background: var(--ok); }
.kb-live small { font-size: 10px; color: var(--mut); }

/* --- jackpot --- */
.kb-jp {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--s1);
  padding: var(--s5) var(--s3);
  border: 1px solid var(--hl);
  border-radius: 4px;
  background: radial-gradient(ellipse at 50% 0%, rgba(232,163,61,.14), transparent 68%), var(--pn);
  text-align: center;
}

.kb-jp .k {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ac);
}

.kb-jp b {
  font-size: clamp(30px, 6vw, 54px);
  font-weight: 800;
  letter-spacing: -0.02em;
  font-variant-numeric: tabular-nums;
}

.kb-jp b i { font-style: normal; }
.kb-jp .s { font-size: 12px; color: var(--mut); }
.kb-jp .kb-btn { margin-top: var(--s3); }

/* --- paired boards --- */
.kb-boards .bd {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--s4);
}

.kb-board {
  min-width: 0;
  border: 1px solid var(--hl);
  border-radius: 4px;
  background: var(--pn);
  overflow: hidden;
}

.kb-board .h {
  display: flex;
  align-items: center;
  gap: var(--s2);
  padding: var(--s2) var(--s3);
  border-bottom: 1px solid var(--hl);
  background: var(--ch);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.07em;
  text-transform: uppercase;
}

.kb-board .live {
  margin-left: auto;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 10px;
  color: var(--ok);
}

.kb-board .live::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--ok);
  animation: m8pulse 1.7s ease-in-out infinite;
}

@keyframes m8pulse { 50% { opacity: .25; } }

.kb-board table { width: 100%; border-collapse: collapse; font-size: 12px; }
.kb-board td { padding: var(--s1) var(--s3); border-top: 1px solid rgba(24,80,60,.6); }
.kb-board td.a { text-align: right; font-variant-numeric: tabular-nums; color: var(--ac); }
.kb-board.wd td.a { color: var(--ok); }
.kb-board td.p { text-align: right; width: 34%; color: var(--mut); }

/* --- app block --- */
.kb-app .bd {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  gap: var(--s5);
  align-items: center;
  justify-items: center;
  padding: var(--s5) var(--s3);
  border: 1px solid var(--hl);
  border-radius: 4px;
  background: var(--pn);
}

.kb-app .qr { text-align: center; min-width: 0; }

.kb-app .qr img {
  display: block;
  width: 116px;
  height: 116px;
  border-radius: 6px;
  /* A QR needs a white field and its quiet zone. Tinting it, or cropping the border, is the
     other way to ship a code that will not scan. */
  background: #fff;
}

.kb-app .qr b { display: block; font-size: 13px; }
.kb-app .qr small { font-size: 11px; color: var(--mut); }

.kb-app .ph {
  min-width: 0;
  width: 182px;
  padding: 9px 7px;
  border: 2px solid #2b5c47;
  border-radius: 22px;
  background: #05090b;
}

.kb-app .ph img { width: 100%; aspect-ratio: 3 / 4; object-fit: cover; border-radius: 14px; }

.kb-app .fts {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--s2);
  margin-top: var(--s4);
}

.kb-app .ft {
  min-width: 0;
  padding: var(--s3);
  border: 1px solid var(--hl);
  border-radius: 4px;
  text-align: center;
}

.kb-app .ft .i { display: block; font-size: 21px; margin-bottom: var(--s1); }
.kb-app .ft b { display: block; font-size: 13px; }
.kb-app .ft small { font-size: 11px; color: var(--mut); }

/* --- provider wall --- */
.kb-wall .gr {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  gap: var(--s2);
}

.kb-prov {
  display: flex;
  align-items: center;
  justify-content: center;
  min-width: 0;
  min-height: 62px;
  padding: var(--s2);
  border: 1px solid var(--hl);
  border-radius: 4px;
  background: var(--pn);
}

.kb-prov:hover .lg { box-shadow: 0 0 0 2px var(--ac); }

.kb-prov:hover { border-color: var(--ac); }

/* ONE treatment for every mark: a white chip, the logo in its own colour, no silhouetting.
   Three treatments at once (lifted / bare / solid badge) read as three different walls. */
.kb-prov .lg {
  display: flex;
  align-items: center;
  justify-content: center;
  min-width: 0;
  width: 100%;
  min-height: 40px;
  padding: 6px 10px;
  border-radius: 3px;
  background: #fff;
}

.kb-prov .lg img { max-height: 26px; width: auto; min-width: 0; object-fit: contain; }
.kb-prov .lg.t { font-size: 12px; color: var(--mut); }

/* --- testimonials --- */
.kb-testi .gr {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--s2);
}

.kb-testi .bx {
  margin: 0;
  min-width: 0;
  padding: var(--s3);
  border: 1px solid var(--hl);
  border-radius: 4px;
  background: var(--pn);
}

.kb-testi .av { font-size: 21px; }
.kb-testi figcaption b { display: block; font-size: 13px; }
.kb-testi figcaption small { font-size: 11px; color: var(--mut); }
.kb-testi .st { display: block; margin: var(--s1) 0; font-size: 11px; color: var(--ac); letter-spacing: 1px; }
.kb-testi blockquote { margin: 0; font-size: 12px; line-height: 1.6; color: #bcd6c8; }

/* ---------------------------------------------------------------- article */
.kb-content {
  width: 100%;
  max-width: 900px;
  margin: var(--s6) auto 0;
  padding-inline: var(--s3);
}

.kb-content h1 {
  font-size: clamp(23px, 3.4vw, 34px);
  font-weight: 800;
  margin-bottom: var(--s3);
}

.kb-content .lead { font-size: 16px; line-height: 1.7; color: #bcd6c8; }

.kb-content h2 {
  margin: var(--s6) 0 var(--s2);
  padding-left: var(--s2);
  border-left: 3px solid var(--ac);
  font-size: 19px;
}

.kb-content h3 { margin: var(--s4) 0 var(--s1); font-size: 15px; }
.kb-content p { margin: 0 0 var(--s3); color: #bcd6c8; }
.kb-content a { color: var(--ac); text-decoration: underline; text-underline-offset: 2px; }
.kb-content ul, .kb-content ol { margin: 0 0 var(--s3); padding-left: var(--s4); color: #bcd6c8; }
.kb-content li { margin-bottom: var(--s1); }

.kb-ph {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 420px);
  gap: var(--s5);
  align-items: center;
  margin-bottom: var(--s5);
}

.kb-ph img { width: 100%; aspect-ratio: 16 / 9; object-fit: cover; border-radius: 4px; }

.kb-ph .eb {
  display: inline-block;
  margin-bottom: var(--s2);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ac);
}

.kb-ph .act, .kb-content .act { display: flex; flex-wrap: wrap; gap: var(--s2); margin-top: var(--s4); }
.kb-content .act.utl { margin-bottom: var(--s5); }

.kb-kpis {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--s2);
  margin: var(--s5) 0;
}

.kb-kpis > div {
  min-width: 0;
  padding: var(--s3);
  border: 1px solid var(--hl);
  border-radius: 4px;
  background: var(--pn);
}

.kb-kpis b { display: block; font-size: 23px; font-weight: 800; color: var(--ac); }
.kb-kpis span { font-size: 11px; color: var(--mut); }

.kb-steps { counter-reset: m8s; margin: var(--s4) 0; padding: 0; list-style: none; }

.kb-steps li {
  position: relative;
  counter-increment: m8s;
  margin-bottom: var(--s3);
  padding-left: var(--s6);
  color: #bcd6c8;
}

.kb-steps li::before {
  content: counter(m8s);
  position: absolute;
  left: 0;
  top: 0;
  width: 27px;
  height: 27px;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--ac);
  border-radius: 4px;
  font-size: 12px;
  font-weight: 800;
  color: var(--ac);
}

.kb-tw { overflow-x: auto; margin: var(--s4) 0; }

.kb-tbl {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
  border: 1px solid var(--hl);
}

.kb-tbl th {
  padding: var(--s2) var(--s3);
  background: var(--ch);
  border-bottom: 1px solid var(--hl);
  text-align: left;
  font-size: 11px;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--ac);
}

.kb-tbl td { padding: var(--s2) var(--s3); border-top: 1px solid var(--hl); color: #bcd6c8; }
.kb-tbl tbody tr:nth-child(odd) { background: rgba(10,43,32,.6); }

.kb-faq { margin: var(--s4) 0; }

.kb-faq details {
  border: 1px solid var(--hl);
  border-radius: 4px;
  margin-bottom: var(--s1);
  background: var(--pn);
}

.kb-faq summary {
  padding: var(--s2) var(--s3);
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
}

.kb-faq p { margin: 0; padding: 0 var(--s3) var(--s3); font-size: 13px; }

.kb-band {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s3);
  margin: var(--s6) 0 var(--s4);
  padding: var(--s4);
  border: 1px solid var(--ac);
  border-radius: 4px;
  background: rgba(232,163,61,.07);
}

.kb-band b { flex: 1 1 260px; min-width: 0; font-size: 15px; font-weight: 600; }

/* ---------------------------------------------------------------- chrome overlays */
.kb-util {
  position: fixed;
  left: 0;
  top: 46%;
  z-index: 30;
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.kb-util a {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  width: 58px;
  padding: var(--s2) 4px;
  border: 1px solid var(--hl);
  border-left: none;
  border-radius: 0 4px 4px 0;
  background: var(--ch);
  font-size: 9px;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--mut);
}

.kb-util a:hover { color: var(--ac); border-color: var(--ac); }
.kb-util .i { font-size: 16px; color: var(--ac); }

.kb-spin {
  position: fixed;
  right: var(--s3);
  bottom: calc(var(--bar) + 66px);
  z-index: 30;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--s1);
}

.kb-spin .wh {
  position: relative;
  width: 76px;
  height: 76px;
  border: 3px solid var(--ac);
  border-radius: 50%;
  background: conic-gradient(#124032 0 45deg, #0b2f24 45deg 90deg, #124032 90deg 135deg,
    #0b2f24 135deg 180deg, #124032 180deg 225deg, #0b2f24 225deg 270deg,
    #124032 270deg 315deg, #0b2f24 315deg 360deg);
  transition: transform 4s cubic-bezier(.17,.67,.2,1);
}

.kb-spin .wh ul { display: none; }

.kb-spin .pin {
  position: absolute;
  top: -9px;
  left: 50%;
  width: 0;
  height: 0;
  border-left: 6px solid transparent;
  border-right: 6px solid transparent;
  border-top: 10px solid var(--ac);
  transform: translateX(-50%);
}

.kb-spin .kb-btn { min-height: 28px; padding: 0 var(--s2); font-size: 10px; }

/* Retire the floating extras once the footer is on screen. A fixed element passing over content
   while you scroll is what a fixed element does; one still sitting on top of a trust mark when
   the page has STOPPED is covered content, and that is a defect. At 320 the spin badge covered
   godaddy 90% and the util rail covered gamcare 41% and gamstop 52% at scroll-end.
   The sticky register bar and the bottom nav deliberately stay: they are the CTA. */
.kb-atfoot .kb-util,
.kb-atfoot .kb-spin { display: none; }

/* ---------------------------------------------------------------- popup */
.kb-pop {
  position: fixed;
  inset: 0;
  z-index: 90;
  display: none;
  align-items: center;
  justify-content: center;
  padding: var(--s3);
  background: rgba(3,16,12,.84);
}

.kb-pop.on { display: flex; }

.kb-pop .bx {
  position: relative;
  width: 100%;
  max-width: 430px;
  max-height: 92vh;
  overflow: hidden auto;
  border: 1px solid var(--hl);
  border-radius: 6px;
  background: var(--pn);
}

.kb-pop .x {
  position: absolute;
  top: 8px;
  right: 8px;
  z-index: 2;
  width: 32px;
  height: 32px;
  border: 1px solid var(--hl);
  border-radius: 4px;
  background: rgba(6,32,24,.85);
  color: var(--ink);
  font-size: 19px;
  line-height: 1;
  cursor: pointer;
}

.kb-pop .ix {
  display: flex;
  gap: 2px;
  /* The close button is absolutely positioned over this row's top-right. padding-right only
     adds trailing scroll space, so the box still extended under the X and clipped the last tab
     on a 320px screen. margin-right ends the box itself before the button. */
  margin-right: 46px;
  padding: var(--s2) 0 0 var(--s2);
  overflow-x: auto;
  scrollbar-width: none;
}

.kb-pop .ix button {
  flex: 0 0 auto;
  padding: 5px 9px;
  border: 1px solid var(--hl);
  border-radius: 3px;
  background: none;
  color: var(--mut);
  font-size: 11px;
  font-family: inherit;
  cursor: pointer;
}

.kb-pop .ix button.on { background: var(--ac); border-color: var(--ac); color: #041611; }
.kb-pop .ix i { display: none; }
.kb-pop .pane { padding: var(--s2); }
.kb-pop .pane > span { display: block; }
.kb-pop .pane img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 4px; }
.kb-pop .cap { display: block; padding: var(--s3) var(--s1) 0; text-align: center; }
.kb-pop .cap b { display: block; font-size: 18px; font-weight: 800; color: var(--ac); }
.kb-pop .cap span { display: block; margin: var(--s1) 0 var(--s3); font-size: 13px; color: #bcd6c8; }

.kb-pop .pg {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--s3);
  padding: var(--s3) 0 var(--s1);
}

.kb-pop .pg button {
  width: 32px;
  height: 32px;
  border: 1px solid var(--hl);
  border-radius: 4px;
  background: none;
  color: var(--ink);
  font-size: 15px;
  cursor: pointer;
}

.kb-pop .pg .n { font-size: 12px; color: var(--mut); font-variant-numeric: tabular-nums; }

/* ---------------------------------------------------------------- footer */
.kb-foot { margin-top: var(--s6); border-top: 1px solid var(--hl); background: #05170f; }

.kb-foot .r1, .kb-foot .r2 {
  display: grid;
  grid-template-columns: 1.6fr 1fr 1fr 1.2fr;
  gap: var(--s5);
  padding-block: var(--s5);
}

.kb-foot .r2 { border-top: 1px solid var(--hl); grid-template-columns: repeat(4, minmax(0, 1fr)); }
.kb-foot .c { min-width: 0; }

.kb-foot h4 {
  margin-bottom: var(--s2);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.06em;
  color: var(--ac);
}

.kb-foot .c > a { display: block; font-size: 12px; color: var(--mut); margin-bottom: var(--s1); }
.kb-foot .c > a:hover { color: var(--ink); }
.kb-foot .brand svg { width: 86px; height: 36px; margin-bottom: var(--s2); }
.kb-foot .brand p { margin: 0 0 var(--s3); font-size: 12px; line-height: 1.7; color: var(--mut); }

.kb-foot .lic {
  display: inline-flex;
  flex-direction: column;
  padding: var(--s1) var(--s2);
  border-radius: 3px;
  background: #117a52;
  font-size: 17px;
  font-weight: 800;
  line-height: 1.1;
  color: #fff;
}

.kb-foot .lic i { font-size: 8px; font-style: normal; font-weight: 400; letter-spacing: 0.04em; }

.kb-foot .pay, .kb-foot .bd, .kb-foot .soc {
  display: flex;
  flex-wrap: wrap;
  gap: var(--s2);
  align-items: center;
  min-width: 0;
}

.kb-foot .pay span, .kb-foot .bd span {
  display: flex;
  align-items: center;
  justify-content: center;
  min-width: 0;
  min-height: 28px;
  padding: 4px 7px;
  border-radius: 3px;
  background: #fff;
}

.kb-foot .pay img, .kb-foot .bd img {
  max-height: 18px;
  width: auto;
  min-width: 0;
  object-fit: contain;
}

.kb-foot .soc a {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 30px;
  height: 30px;
  border: 1px solid var(--hl);
  border-radius: 50%;
}

.kb-foot .soc svg { width: 15px; height: 15px; fill: var(--mut); }
.kb-foot .soc a:hover { border-color: var(--ac); }
.kb-foot .soc a:hover svg { fill: var(--ac); }

.kb-foot .legal {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s2);
  padding-block: var(--s3);
  border-top: 1px solid var(--hl);
  font-size: 11px;
  color: var(--mut);
}

.kb-foot .age {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 25px;
  height: 25px;
  border: 1px solid #cf5a46;
  border-radius: 50%;
  font-size: 10px;
  font-weight: 800;
  color: #cf5a46;
}

.kb-foot .cp { margin-left: auto; }

/* ---------------------------------------------------------------- fixed bars */
.kb-scta {
  position: fixed;
  left: 0;
  right: 0;
  bottom: var(--bar);
  z-index: 35;
  display: none;
  padding: var(--s1) var(--s3);
  border-top: 1px solid var(--hl);
  background: rgba(6,32,24,.96);
}

.kb-nav {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 36;
  display: none;
  padding-top: 9px;
  border-top: 1px solid var(--hl);
  background: var(--ch);
}

.kb-nav a {
  position: relative;
  flex: 1 1 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1px;
  min-width: 0;
  min-height: 44px;
  padding-bottom: 5px;
  font-size: 9px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--mut);
}

.kb-nav .i { font-size: 15px; }

.kb-nav .coin .i {
  position: absolute;
  top: -22px;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 46px;
  height: 46px;
  border: 3px solid var(--ch);
  border-radius: 50%;
  background: var(--ac);
  color: #041611;
  font-size: 21px;
}

.kb-nav .coin { color: var(--ac); padding-top: 25px; }

/* ---------------------------------------------------------------- responsive */
@media (max-width: 1080px) {
  .kb-rec .bd { grid-template-columns: 220px minmax(0, 1fr); }
  .kb-picks .gr { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .kb-wall .gr { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .kb-testi .gr { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .kb-foot .r1 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .kb-foot .r2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 860px) {
  .kb-burger { display: block; }
  .kb-verts {
    display: none;
    width: 100%;
    flex-direction: column;
    gap: 0;
  }
  .kb-head.open .kb-verts { display: flex; }
  .kb-head.open .kb-chrome .w { flex-wrap: wrap; padding-bottom: var(--s2); }
  .kb-verts a { width: 100%; padding: var(--s2) 0; border-bottom: 1px solid var(--hl); }
  .kb-meta { margin-left: auto; }
  .clk { display: none; }
  .kb-auth .kb-btn.q { display: none; }
  .kb-hero > img { aspect-ratio: 4 / 3; }
  .kb-hero .ov { background: linear-gradient(0deg, rgba(4,22,17,.96) 22%, rgba(4,22,17,.42) 100%); align-items: flex-end; }
  .kb-hero .ov .w { padding-bottom: var(--s4); }
  .kb-hero .nums { gap: var(--s4); margin: var(--s3) 0; }
  /* The desktop step would crowd a 375px screen; hold the phone at its old size. */
  .kb-hero .nums b { font-size: 26px; }
  .kb-hero .kb-btn { min-height: 46px; padding: 0 var(--s4); font-size: 14px; }
  .kb-rec .bd { grid-template-columns: minmax(0, 1fr); }
  .kb-feat img { aspect-ratio: 16 / 9; }
  .kb-boards .bd { grid-template-columns: minmax(0, 1fr); }
  .kb-app .bd { grid-template-columns: minmax(0, 1fr); gap: var(--s4); }
  .kb-app .fts { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .kb-ph { grid-template-columns: minmax(0, 1fr); gap: var(--s4); }
  .kb-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  /* RM2,480,000 at 23px does not fit a 140px track, and the cells already carry
     min-width:0, so the figure is what has to give on a small phone. */
  .kb-kpis b { font-size: 19px; }
  .kb-scta { display: block; }
  .kb-nav { display: flex; }
  .kb-util { top: auto; bottom: calc(var(--bar) + 66px); }
  .kb-util a:nth-child(n+2) { display: none; }
  .kb-spin { right: var(--s2); bottom: calc(var(--bar) + 150px); }
  .kb-spin .wh { width: 58px; height: 58px; }
  .kb-foot .cp { margin-left: 0; width: 100%; }
}

@media (max-width: 520px) {
  .kb-picks .gr { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .kb-wall .gr { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .kb-testi .gr { grid-template-columns: minmax(0, 1fr); }
  .kb-rec .pane { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .kb-foot .r1, .kb-foot .r2 { grid-template-columns: minmax(0, 1fr); gap: var(--s4); }
  .kb-floor { gap: var(--s5); }
  .kb-live .it { flex-basis: 170px; }
}

@media (prefers-reduced-motion: reduce) {
  .kb-tick span { animation: none; padding-left: 0; }
  .kb-board .live::before { animation: none; }
  .kb-spin .wh { transition: none; }
  * { scroll-behavior: auto !important; }
}


/* ---------------------------------------------------------------- the six rooms
   Round medallions rather than square category tiles. Six across on a
   desktop, three on a tablet, two on a phone -- two keeps the portrait big enough to read as a
   picture of a room rather than an icon. */
.kb-rooms { margin-block: var(--s5); }
.kb-rooms .gr {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: var(--s4) var(--s3);
}
.kb-rooms .rm {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--s1);
  min-width: 0;
  padding: var(--s2) var(--s1) var(--s3);
  border-radius: 14px;
  text-align: center;
  color: var(--ink);
  transition: background .18s ease, transform .18s ease;
}
.kb-rooms .rm:hover { background: var(--pn); transform: translateY(-3px); }
.kb-rooms .md {
  display: block;
  width: 100%;
  max-width: 128px;
  aspect-ratio: 1;
  border-radius: 50%;
  overflow: hidden;
  border: 2px solid var(--hl);
  box-shadow: 0 6px 18px rgba(3, 16, 12, .5);
}
.kb-rooms .rm:hover .md { border-color: var(--ac); }
.kb-rooms .md img {
  width: 100%;
  height: 100%;
  min-width: 0;
  object-fit: cover;
  display: block;
}
.kb-rooms .rm b { font-size: 14.5px; font-weight: 700; line-height: 1.25; }
.kb-rooms .rm small { font-size: 12px; color: var(--mut); }

/* ---------------------------------------------------------------- flip-digit pool
   Each digit gets its own box so the counter reads as a mechanical split-flap rather than a
   number in a paragraph. The commas sit between boxes, unboxed. */
.kb-jp {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--s2);
  padding: var(--s5) var(--s3);
  margin-block: var(--s5);
  border: 1px solid var(--hl);
  border-radius: 16px;
  background:
    radial-gradient(120% 140% at 50% 0%, rgba(232, 163, 61, .13), transparent 62%),
    var(--pn);
  text-align: center;
}
.kb-jp .k {
  font-size: 12px;
  font-weight: 700;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--ac);
}
.kb-jp b { display: flex; align-items: center; gap: 4px; flex-wrap: wrap; justify-content: center; }
.kb-jp b em {
  font-style: normal;
  font-size: 20px;
  font-weight: 700;
  color: var(--mut);
  margin-right: 4px;
}
.kb-jp b i {
  font-style: normal;
  display: inline-block;
  min-width: 34px;
  padding: 6px 2px;
  border-radius: 6px;
  background: linear-gradient(#123d2e 0 50%, #0b2a20 50% 100%);
  border: 1px solid var(--hl);
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .5);
  font-size: 34px;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
  color: #ffd98a;
}
.kb-jp b u { text-decoration: none; font-size: 26px; color: var(--mut); }
.kb-jp .s { font-size: 13px; color: var(--mut); }

@media (max-width: 900px) {
  .kb-rooms .gr { grid-template-columns: repeat(3, 1fr); }
  .kb-jp b i { min-width: 27px; font-size: 26px; }
}

@media (max-width: 560px) {
  .kb-rooms .gr { grid-template-columns: repeat(2, 1fr); gap: var(--s3) var(--s2); }
  .kb-rooms .md { max-width: 112px; }
  .kb-jp { padding: var(--s4) var(--s2); }
  .kb-jp b i { min-width: 22px; padding: 4px 1px; font-size: 21px; border-radius: 5px; }
  .kb-jp b u { font-size: 18px; }
}


/* ---------------------------------------------------------------- tap targets
   Every control a thumb has to hit is at least 44px tall. The inherited shell sized these by
   their text: the section "View all" links render 40x20, the footer column links 20px tall and
   the chrome-bar verticals 20px, which is all 80 of the mobile tap-target warnings. Padding
   alone would change the layout, so these grow with min-height and centre their own text. */
.kb-sh > a {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
}

.kb-foot .c > a {
  display: flex;
  align-items: center;
  min-height: 44px;
  margin-bottom: 0;
  font-size: 12.5px;
}

.kb-verts a {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
}

.kb-lang a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 44px;
  min-height: 44px;
}

@media (max-width: 760px) {
  /* Stacked in the drawer, the verticals need the full row rather than an inline box. */
  .kb-verts a { display: flex; width: 100%; }
}


/* The last four controls under 44px: the one-character "4D" chrome item sized by its own text,
   and the footer social icons at 30x30. */
.kb-verts a { min-width: 44px; justify-content: center; }
.kb-foot .soc a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 44px;
  min-height: 44px;
}
