﻿/* ============ DQT — PC Optimization Service — original design ============
   Theme: BLACK & GOLD
   - Near-black warm base  → premium, focused, high-end feel
   - Gold accents          → luxury, quality, "top tier" service
   - Brighter gold CTAs    → the eye lands on the action
   - Green confirmations   → safety / success signals
*/
:root {
  --bg: #070604;
  --bg-alt: #0d0b07;
  --surface: #14110a;
  --surface-2: #1c1810;
  --border: #2e2718;
  --text: #f7f3e8;
  --muted: #b0a68d;
  --faint: #988c72;
  --accent: #e3b341;
  /* The two gold stops, named so a second gradient can reuse them at a
     different angle without restating the palette. */
  --gold-lo: #f7dd8a;
  --gold-hi: #c9921a;
  --accent-grad: linear-gradient(135deg, var(--gold-lo), var(--gold-hi));
  /* Same gold, laid out horizontally: the tier meter samples slices of this
     across its whole width, so it needs a purely horizontal ramp. */
  --tier-base-grad: linear-gradient(to right, var(--gold-lo), var(--gold-hi));
  --cta-grad: linear-gradient(135deg, #ffd75e, #e8a318);
  /* One travelling gold sheen shared by the MOST POPULAR badge and the tier
     meter, so the two read as the same material rather than two golds. */
  --gold-sheen: linear-gradient(110deg, #f7dd8a 20%, #c9921a 40%, #ffe9a8 50%, #c9921a 60%, #f7dd8a 80%);
  --on-gold: #1a1402;
  --success: #34d399;
  --danger: #f87171;
  --radius: 16px;
  --shadow: 0 10px 40px rgba(0, 0, 0, 0.55);
  --maxw: 1140px;
  --font-head: "Space Grotesk", "Inter", "Segoe UI", sans-serif;

  /* Whole-site render scale. 1 = 100%, 0.95 = one browser-zoom step down.
     Change this single value to retune it; see the `zoom` rule on body. */
  --ui-scale: 0.95;
}

/* Phones stay at 100%. Below 560px the layout is already a single column, so
   shrinking buys no extra content — it only costs text legibility and pushes
   tap targets further under the 44px minimum. */
@media (max-width: 560px) {
  :root { --ui-scale: 1; }
}

* { box-sizing: border-box; margin: 0; padding: 0; }
/* The hidden attribute must always win, even over display:grid/flex rules below */
[hidden] { display: none !important; }

html { scroll-behavior: smooth; }
body {
  font-family: "Inter", "Segoe UI", system-ui, sans-serif;
  background: var(--bg);
  color: var(--text);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  /* ------------------------------ UI scale ------------------------------
     Renders the site one browser-zoom step down (95%), so a little more fits
     on screen without touching a single size value anywhere else.

     `zoom` rather than `transform: scale()` on purpose: zoom participates in
     layout, so there is no leftover gap at the edges, no doubled scrollbar,
     and position:sticky/fixed keep working. A transform would create a
     containing block and break the sticky header.

     Applied to <body>, not <html>: zooming the root element changes the
     coordinate space media queries are evaluated in, which would shift every
     breakpoint by ~5% and could flip a layout right at the boundary.
     On <body> the breakpoints stay honest. */
  zoom: var(--ui-scale, 1);
}
img { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
h1, h2, h3, h4 { font-family: var(--font-head); }
section { scroll-margin-top: 84px; }
::selection { background: var(--accent); color: var(--on-gold); }

/* gold-tinted scrollbar */
::-webkit-scrollbar { width: 11px; }
::-webkit-scrollbar-track { background: var(--bg-alt); }
::-webkit-scrollbar-thumb { background: var(--border); border-radius: 6px; }
::-webkit-scrollbar-thumb:hover { background: var(--accent); }

.container { max-width: var(--maxw); margin: 0 auto; padding: 0 24px; }
.container-narrow { max-width: 780px; }

/* ------------------------------- buttons ------------------------------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  padding: 12px 22px; border-radius: 12px; border: 1px solid transparent;
  font: 600 15px/1 "Inter", sans-serif; cursor: pointer; transition: 0.2s;
  white-space: nowrap;
}
.btn-lg { padding: 16px 30px; font-size: 16px; }
.btn-primary {
  background: var(--cta-grad); color: var(--on-gold);
  box-shadow: 0 6px 24px rgba(232, 163, 24, 0.3);
}
.btn-primary:hover { transform: translateY(-2px); box-shadow: 0 10px 30px rgba(232, 163, 24, 0.5); }
.btn-ghost { background: transparent; border-color: var(--border); color: var(--text); }
.btn-ghost:hover { border-color: var(--accent); color: var(--accent); transform: translateY(-1px); }
.btn:active:not(:disabled) { transform: scale(0.96); transition-duration: 0.08s; }
.btn:disabled { opacity: 0.6; cursor: wait; transform: none; }
/* shared "picked" pop for toggles (chips, tabs) */
@keyframes pressPop { 40% { transform: scale(1.06); } }
:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }

/* --------------------------------- nav --------------------------------- */
.nav {
  position: sticky; top: 0; z-index: 50;
  background: rgba(7, 6, 4, 0.88); backdrop-filter: blur(12px);
  border-bottom: 1px solid var(--border);
}
.nav-inner { display: flex; align-items: center; justify-content: space-between; height: 74px; gap: 24px; }
/* never let flex squeeze the logo — it must always render at its full aspect */
.brand { flex: none; display: flex; align-items: center; gap: 11px; }
.brand img { height: 50px; width: auto; max-width: none; }
.brand-text { display: flex; flex-direction: column; line-height: 1.05; }
.brand-name { font-family: var(--font-head); font-weight: 700; font-size: 21px; letter-spacing: 2px; color: var(--text); }
.brand-sub {
  font-size: 10.5px; font-weight: 700; letter-spacing: 2.5px; text-transform: uppercase; margin-top: 0;
  /* animated gold sheen, matching the hero H1 */
  background: var(--gold-sheen);
  background-size: 200% auto;
  -webkit-background-clip: text; background-clip: text; color: transparent;
  animation: gradSheen 5.5s ease-in-out infinite;
}
.brand-lockup { display: inline-flex; align-items: center; gap: 11px; }
.brand-lockup img { height: 46px; width: auto; }

/* ---- plan tier logos: color-coded by intensity (blue -> gold -> red) ---- */
.plan-logo { display: block; height: 58px; width: auto; margin: 2px auto 14px; }
.plan--free .plan-logo { filter: drop-shadow(0 0 8px rgba(196, 170, 120, 0.45)); }
.plan--ignition .plan-logo { filter: drop-shadow(0 0 9px rgba(46, 139, 255, 0.6)); }
.plan--overdrive .plan-logo { filter: drop-shadow(0 0 9px rgba(227, 179, 65, 0.6)); }
.plan--apex .plan-logo { filter: saturate(1.4) brightness(1.22) drop-shadow(0 0 15px rgba(255, 86, 86, 0.9)); }
.nav-links { display: flex; gap: 24px; }
.nav-links a { color: var(--muted); font-size: 14.5px; font-weight: 500; transition: color 0.2s; }
.nav-links a:hover, .nav-links a.active { color: var(--accent); }
.nav-cta { display: flex; align-items: center; gap: 12px; }
.nav-burger {
  display: none; background: none; border: 1px solid var(--border); color: var(--text);
  font-size: 18px; border-radius: 10px; padding: 6px 12px; cursor: pointer;
}
.btn-discord {
  background: #5865f2; color: #fff;
  box-shadow: 0 6px 24px rgba(88, 101, 242, 0.35);
}
.btn-discord:hover { transform: translateY(-2px); box-shadow: 0 10px 30px rgba(88, 101, 242, 0.55); color: #fff; }
.btn-discord svg { width: 20px; height: 20px; fill: currentColor; flex: none; }
.plan-discord { width: 100%; margin-top: auto; }
.lang { position: relative; }
.lang-btn {
  display: inline-flex; align-items: center; gap: 5px;
  background: var(--surface-2); border: 1px solid var(--border); color: var(--text);
  border-radius: 10px; padding: 8px 10px; font: 600 13px "Inter", sans-serif; cursor: pointer;
  transition: border-color 0.2s, box-shadow 0.2s;
}
.lang-btn:hover, .lang.open .lang-btn { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(227, 179, 65, 0.14); }
.lang-caret { width: 13px; height: 13px; color: var(--muted); transition: transform 0.25s ease; }
.lang.open .lang-caret { transform: rotate(180deg); }
.lang-menu {
  position: absolute; top: calc(100% + 8px); inset-inline-end: 0; z-index: 60;
  min-width: 130px; margin: 0; padding: 6px; list-style: none;
  background: var(--surface-2); border: 1px solid var(--border); border-radius: 12px;
  box-shadow: 0 16px 40px rgba(0, 0, 0, 0.45);
  opacity: 0; transform: translateY(-8px) scale(0.97); transform-origin: top;
  visibility: hidden; pointer-events: none;
  transition: opacity 0.2s ease, transform 0.2s ease, visibility 0.2s;
}
.lang.open .lang-menu { opacity: 1; transform: none; visibility: visible; pointer-events: auto; }
.lang-opt {
  padding: 9px 12px; border-radius: 8px; font: 600 13px "Inter", sans-serif; color: var(--muted);
  cursor: pointer; white-space: nowrap; text-align: start; transition: background 0.15s, color 0.15s;
}
.lang-opt:hover, .lang-opt:focus-visible { background: var(--surface); color: var(--text); outline: none; }
.lang-opt[aria-selected="true"] { color: var(--accent); }
html[lang="ar"] body, html[lang="he"] body { font-family: "Segoe UI", Tahoma, "Inter", sans-serif; }

/* --------------------------------- hero -------------------------------- */
.hero {
  position: relative; overflow: hidden;
  background:
    radial-gradient(900px 500px at 85% -10%, rgba(201, 146, 26, 0.14), transparent 60%),
    radial-gradient(700px 400px at -10% 30%, rgba(247, 221, 138, 0.07), transparent 60%),
    var(--bg);
}
.hero::before {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background:
    linear-gradient(rgba(227, 179, 65, 0.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(227, 179, 65, 0.05) 1px, transparent 1px);
  background-size: 44px 44px;
  mask-image: radial-gradient(700px 460px at 70% 20%, #000 30%, transparent 75%);
}
.hero-inner {
  position: relative;
  display: grid; grid-template-columns: 1.15fr 0.85fr; gap: 48px;
  align-items: center; padding: 92px 24px 80px;
}
.hero-inner > div { min-width: 0; } /* let the ticker shrink instead of forcing overflow */
.pill {
  display: inline-block; padding: 7px 14px; border-radius: 999px;
  border: 1px solid var(--border); background: var(--surface);
  color: var(--accent); font-size: 13px; font-weight: 600; margin-bottom: 22px;
}
.hero h1 { font-size: clamp(38px, 5.4vw, 60px); font-weight: 700; line-height: 1.08; letter-spacing: -1px; }
.grad {
  background: var(--gold-sheen);
  background-size: 200% auto;
  -webkit-background-clip: text; background-clip: text; color: transparent;
  animation: gradSheen 5.5s ease-in-out infinite;
}
@keyframes gradSheen { 0%, 100% { background-position: 0% center; } 50% { background-position: 100% center; } }
.lead { color: var(--muted); font-size: 18px; margin: 22px 0 30px; max-width: 540px; }
.hero-actions { display: flex; gap: 14px; flex-wrap: wrap; }
.hero-actions .btn-primary { box-shadow: 0 6px 30px rgba(232, 163, 24, 0.4); }

/* services ticker */
.ticker {
  margin-top: 26px; max-width: min(540px, 100%); overflow: hidden; white-space: nowrap;
  mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
}
.ticker-track { display: inline-flex; width: max-content; animation: tickerMove 30s linear infinite; }
.ticker-track span { color: var(--faint); font-size: 13.5px; font-weight: 600; letter-spacing: 0.5px; padding-inline-end: 6px; }
@keyframes tickerMove { to { transform: translateX(-50%); } }
[dir="rtl"] .ticker-track { animation-name: tickerMoveRtl; }
@keyframes tickerMoveRtl { to { transform: translateX(50%); } }

.hero-stats { display: flex; gap: 40px; margin-top: 34px; flex-wrap: wrap; }
.stat strong { font-size: 32px; font-weight: 800; color: var(--accent); font-family: var(--font-head); }
/* The third stat is a phrase, not a counter. At the counters' 32px it breaks at
   its own hyphen and stacks three lines deep on a 320px screen, so it gets a
   text size of its own — scoped to .stat-text, leaving the two real counters at
   32px. The line box is pinned to the counters' own (32px x the inherited 1.6)
   so the three captions still sit on one baseline when they share a row. */
.stat-text strong { font-size: 20px; line-height: calc(32px * 1.6); }
.stat span { display: block; color: var(--muted); font-size: 13.5px; }
.fineprint { color: var(--faint); font-size: 12px; margin-top: 14px; }

/* fps demo card + floating result chips */
.fps-wrap { position: relative; }
.float-chip {
  position: absolute; z-index: 2; padding: 8px 15px; border-radius: 999px;
  background: rgba(20, 17, 10, 0.92); border: 1px solid var(--accent); color: var(--accent);
  font: 700 13px var(--font-head); box-shadow: 0 6px 20px rgba(0, 0, 0, 0.45);
  animation: floaty 4.5s ease-in-out infinite;
}
.fc1 { top: -16px; inset-inline-start: -14px; }
.fc2 { top: 30%; inset-inline-end: -16px; border-color: var(--success); color: var(--success); animation-delay: 1.4s; }
.fc3 { bottom: -16px; inset-inline-start: 14%; animation-delay: 2.6s; }
@keyframes floaty { 50% { transform: translateY(-9px); } }

.fps-card {
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius);
  box-shadow: var(--shadow); overflow: hidden;
  transition: transform 0.15s ease-out; will-change: transform;
}
.fps-card-head { display: flex; align-items: center; gap: 7px; padding: 14px 18px; border-bottom: 1px solid var(--border); background: var(--surface-2); }
.dot { width: 11px; height: 11px; border-radius: 50%; }
.dot-red { background: #f87171; } .dot-yellow { background: #e3b341; } .dot-green { background: #34d399; }
.fps-card-title {
  margin-inline-start: 8px; color: var(--accent); font-size: 11.5px; font-weight: 700;
  text-transform: uppercase; letter-spacing: 1.6px; font-family: var(--font-head);
}
.fps-rows { padding: 22px 18px; display: grid; gap: 18px; }
.fps-row { display: grid; grid-template-columns: 84px 1fr; align-items: center; gap: 12px; }
.fps-label { color: var(--muted); font-size: 13px; font-weight: 600; }
.fps-bar { background: var(--surface-2); border-radius: 8px; height: 34px; overflow: hidden; }
.fps-fill {
  height: 100%; width: var(--w); border-radius: 8px;
  display: flex; align-items: center; justify-content: flex-end; padding-inline-end: 10px;
  font-size: 13px; font-weight: 700; animation: grow 1.2s ease both;
}
.fps-before { background: #3a3422; color: #d8d0ba; }
.fps-after { background: var(--accent-grad); color: var(--on-gold); animation-delay: 0.25s; }
@keyframes grow { from { width: 0; } to { width: var(--w); } }
.fps-meta { font-size: 14px; color: var(--muted); }
.fps-meta b { color: var(--success); }
.fps-fill em { font-style: normal; font-size: 11px; font-weight: 800; margin-inline-start: 6px; opacity: 0.8; }
.fps-graph { border-top: 1px solid var(--border); padding-top: 12px; }
.fps-graph svg { width: 100%; height: 34px; display: block; }
.ft-before { fill: none; stroke: #7a5550; stroke-width: 2; }
.ft-after { fill: none; stroke: var(--success); stroke-width: 2; }
.fps-graph-labels { display: flex; justify-content: space-between; margin-top: 4px; }
.fps-graph-labels span { font-size: 11px; color: var(--faint); font-family: Consolas, monospace; }
.fps-card-foot { padding: 12px 18px; border-top: 1px solid var(--border); color: var(--faint); font-size: 12px; }

/* --------------------- section ambience backgrounds --------------------- */
.section { position: relative; }
.section > .container { position: relative; z-index: 1; }
.section-bg { position: absolute; inset: 0; overflow: hidden; pointer-events: none; }
.section-bg img {
  width: 100%; height: 100%; object-fit: cover; opacity: 0.13;
  filter: saturate(0.85) brightness(0.9);
  transform: scale(1.12);
  animation: bgDrift 38s ease-in-out infinite alternate;
  will-change: transform;
}
.section-bg video {
  width: 100%; height: 100%; object-fit: cover; opacity: 0.18;
  filter: saturate(0.9);
}
.section-bg-strong img { opacity: 0.22; }
.section-bg::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(180deg, var(--bg) 0%, rgba(7, 6, 4, 0.3) 30%, rgba(7, 6, 4, 0.3) 70%, var(--bg) 100%);
}
.section-alt .section-bg::after {
  background: linear-gradient(180deg, var(--bg-alt) 0%, rgba(13, 11, 7, 0.3) 30%, rgba(13, 11, 7, 0.3) 70%, var(--bg-alt) 100%);
}
@keyframes bgDrift {
  from { transform: scale(1.12) translate3d(-1.4%, 0, 0); }
  to { transform: scale(1.12) translate3d(1.4%, -1.2%, 0); }
}

/* -------------------- studios & companies (special) --------------------- */
.section-head .kicker.kicker-special {
  display: inline-block; padding: 8px 20px; border-radius: 999px;
  background: var(--gold-sheen);
  background-size: 200% auto; color: var(--on-gold);
  font-weight: 800; letter-spacing: 2px; font-size: 13.5px;
  text-shadow: none; box-shadow: 0 4px 18px rgba(227, 179, 65, 0.35);
  animation: gradSheen 5.5s ease-in-out infinite;
}

/* ------------------ hero video + gold-framed proof card ----------------- */
.hero { position: relative; overflow: hidden; }
.hero > .container { position: relative; z-index: 1; }
.hero .fps-card {
  border: 2px solid transparent; overflow: hidden;
  background-image: linear-gradient(var(--surface), var(--surface)), var(--cta-grad);
  background-origin: border-box; background-clip: padding-box, border-box;
  box-shadow: 0 0 38px rgba(227, 179, 65, 0.28), var(--shadow);
}
.fps-shot { background: #fff; }
.fps-shot img { display: block; width: 100%; height: auto; }

/* --------------------------- seo learn card ---------------------------- */
.learn-card p { color: var(--muted); font-size: 15.5px; line-height: 1.85; }
.learn-card p + p { margin-top: 16px; }
.learn-card p b, .learn-card strong { color: var(--text); font-weight: 600; }

/* -------------------------------- strip -------------------------------- */
.strip { border-block: 1px solid var(--border); background: var(--bg-alt); position: relative; overflow: hidden; }
/* Heart-monitor trace behind the game tags: the line itself stays put (dim),
   while a bright gold pulse sweeps along it like a live ECG reading.
   All three <use> share one path; dasharray sum (1600) > path length, so
   exactly one "comet" travels the line per cycle and the loop is seamless. */
.strip-pulse {
  position: absolute; inset: 0; pointer-events: none;
  mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent);
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent);
}
.strip-pulse svg { width: 100%; height: 100%; display: block; }
.strip-pulse use { fill: none; stroke-linejoin: round; stroke-linecap: round; }
.pulse-base { stroke: rgba(231, 192, 90, 0.13); stroke-width: 1.2; }
.pulse-glow { stroke: rgba(231, 192, 90, 0.3); stroke-width: 4.5; stroke-dasharray: 150 1650; animation: pulseRun 5.5s linear infinite; }
.pulse-head { stroke: #ffe9a8; stroke-width: 1.8; stroke-dasharray: 70 1730; animation: pulseRun 5.5s linear infinite; }
@keyframes pulseRun { from { stroke-dashoffset: 1800; } to { stroke-dashoffset: 0; } }
[dir="rtl"] .pulse-glow, [dir="rtl"] .pulse-head { animation-direction: reverse; }
.strip-inner { display: flex; flex-direction: column; gap: 13px; padding: 18px 24px; position: relative; }
.strip-label { color: var(--faint); font-size: 12.5px; font-weight: 600; text-transform: uppercase; letter-spacing: 1px; }
.strip-tags { display: flex; gap: 12px; flex-wrap: wrap; justify-content: center; }
.strip-tags span {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 6px 14px; border-radius: 999px; border: 1px solid var(--border);
  color: var(--muted); font-size: 13px; font-weight: 600; transition: 0.2s;
}
.strip-tags svg { width: 15px; height: 15px; flex: none; }
.strip-tags span:hover { border-color: var(--accent); color: var(--accent); }

/* ------------------------------- sections ------------------------------ */
.section { padding: 88px 0; }
.section-alt { background: var(--bg-alt); border-block: 1px solid var(--border); }
.section-head { text-align: center; max-width: 640px; margin: 0 auto 52px; }
.kicker { color: var(--accent); font-size: 13px; font-weight: 700; text-transform: uppercase; letter-spacing: 2px; }
.section-head h2 { font-size: clamp(28px, 3.6vw, 40px); font-weight: 700; margin: 10px 0 12px; letter-spacing: -0.5px; }
.section-head p { color: var(--muted); }

.grid { display: grid; gap: 22px; }
.grid-3 { grid-template-columns: repeat(3, 1fr); }
.grid-2 { grid-template-columns: 1fr 1fr; }

.card {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 28px; transition: 0.25s;
}
/* Lifts add to the reveal offset rather than replacing it — see --reveal-y. */
.card:hover { border-color: #4a3f24; transform: translateY(calc(var(--reveal-y) - 3px)); box-shadow: 0 10px 32px rgba(0, 0, 0, 0.4); }

/* ------------------------------ inline icons ---------------------------- */
.svg-ico {
  width: 100%; height: 100%;
  fill: none; stroke: var(--accent); stroke-width: 1.7;
  stroke-linecap: round; stroke-linejoin: round;
}
.feature-ico, .trust-ico, .repair-ico {
  width: 52px; height: 52px; padding: 11px; margin-bottom: 16px;
  border-radius: 14px; background: rgba(227, 179, 65, 0.08);
  border: 1px solid rgba(227, 179, 65, 0.25);
}

/* -------------------------------- steps -------------------------------- */
.step {
  padding-top: 20px; position: relative; overflow: hidden;
  background: rgba(18, 15, 9, 0.62);
  backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
  border: 1px solid rgba(227, 179, 65, 0.18);
  transition: transform 0.25s, box-shadow 0.25s, border-color 0.25s;
}
.step::after {
  content: ""; position: absolute; top: 0; left: 18px; right: 18px; height: 2px;
  border-radius: 0 0 2px 2px; background: var(--accent-grad); opacity: 0.6;
}
.step:hover {
  transform: translateY(calc(var(--reveal-y) - 4px)); border-color: rgba(227, 179, 65, 0.45);
  box-shadow: 0 16px 42px rgba(0, 0, 0, 0.5), 0 0 26px rgba(227, 179, 65, 0.12);
}
.step-head { display: flex; align-items: center; gap: 12px; margin-bottom: 10px; }
.step-head .step-num { margin-bottom: 0; width: 38px; height: 38px; border-radius: 10px; flex: none; }
.step-points { list-style: none; margin-top: 14px; display: grid; gap: 8px; padding: 0; }
.step-points li {
  display: flex; align-items: flex-start; gap: 9px;
  color: var(--text); font-size: 13.5px; line-height: 1.45;
}
.step-points li::before {
  content: "✓"; flex: none; width: 18px; height: 18px; border-radius: 6px;
  display: grid; place-items: center; font-size: 11px; font-weight: 800;
  background: rgba(52, 211, 153, 0.16); color: var(--success);
}
.how-note {
  margin-top: 26px; padding: 15px 22px; text-align: center;
  border: 1px solid rgba(227, 179, 65, 0.35); border-radius: 12px;
  background: linear-gradient(90deg, rgba(227, 179, 65, 0.09), rgba(227, 179, 65, 0.02));
  color: var(--muted); font-size: 14.5px;
}
.step-art {
  height: 140px; margin: -20px -28px 18px; border-bottom: 1px solid rgba(227, 179, 65, 0.22);
  background: linear-gradient(180deg, rgba(227, 179, 65, 0.05), transparent);
  border-radius: var(--radius) var(--radius) 0 0; overflow: hidden;
}
.step-art svg { width: 100%; height: 100%; }
.art-panel { fill: var(--surface-2); stroke: var(--border); stroke-width: 1.5; }
.art-line { stroke: #564b30; stroke-width: 2; fill: none; stroke-linecap: round; }
.art-line.thick { stroke-width: 4; stroke: #6a5d3c; }
.art-dot-grid circle { fill: #564b30; }
.art-knob { fill: url(#gBrand); }
.art-meter { fill: none; stroke: #564b30; stroke-width: 2; }
.art-meter-fill { fill: url(#gBrand); }
.art-badge { fill: var(--surface); stroke: url(#gBrand); stroke-width: 2.5; }
.art-check { fill: none; stroke: url(#gBrand); stroke-width: 3.5; stroke-linecap: round; stroke-linejoin: round; }
.art-bar { fill: #3a3422; }
.art-bar-hot { fill: url(#gBrand); }
.art-trend { fill: none; stroke: #ffd75e; stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; }
.art-halo { fill: rgba(227, 179, 65, 0.055); }
.art-outline { fill: var(--surface-2); stroke: #6a5d3c; stroke-width: 2; }
.art-band { fill: url(#gBrand); opacity: 0.9; }
.art-gold { fill: url(#gBrand); }
/* knobs glide along their slider tracks like a live tuning session —
   mechanical ease, no cartoon scaling */
.art-knob { animation: knobSlideL 4.6s cubic-bezier(0.45, 0.05, 0.55, 0.95) infinite; transform-box: fill-box; transform-origin: center; }
.art-knob.k2 { animation: knobSlideR 5.6s cubic-bezier(0.45, 0.05, 0.55, 0.95) infinite 0.7s; }
.art-knob.k3 { animation: knobSlideL 6.4s cubic-bezier(0.45, 0.05, 0.55, 0.95) infinite 1.4s; }
@keyframes knobSlideL { 50% { transform: translateX(-22px); } }
@keyframes knobSlideR { 50% { transform: translateX(24px); } }
/* benchmark bars rise into place when the card reveals, then breathe gently */
.art-bar, .art-bar-hot { transform-box: fill-box; transform-origin: bottom; }
.art-bar { animation: barSurge 4.4s ease-in-out 1.6s infinite; }
.step.visible .art-bar { animation: barGrow 0.7s cubic-bezier(0.22, 1, 0.36, 1) backwards, barSurge 4.4s ease-in-out 1.6s infinite; }
.step.visible .art-bar + .art-bar { animation-delay: 0.12s, 1.75s; }
.step.visible .art-bar + .art-bar + .art-bar { animation-delay: 0.24s, 1.9s; }
.step.visible .art-bar + .art-bar + .art-bar + .art-bar { animation-delay: 0.36s, 2.05s; }
.art-bar-hot { animation: barSurge 4.4s ease-in-out 2.3s infinite; }
.step.visible .art-bar-hot { animation: barGrow 0.9s cubic-bezier(0.22, 1, 0.36, 1) 0.5s backwards, barSurge 4.4s ease-in-out 2.3s infinite; }
@keyframes barGrow { from { transform: scaleY(0); } }
@keyframes barSurge { 50% { transform: scaleY(1.06); } }
/* result chip pops softly */
rect.art-gold, .art-chip-text { transform-box: fill-box; transform-origin: center; animation: chipPop 3.8s ease-in-out infinite 1.5s; }
@keyframes chipPop { 10% { transform: scale(1.09); } 20% { transform: scale(1); } }
/* glow dot lands at the end of the trend line, then pulses like a live reading */
.art-trend-dot { fill: #ffd75e; transform-box: fill-box; transform-origin: center; animation: dotPulse 3s ease-in-out 2s infinite; }
.step.visible .art-trend-dot { animation: dotIn 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) 1.35s backwards, dotPulse 3s ease-in-out 2s infinite; }
@keyframes dotIn { from { transform: scale(0); } }
@keyframes dotPulse { 50% { transform: scale(1.45); opacity: 0.55; } }
/* halo breathes softly behind each scene */
.art-halo { animation: haloBreathe 6s ease-in-out infinite; transform-box: fill-box; transform-origin: center; }
@keyframes haloBreathe { 50% { transform: scale(1.05); opacity: 0.65; } }
/* gold sheen sweeps across the artwork on hover */
.step-art { position: relative; }
.step-art::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(105deg, transparent 42%, rgba(247, 221, 138, 0.12) 50%, transparent 58%);
  transform: translateX(-130%);
}
.step:hover .step-art::after { transform: translateX(130%); transition: transform 0.9s ease; }
/* the checkmark and trend line draw themselves in when the card scrolls into view */
.art-check, .art-trend { stroke-dasharray: 160; }
.step.visible .art-check { animation: strokeDraw 0.9s ease-out 0.35s backwards; }
.step.visible .art-trend { animation: strokeDraw 1.2s ease-out 0.25s backwards; }
@keyframes strokeDraw { from { stroke-dashoffset: 160; } to { stroke-dashoffset: 0; } }
.art-needle {
  stroke: url(#gCta); stroke-width: 3.5; stroke-linecap: round;
  transform-box: fill-box; transform-origin: 0% 100%;
  animation: needleWiggle 3.2s ease-in-out infinite;
}
@keyframes needleWiggle { 0%, 100% { transform: rotate(-10deg); } 50% { transform: rotate(14deg); } }
.art-chip-text { fill: var(--on-gold); font: 800 11px "Inter", sans-serif; }
.step-num {
  font-size: 14px; font-weight: 800; color: var(--on-gold); background: var(--accent-grad);
  width: 44px; height: 44px; border-radius: 12px; display: grid; place-items: center; margin-bottom: 18px;
  font-family: var(--font-head);
  box-shadow: 0 6px 18px rgba(227, 179, 65, 0.35);
}
.step h3, .feature h3, .trust h3 { font-size: 18px; margin-bottom: 10px; }
.step p, .feature p, .trust p { color: var(--muted); font-size: 14.5px; }

/* ------------------------------- repairs -------------------------------- */
.repair-card { position: relative; }
.repair-card h3 { font-size: 20px; margin-bottom: 10px; }
.repair-card > p { color: var(--muted); font-size: 14.5px; margin-bottom: 16px; }
.repair-card > p b { color: var(--text); }
.repair-list { list-style: none; display: grid; gap: 9px; margin-bottom: 8px; }
.repair-list li { color: var(--muted); font-size: 14px; padding-inline-start: 28px; position: relative; line-height: 1.5; }
.repair-list li::before {
  content: "✓"; position: absolute; inset-inline-start: 0; top: 1px;
  width: 18px; height: 18px; border-radius: 6px; display: grid; place-items: center;
  font-size: 11px; font-weight: 800;
  background: rgba(52, 211, 153, 0.16); color: var(--success);
}
.repair-featured {
  border-color: rgba(227, 179, 65, 0.5);
  background: linear-gradient(180deg, rgba(247, 221, 138, 0.05), var(--surface) 45%);
}
.repair-featured .btn { margin-top: 16px; }
.repair-flag {
  position: absolute; top: 24px; inset-inline-end: 24px;
  background: var(--accent-grad); color: var(--on-gold); font-size: 11.5px; font-weight: 800;
  padding: 5px 14px; border-radius: 999px; text-transform: uppercase; letter-spacing: 1px;
}

/* ------------------------------- reviews ------------------------------- */
.reviews { margin-top: 26px; }
.review blockquote { color: var(--text); font-size: 15px; font-style: italic; margin-bottom: 18px; }
.review figcaption { display: flex; align-items: center; gap: 12px; }
.avatar {
  width: 40px; height: 40px; border-radius: 50%; background: var(--accent-grad);
  color: var(--on-gold); font-weight: 800; display: grid; place-items: center;
  position: relative; overflow: hidden; flex: none;
}
.avatar img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.stars { color: var(--accent); font-size: 15px; letter-spacing: 2px; margin-bottom: 12px; }
.review b { display: block; font-size: 14px; }
.review figcaption div span { color: var(--muted); font-size: 12.5px; }

/* -------------------------------- plans -------------------------------- */
/* 4 equal cards in one row; align-items:stretch keeps them the same height,
   the feature <ul> flexes to fill so every CTA pins to the same bottom line. */
.plans-grid {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
  column-gap: 18px; row-gap: 30px; align-items: stretch; padding-top: 24px;
}
.plans-loading, .plans-error { grid-column: 1 / -1; text-align: center; color: var(--muted); padding: 40px 0; }
.plan { display: flex; flex-direction: column; position: relative; padding: 24px 20px; min-width: 0; }
.plan.featured { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent), 0 14px 44px rgba(201, 146, 26, 0.22); }
.plan-flag {
  position: absolute; top: -13px; left: 50%; transform: translateX(-50%);
  background: var(--gold-sheen);
  background-size: 200% auto; color: var(--on-gold); font-size: 11px; font-weight: 800;
  padding: 6px 15px; border-radius: 999px; text-transform: uppercase; letter-spacing: 1px;
  white-space: nowrap; z-index: 2;
  box-shadow: 0 6px 18px rgba(232, 163, 24, 0.5), 0 0 0 4px var(--bg-alt);
  animation: gradSheen 5.5s ease-in-out infinite;
}
.plan-pricing { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.plan-was { color: var(--faint); text-decoration: line-through; font-size: 15px; font-weight: 600; }
.plan-off {
  background: rgba(52, 211, 153, 0.15); color: var(--success);
  font: 800 11px "Inter", sans-serif; padding: 2px 8px; border-radius: 999px; letter-spacing: 0.5px;
}
.plan-claim {
  display: flex; align-items: center; justify-content: center; gap: 6px;
  margin-bottom: 12px; padding: 9px 12px;
  border: 1px dashed rgba(227, 179, 65, 0.55); border-radius: 10px;
  background: rgba(227, 179, 65, 0.06);
  color: var(--accent); font-size: 12.5px; font-weight: 700; text-align: center; transition: 0.2s;
}
.plan-claim:hover { border-style: solid; background: rgba(227, 179, 65, 0.12); }
/* --------------------------- plan tier meter ---------------------------
   Four segments that must read as ONE meter, not four bars that happen to
   animate. A single energy head travels the *enabled run* in meter
   coordinates and is masked to the bar rhythm, so it crosses the gaps as one
   continuous object; the bright tip of that same gradient is the spark, which
   is why it can never drift loose from the wave.

   Everything scales off --on (how many segments are lit), so tiers differ by
   intensity alone — one gold palette, no per-plan animation selectors. */
.plan-tier {
  --tier-seg: 14px; --tier-gap: 4px; --tier-pitch: 18px; --tier-head: 40px;
  --tier-meter: calc(4 * var(--tier-seg) + 3 * var(--tier-gap));   /* 68px */
  --tier-bleed: 2px;                             /* ramp overscan, see below */
  --on: 4;
  --tier-run: calc(var(--on) * var(--tier-pitch) - var(--tier-gap));
  --tier-energy: calc(var(--on) / 4);            /* 0.25 … 1 */
  --tier-cycle: 4.6s;                            /* 65% travel ≈ 3.0s, then rest */
  --end-lo: 0.16; --end-hi: 0.32;                /* endpoint breathing amplitude */
  position: relative; display: flex; gap: var(--tier-gap); margin-bottom: 12px;
  width: max-content;
}
/* Tier count is read off the segments themselves rather than restated in an
   attribute, so the English page, the Arabic generator and renderPlans() can
   never disagree about it — the markup they already share IS the source.
   `.off` is always trailing, so these deliberately overlap and the last match
   wins: a Tier 1 meter matches all three and resolves to 1. Equal specificity
   throughout ((0,3,1) — :has() takes its argument's), so order decides. */
.plan-tier:has(> i:nth-child(4).off) { --on: 3; }
.plan-tier:has(> i:nth-child(3).off) { --on: 2; }
.plan-tier:has(> i:nth-child(2).off) { --on: 1; }
/* Bar rhythm as a mask, so the head paints on segments and skips the gaps. */
.plan-tier::before, .plan-tier::after {
  -webkit-mask-image: repeating-linear-gradient(to right, #000 0 var(--tier-seg), transparent var(--tier-seg) var(--tier-pitch));
          mask-image: repeating-linear-gradient(to right, #000 0 var(--tier-seg), transparent var(--tier-seg) var(--tier-pitch));
}

/* Lit segments are windows onto ONE meter-wide gradient, not four copies of a
   14px one: each samples the slice sitting at its own offset, so the gold runs
   continuously across the row before anything moves. --tier-x is the segment's
   distance from the meter's left edge, which is what background-position
   measures — and RTL reverses the flex row, so that distance has to be
   recomputed there or the slices land in sawtooth order. */
.plan-tier i {
  --tier-x: calc(var(--i) * var(--tier-pitch));
  position: relative;
  width: var(--tier-seg); height: 4px; border-radius: 3px;
  background-image: var(--tier-base-grad);
  background-repeat: no-repeat;
  /* Overscanned by --tier-bleed on each side. Sized to exactly --tier-meter the
     ramp ended on the last segment's right edge, and sub-pixel rounding left
     that rounded corner unpainted — the segment looked squared off. Widening
     the ramp and shifting the sample by the same amount keeps every slice
     consecutive, so continuity is untouched. */
  background-size: calc(var(--tier-meter) + 2 * var(--tier-bleed)) 100%;
  background-position: calc(-1 * var(--tier-x) - var(--tier-bleed)) center;
  transition: background 0.3s ease, filter 0.3s ease;
}
[dir="rtl"] .plan-tier i { --tier-x: calc(var(--tier-meter) - var(--tier-seg) - var(--i) * var(--tier-pitch)); }
/* Shorthand on purpose: it resets image/size/position so an unlit socket
   cannot sample the active gradient. */
.plan-tier i.off { background: var(--surface-2); }
.plan-tier i:nth-child(1) { --i: 0; }
.plan-tier i:nth-child(2) { --i: 1; }
.plan-tier i:nth-child(3) { --i: 2; }
.plan-tier i:nth-child(4) { --i: 3; }

/* ---- charge: segments light in reading order as the card reveals ---- */
.plan.visible .plan-tier i:not(.off) {
  transform-origin: var(--tier-origin, left) center;
  /* `backwards`, not `both`: the segment must sit collapsed through its stagger
     delay, but a forwards fill would pin filter/transform at the final keyframe
     forever and silently swallow the hover brightness. The 100% keyframe is
     identical to the resting style, so releasing the fill is invisible. */
  animation: tierCharge 0.52s cubic-bezier(0.22, 1, 0.36, 1) backwards;
  /* The card is still fading in for its first ~240ms; segment 1 used to peak
     while the whole card sat under 93% opacity, so the start of the sequence
     was spent behind the entrance. The offset lets the card establish itself
     first — the 100ms stagger is unchanged. */
  animation-delay: calc(0.18s + var(--i) * 0.1s);
}
[dir="rtl"] .plan.visible .plan-tier i:not(.off) { --tier-origin: right; }
/* Brightness alone, no saturation boost. Pushing a warm gold past ~1.5 clips
   red first and then saturating what is left drives the hue to chartreuse — it
   photographed as pure yellow, nowhere near the palette. The halo carries the
   sense of energy instead, so the segment itself only has to go warm-white. */
@keyframes tierCharge {
  0%   { transform: scaleX(0);    filter: brightness(1); box-shadow: 0 0 0 rgba(247, 221, 138, 0); }
  60%  { transform: scaleX(1.04); filter: brightness(1.35); box-shadow: 0 0 7px rgba(247, 221, 138, 0.5); }
  100% { transform: scaleX(1);    filter: brightness(1); box-shadow: 0 0 0 rgba(247, 221, 138, 0); }
}

/* ---- endpoint: only the highest enabled segment marks the ceiling ---- */
.plan-tier i:not(.off):last-child::after,
.plan-tier i:not(.off):has(+ i.off)::after {
  content: ""; position: absolute; inset: -2px -3px; border-radius: 5px;
  background: radial-gradient(ellipse at center, rgba(247, 221, 138, 0.55), transparent 70%);
  opacity: var(--end-lo); pointer-events: none;
  animation: tierEndpoint 5.9s ease-in-out infinite;
}
@keyframes tierEndpoint { 0%, 100% { opacity: var(--end-lo); } 50% { opacity: var(--end-hi); } }

/* ---- continuous flow: one head, one clock, masked to the lit run ---- */
.plan-tier::after {
  content: ""; position: absolute; inset-block: 0; inset-inline-start: 0;
  width: var(--tier-run); border-radius: 3px; pointer-events: none;
  /* The tip used to jump from #fff8e0 at 95% straight to transparent at 100% —
     about 2px — which composited as a rectangular bright block rather than a
     spark. The peak now sits at 90% and decays over the remaining 9%, so the
     head reads soft body → concentrated white-gold tip → fade. Body centre
     ~48% and tip ~90% of a 40px head keeps the lead at roughly 16px. */
  background-image: linear-gradient(var(--tier-head-dir, 90deg),
    transparent 0,
    rgba(247, 221, 138, 0.04) 20%,
    rgba(247, 221, 138, 0.15) 48%,               /* pulse body */
    rgba(247, 221, 138, 0.30) 70%,
    rgba(255, 240, 194, 0.62) 84%,
    rgba(255, 248, 224, 0.90) 90%,               /* spark: the tip of this wave */
    rgba(255, 244, 210, 0.38) 95%,
    transparent 99%);
  background-repeat: no-repeat;
  background-size: var(--tier-head) 100%;
  opacity: calc(0.42 + 0.38 * var(--tier-energy));
  /* 1.18s ≈ the last segment finishing its charge now that it starts 0.18s later. */
  animation: tierFlow var(--tier-cycle) linear 1.18s infinite;
}
/* Mirrored so the reading origin samples the same end of the ramp it does in
   LTR — the offset fix above restores continuity, this restores equivalence. */
[dir="rtl"] .plan-tier { --tier-base-grad: linear-gradient(to left, var(--gold-lo), var(--gold-hi)); }
[dir="rtl"] .plan-tier::after { --tier-head-dir: 270deg; animation-name: tierFlowRtl; }
@keyframes tierFlow {
  0%       { background-position-x: calc(var(--tier-head) * -1); }
  65%, 100% { background-position-x: calc(100% + var(--tier-head)); }
}
@keyframes tierFlowRtl {
  0%       { background-position-x: calc(100% + var(--tier-head)); }
  65%, 100% { background-position-x: calc(var(--tier-head) * -1); }
}

/* ---- Apex only: an occasional white-gold sweep, off-beat from the flow ---- */
.plan-tier:not(:has(i.off))::before {
  content: ""; position: absolute; inset-block: 0; inset-inline-start: 0;
  width: var(--tier-run); border-radius: 3px; pointer-events: none;
  background-image: linear-gradient(var(--tier-head-dir, 90deg),
    transparent 0, rgba(255, 248, 224, 0.55) 50%, rgba(247, 221, 138, 0.2) 66%, transparent 100%);
  background-repeat: no-repeat; background-size: 30px 100%;
  animation: tierSweep 6.4s ease-in-out 2.2s infinite;
}
[dir="rtl"] .plan-tier:not(:has(i.off))::before { animation-name: tierSweepRtl; }
@keyframes tierSweep {
  0%, 74%   { background-position-x: -30px; opacity: 0; }
  78%       { opacity: 0.85; }
  94%, 100% { background-position-x: calc(100% + 30px); opacity: 0; }
}
@keyframes tierSweepRtl {
  0%, 74%   { background-position-x: calc(100% + 30px); opacity: 0; }
  78%       { opacity: 0.85; }
  94%, 100% { background-position-x: -30px; opacity: 0; }
}

/* ---- overclock: one interaction, not five effects ---- */
.plan:hover .plan-tier, .plan:focus-within .plan-tier {
  --tier-cycle: 3.2s;                            /* 1.4× — responsive, not double speed */
  --end-lo: 0.24; --end-hi: 0.44;
}
.plan:hover .plan-tier i:not(.off), .plan:focus-within .plan-tier i:not(.off) { filter: brightness(1.1); }
.plan:hover .plan-tier i.off, .plan:focus-within .plan-tier i.off { background: rgba(247, 221, 138, 0.12); }
.plan h3 { font-size: 17px; }
.plan-tagline { color: var(--muted); font-size: 12.5px; line-height: 1.45; margin: 5px 0 12px; min-height: 34px; }
.plan-price { font-size: 32px; font-weight: 700; font-family: var(--font-head); line-height: 1.1; }
.plan-price small { font-size: 13px; color: var(--muted); font-weight: 500; font-family: "Inter", sans-serif; }
.plan-duration { color: var(--accent); font-size: 12.5px; font-weight: 600; margin: 6px 0 14px; }
.plan ul { list-style: none; display: grid; gap: 7px; margin: 0 0 18px; flex: 1 1 auto; align-content: start; }
.plan li { color: var(--muted); font-size: 12.5px; line-height: 1.45; padding-inline-start: 24px; position: relative; }
.plan li::before {
  content: "✓"; position: absolute; inset-inline-start: 0; top: 1px;
  width: 16px; height: 16px; border-radius: 5px; display: grid; place-items: center;
  font-size: 10px; font-weight: 800;
  background: rgba(52, 211, 153, 0.16); color: var(--success);
}
.plan .btn { margin-top: auto; width: 100%; white-space: normal; text-align: center; line-height: 1.3; }

/* ------------------------------ value flip ------------------------------ */
.value-card {
  text-align: center; display: grid; gap: 22px;
  background: linear-gradient(180deg, rgba(247, 221, 138, 0.06), var(--surface) 55%);
  border-color: rgba(227, 179, 65, 0.4);
}
.value-lead { color: var(--muted); font-size: 16px; line-height: 1.7; margin: 0 auto; max-width: 620px; }
.value-compare { display: flex; align-items: stretch; justify-content: center; gap: 16px; flex-wrap: wrap; }
.value-box {
  flex: 1 1 220px; max-width: 280px; display: grid; gap: 6px; align-content: center;
  background: var(--surface-2); border: 1px solid var(--border); border-radius: 14px; padding: 22px 18px;
}
.value-box-win { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent), 0 14px 40px rgba(201, 146, 26, 0.18); }
.value-box-label { font-size: 12.5px; font-weight: 600; color: var(--muted); text-transform: uppercase; letter-spacing: 0.5px; }
.value-box-num { font-family: var(--font-head); font-size: 30px; font-weight: 700; }
.value-bad { color: #f0816b; }
.value-good { color: var(--accent); }
.value-box-sub { font-size: 12px; color: var(--faint); }
.value-vs { align-self: center; font-family: var(--font-head); font-weight: 700; color: var(--muted); font-size: 14px; }
.value-close { color: var(--text); font-size: 16px; font-weight: 600; line-height: 1.6; margin: 0 auto; max-width: 600px; }
.value-actions { display: flex; justify-content: center; }
.value-fine { color: var(--faint); font-size: 12px; margin: 0 auto; max-width: 560px; }
@media (max-width: 560px) {
  .value-vs { transform: rotate(90deg); }
  .value-box { max-width: none; }
}

/* --------------------------------- faq --------------------------------- */
.faq-list { display: grid; gap: 12px; }
.faq-item { background: var(--surface); border: 1px solid var(--border); border-radius: 14px; overflow: hidden; transition: border-color 0.2s; interpolate-size: allow-keywords; }
.faq-item[open] { border-color: #4a3f24; }
/* Smooth expand/collapse of the answer. Chromium animates ::details-content
   (block-size auto is animatable thanks to interpolate-size above); browsers
   without ::details-content support just snap open — graceful either way. */
.faq-item::details-content {
  block-size: 0; overflow: hidden;
  transition: block-size 0.4s cubic-bezier(0.22, 1, 0.36, 1), content-visibility 0.4s allow-discrete;
}
.faq-item[open]::details-content { block-size: auto; }
.faq-item summary {
  cursor: pointer; list-style: none; padding: 18px 22px; font-weight: 600; font-size: 15.5px;
  display: flex; justify-content: space-between; align-items: center; gap: 16px;
  transition: color 0.2s, background 0.2s;
}
.faq-item summary:hover { color: var(--accent); background: rgba(227, 179, 65, 0.04); }
.faq-item summary:active { background: rgba(227, 179, 65, 0.1); }
.faq-item summary::-webkit-details-marker { display: none; }
.faq-item summary::after {
  content: "+"; color: var(--accent); font-size: 22px; font-weight: 400;
  transition: transform 0.35s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.faq-item[open] summary::after { transform: rotate(45deg); }
.faq-item p { padding: 0 22px 20px; color: var(--muted); font-size: 14.5px; }
/* answers slide-fade in when a question is opened (paired with the JS height
   animation in main.js for a smooth expand instead of the native snap) */
.faq-item[open] p { animation: faqReveal 0.4s cubic-bezier(0.22, 1, 0.36, 1) both; }
.faq-item[open] p:nth-of-type(2) { animation-delay: 0.08s; }
.faq-item[open] p:nth-of-type(3) { animation-delay: 0.16s; }
@keyframes faqReveal {
  from { opacity: 0; transform: translateY(-8px); filter: blur(3px); }
  to { opacity: 1; transform: translateY(0); filter: blur(0); }
}

/* -------------------------------- forms -------------------------------- */
.form { display: grid; gap: 16px; }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
label { display: grid; gap: 7px; font-size: 13.5px; font-weight: 600; color: var(--muted); }
input, select, textarea {
  background: var(--surface-2); border: 1px solid var(--border); border-radius: 10px;
  padding: 12px 14px; color: var(--text); font: 400 14.5px "Inter", sans-serif; width: 100%;
  transition: border-color 0.2s, box-shadow 0.2s;
}
input:hover, select:hover:not(:disabled), textarea:hover { border-color: rgba(227, 179, 65, 0.45); }
input:focus, select:focus, textarea:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(227, 179, 65, 0.14); }
input::placeholder, textarea::placeholder { color: #5c5440; }

/* Custom animated <select> dropdowns (Chromium 135+). The picker slides/fades
   open, options get themed hover states and the chevron flips. Browsers
   without base-select support skip this block and keep the native picker. */
@supports (appearance: base-select) {
  select { appearance: base-select; }
  select:open { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(227, 179, 65, 0.14); }
  select::picker-icon { color: var(--accent); transition: transform 0.28s cubic-bezier(0.22, 1, 0.36, 1); }
  select:open::picker-icon { transform: rotate(180deg); }
  select::picker(select) {
    appearance: base-select;
    background: var(--surface-2); border: 1px solid rgba(227, 179, 65, 0.35);
    border-radius: 12px; padding: 6px; margin-block-start: 6px;
    box-shadow: 0 18px 44px rgba(0, 0, 0, 0.6);
    opacity: 0; transform: translateY(-8px) scale(0.985); transform-origin: top;
    transition: opacity 0.2s ease, transform 0.28s cubic-bezier(0.22, 1, 0.36, 1),
                overlay 0.28s allow-discrete, display 0.28s allow-discrete;
  }
  select:open::picker(select) { opacity: 1; transform: none; }
  @starting-style {
    select:open::picker(select) { opacity: 0; transform: translateY(-8px) scale(0.985); }
  }
  select option {
    padding: 9px 12px; border-radius: 8px; font-size: 14px;
    background: transparent; color: var(--text);
    transition: background 0.15s ease, color 0.15s ease;
  }
  select option:hover, select option:focus { background: rgba(227, 179, 65, 0.12); color: var(--accent); }
  select option:checked { color: var(--accent); font-weight: 600; }
  select option::checkmark { color: var(--accent); }
}
.form-foot { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.form-status { font-size: 13.5px; font-weight: 600; }
.form-status.ok { color: var(--success); }
.form-status.err { color: var(--danger); }

/* recommended add-on checkbox */
.check {
  display: flex; gap: 12px; align-items: flex-start;
  background: rgba(227, 179, 65, 0.06); border: 1px solid rgba(227, 179, 65, 0.28);
  border-radius: 12px; padding: 14px 16px; cursor: pointer;
  transition: border-color 0.2s, background 0.2s;
}
.check:hover { border-color: rgba(227, 179, 65, 0.55); background: rgba(227, 179, 65, 0.09); }
.check input { width: 16px; height: 16px; margin-top: 3px; accent-color: var(--accent); flex: none; }
.check span { font-weight: 400; color: var(--muted); font-size: 13px; line-height: 1.5; }
.check b { color: var(--text); }
.check em { color: var(--accent); font-style: normal; font-weight: 600; }

/* -------------------------------- tools --------------------------------- */
.tools-tabs { display: flex; justify-content: center; gap: 10px; margin-bottom: 26px; flex-wrap: wrap; }
.tool-tab {
  padding: 12px 22px; border-radius: 12px; border: 1px solid var(--border);
  background: var(--surface); color: var(--muted); font: 600 14.5px "Inter", sans-serif;
  cursor: pointer; transition: 0.2s;
}
.tool-tab:hover { border-color: var(--accent); color: var(--accent); transform: translateY(-1px); }
.tool-tab:active { transform: scale(0.95); }
.tool-tab.active { background: var(--accent-grad); color: var(--on-gold); border-color: transparent; animation: pressPop 0.3s ease; }
.tool-panel { max-width: 880px; margin: 0 auto; display: grid; gap: 20px; }
.tool-panel form { display: grid; gap: 16px; }
.tool-intro { color: var(--muted); font-size: 14.5px; }
.tool-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.cascade { display: grid; gap: 7px; }
.cascade select:disabled { opacity: 0.5; cursor: not-allowed; }
.chips-block { display: grid; gap: 9px; }
.chips-label { font-size: 13.5px; font-weight: 600; color: var(--muted); }
.chips { display: flex; gap: 10px; flex-wrap: wrap; }
.chip { display: inline-flex; position: relative; cursor: pointer; }
.chip input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; }
.chip span {
  padding: 9px 16px; border-radius: 999px; border: 1px solid var(--border);
  background: var(--surface-2); color: var(--muted); font-size: 13.5px; font-weight: 600;
  transition: 0.2s; pointer-events: none;
}
.chip:hover span { border-color: var(--accent); transform: translateY(-1px); }
.chip:active span { transform: scale(0.94); }
.chip:has(input:checked) span { background: var(--accent-grad); color: var(--on-gold); border-color: transparent; animation: pressPop 0.3s ease; }

/* ------------------- mouse polling rate test (embedded) ------------------ */
.mt-big { text-align: center; display: grid; gap: 4px; }
.mt-big-val { font-family: var(--font-head); font-size: 62px; font-weight: 700; color: var(--accent); line-height: 1; }
.mt-big-val small { font-size: 22px; color: var(--muted); font-weight: 600; }
.mt-big-sub { color: var(--faint); font-size: 13px; }
.mt-stage {
  min-height: 240px; border: 1px dashed rgba(227, 179, 65, 0.35); border-radius: 14px;
  background: var(--surface-2); display: flex; align-items: center; justify-content: center;
  text-align: center; padding: 20px; cursor: crosshair; touch-action: none; user-select: none;
  transition: border-color 0.2s, background 0.2s, box-shadow 0.2s;
}
.mt-stage.armed { border-color: var(--accent); background: rgba(227, 179, 65, 0.05); box-shadow: 0 0 24px rgba(227, 179, 65, 0.08) inset; }
.mt-hint { color: var(--muted); font-size: 14px; max-width: 440px; }
.mt-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.mt-stat {
  background: var(--surface-2); border: 1px solid var(--border); border-radius: 12px;
  padding: 12px 14px; display: grid; gap: 2px; text-align: center;
}
.mt-stat span { font-size: 11.5px; color: var(--muted); font-weight: 600; text-transform: uppercase; letter-spacing: 0.8px; }
.mt-stat b { font-family: var(--font-head); font-size: 22px; color: var(--text); }
.mt-stat.hot b { color: var(--accent); }
.mt-controls { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; }
.mt-controls .btn:disabled { opacity: 0.45; cursor: not-allowed; transform: none; }
.mt-graph-card { border: 1px solid var(--border); border-radius: 14px; background: var(--surface-2); padding: 14px 16px; display: grid; gap: 10px; }
.mt-graph-head { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; }
.mt-graph-head h4 { font-size: 14px; }
.mt-graph-head span { color: var(--faint); font-size: 12px; }
.mt-graph { width: 100%; height: 170px; display: block; }
.mt-note { color: var(--muted); font-size: 13.5px; line-height: 1.7; border-top: 1px solid var(--border); padding-top: 16px; }

/* tool results */
.tool-result { border-top: 1px solid var(--border); padding-top: 22px; display: grid; gap: 14px; }
.result-head { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.result-big { font-family: var(--font-head); font-size: 44px; font-weight: 700; color: var(--accent); line-height: 1; }
.result-title { font-size: 18px; font-weight: 700; }
.sev { padding: 4px 12px; border-radius: 999px; font-size: 11.5px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; }
.sev.ok, .sev.normal { background: rgba(52, 211, 153, 0.15); color: var(--success); }
.sev.moderate, .sev.high { background: rgba(227, 179, 65, 0.15); color: var(--accent); }
.sev.severe { background: rgba(248, 113, 113, 0.15); color: var(--danger); }
.meter { height: 10px; border-radius: 5px; background: var(--surface-2); overflow: hidden; }
.meter i { display: block; height: 100%; background: var(--accent-grad); border-radius: 5px; transition: width 0.6s ease; }
.meter.warn i { background: linear-gradient(135deg, #ffd75e, #ef4444); }
.result-sub { color: var(--faint); font-size: 12.5px; }
.result-advice { color: var(--muted); font-size: 14.5px; }
.ram-note {
  color: var(--accent); background: rgba(227, 179, 65, 0.07);
  border: 1px solid rgba(227, 179, 65, 0.3); border-radius: 10px; padding: 10px 14px; font-size: 13.5px;
}
.rec-card {
  display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-wrap: wrap;
  border: 1px solid rgba(227, 179, 65, 0.45); background: rgba(247, 221, 138, 0.05);
  border-radius: 14px; padding: 18px 20px;
}
.rec-name { font-family: var(--font-head); font-size: 21px; font-weight: 700; }
.rec-price { color: var(--accent); font-weight: 700; font-size: 16px; }
.rec-fresh { color: var(--success); font-size: 13px; font-weight: 600; margin-top: 4px; }
/* per-game performance estimates */
.est-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.est-box {
  background: var(--surface-2); border: 1px solid var(--border); border-radius: 12px;
  padding: 12px 14px; display: grid; gap: 2px; text-align: center;
}
.est-box span { font-size: 11.5px; color: var(--muted); font-weight: 600; }
.est-box b { font-family: var(--font-head); font-size: 20px; color: var(--accent); }
.perf-compare { display: grid; grid-template-columns: 1fr auto 1fr; gap: 14px; align-items: center; }
.perf-col { display: grid; gap: 8px; }
.perf-col h5 { font-size: 12.5px; color: var(--muted); text-transform: uppercase; letter-spacing: 1px; text-align: center; }
.perf-col.after h5 { color: var(--success); }
.perf-col.after .est-box { border-color: rgba(52, 211, 153, 0.35); }
.perf-col.after .est-box b { color: var(--success); }
.perf-arrow { font-size: 22px; color: var(--accent); }
[dir="rtl"] .perf-arrow { transform: scaleX(-1); }

/* booking tracking */
.track-card { margin-top: 18px; }
.track-card h3 { font-size: 19px; margin-bottom: 4px; }
.track-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; font-size: 15px; }
.badge-track { padding: 4px 12px; border-radius: 999px; font-size: 11.5px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.5px; }
.badge-track.new { background: rgba(227, 179, 65, 0.15); color: var(--accent); }
.badge-track.confirmed { background: rgba(96, 165, 250, 0.15); color: #60a5fa; }
.badge-track.completed { background: rgba(52, 211, 153, 0.15); color: var(--success); }
.badge-track.cancelled { background: rgba(248, 113, 113, 0.15); color: var(--danger); }
#trackResult { border-top: 1px solid var(--border); padding-top: 16px; display: grid; gap: 10px; }
.track-timeline { list-style: none; display: grid; gap: 8px; }
.track-timeline li {
  display: flex; justify-content: space-between; gap: 12px; flex-wrap: wrap;
  font-size: 13px; padding-inline-start: 18px; position: relative;
}
.track-timeline li::before { content: ""; position: absolute; inset-inline-start: 0; top: 6px; width: 8px; height: 8px; border-radius: 50%; background: var(--accent-grad); }
.track-timeline li span { color: var(--faint); }

/* booking modal extras */
.tz-line { font-size: 13px; color: var(--muted); }
.tz-line b { color: var(--accent); }
.check-priority { border-color: rgba(248, 113, 113, 0.35); background: rgba(248, 113, 113, 0.05); }
.check-priority em { color: #f87171; }

/* Booking total. Label/amount pairs held apart by space-between, which follows
   the writing direction on its own — so Arabic and Hebrew mirror correctly
   without a single physical margin or a [dir="rtl"] override. Tabular figures
   keep the amounts on one optical column as they change, and nowrap stops a
   price breaking across lines on a narrow phone. */
.book-total {
  display: grid; gap: 7px;
  padding: 12px 14px;
  border: 1px solid var(--border); border-radius: 12px;
  background: var(--surface-2);
}
.bt-row { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; font-size: 13.5px; color: var(--muted); }
.bt-row b { color: var(--text); font-weight: 600; font-variant-numeric: tabular-nums; white-space: nowrap; }
.bt-sum { border-top: 1px solid var(--border); padding-top: 8px; font-size: 15px; color: var(--text); font-weight: 600; }
.bt-sum b { color: var(--accent); font-size: 17px; }

/* footer social icons — springy lift + sheen sweep + brand-color glow on hover */
.socials { display: flex; gap: 10px; flex-wrap: wrap; }
/* .footer prefix outranks the later generic ".footer-cols a { display:block }" rule */
.footer .socials a {
  position: relative; overflow: hidden; will-change: transform;
  width: 42px; height: 42px; border-radius: 12px; display: grid; place-items: center;
  padding: 0; background: var(--surface); border: 1px solid var(--border);
  transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), border-color 0.25s, background 0.25s, box-shadow 0.3s;
}
/* light sheen that sweeps across on hover */
.footer .socials a::before {
  content: ""; position: absolute; inset: 0; pointer-events: none; z-index: 1;
  background: linear-gradient(115deg, transparent 42%, rgba(255, 255, 255, 0.16) 50%, transparent 58%);
  transform: translateX(-130%); transition: transform 0.6s ease;
}
.footer .socials a:hover::before { transform: translateX(130%); }
.socials a svg {
  fill: var(--muted); display: block; position: relative; z-index: 2;
  transition: fill 0.25s, transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.socials .s-discord svg { width: 23px; height: 23px; }
.socials .s-yt svg { width: 21px; height: 21px; }
.socials .s-x svg { width: 17px; height: 17px; }
.socials .s-mail svg { width: 19px; height: 19px; }
.socials .s-ig svg { width: 20px; height: 20px; }
.socials .s-fb svg { width: 20px; height: 20px; }
.socials a:hover { transform: translateY(-5px) scale(1.08); border-color: var(--accent); }
.socials a:hover svg { transform: scale(1.16); }
.socials a:active { transform: translateY(-2px) scale(0.97); transition-duration: 0.1s; }
.socials a:active svg { transform: scale(1.02); }
/* per-brand: border tint + soft glow + icon color */
.socials .s-discord:hover { border-color: #5865f2; background: rgba(88, 101, 242, 0.14); box-shadow: 0 10px 26px rgba(88, 101, 242, 0.4); }
.socials .s-discord:hover svg { fill: #5865f2; }
.socials .s-yt:hover { border-color: #ff3333; background: rgba(255, 51, 51, 0.12); box-shadow: 0 10px 26px rgba(255, 51, 51, 0.38); }
.socials .s-yt:hover svg { fill: #ff3333; }
.socials .s-x:hover { border-color: #f7f3e8; background: rgba(247, 243, 232, 0.1); box-shadow: 0 10px 26px rgba(247, 243, 232, 0.16); }
.socials .s-x:hover svg { fill: #f7f3e8; }
.socials .s-mail:hover { border-color: var(--accent); background: rgba(227, 179, 65, 0.12); box-shadow: 0 10px 26px rgba(227, 179, 65, 0.35); }
.socials .s-mail:hover svg { fill: var(--accent); }
.socials .s-ig:hover { border-color: #e4405f; background: rgba(228, 64, 95, 0.12); box-shadow: 0 10px 26px rgba(228, 64, 95, 0.4); }
.socials .s-ig:hover svg { fill: #e4405f; }
.socials .s-fb:hover { border-color: #1877f2; background: rgba(24, 119, 242, 0.14); box-shadow: 0 10px 26px rgba(24, 119, 242, 0.42); }
.socials .s-fb:hover svg { fill: #1877f2; }
@media (prefers-reduced-motion: reduce) {
  .footer .socials a, .socials a svg { transition: border-color 0.2s, background 0.2s, fill 0.2s; }
  .footer .socials a:hover { transform: none; }
  .socials a:hover svg { transform: none; }
  .footer .socials a::before { display: none; }
}

.reason-list { list-style: none; display: grid; gap: 8px; margin-top: 8px; }
.reason-list li { color: var(--muted); font-size: 13.5px; padding-inline-start: 24px; position: relative; }
.reason-list li::before { content: "→"; position: absolute; inset-inline-start: 0; color: var(--accent); }
[dir="rtl"] .reason-list li::before { content: "←"; }

/* -------------------------------- footer ------------------------------- */
.footer { border-top: 1px solid var(--border); background: var(--bg-alt); padding-top: 56px; }
.footer-inner { display: grid; grid-template-columns: 1.2fr 2fr; gap: 48px; padding-bottom: 44px; }
.footer-brand p { color: var(--muted); font-size: 14px; margin-top: 16px; }
/* Three columns whenever three fit, fewer when they don't. A fixed
   `repeat(3, 1fr)` cannot wrap and cannot shrink past its own min-content, so on
   a narrow container the row grew wider than the page instead — a translation
   with longer words was enough to trigger it. The 90px floor is the widest
   column min-content across the four languages, so a column never has to
   overflow its own track; the spare tracks collapse to 0 at desktop. */
.footer-cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(90px, 1fr)); gap: 24px; }
.footer-cols h4 { font-size: 13px; text-transform: uppercase; letter-spacing: 1.5px; color: var(--text); margin-bottom: 14px; }
.footer-cols a { display: block; color: var(--muted); font-size: 14px; padding: 5px 0; transition: color 0.2s, transform 0.2s; }
.footer-cols a:hover { color: var(--accent); transform: translateX(4px); }
[dir="rtl"] .footer-cols a:hover { transform: translateX(-4px); }
.footer-base {
  display: flex; justify-content: space-between; gap: 16px; flex-wrap: wrap;
  border-top: 1px solid var(--border); padding-top: 20px; padding-bottom: 24px;
  color: var(--faint); font-size: 13px;
}

/* ------------------------------ back to top ----------------------------- */
.to-top {
  position: fixed; bottom: 92px; inset-inline-end: 28px; z-index: 60;
  width: 46px; height: 46px; border-radius: 50%; border: none; cursor: pointer;
  background: var(--cta-grad); color: var(--on-gold); font-size: 18px; font-weight: 800;
  box-shadow: 0 8px 24px rgba(232, 163, 24, 0.4); transition: transform 0.2s;
}
.to-top:hover { transform: translateY(-3px); }

/* -------------------------------- modal -------------------------------- */
.modal-backdrop {
  position: fixed; inset: 0; z-index: 100; display: grid; place-items: center;
  background: rgba(4, 3, 2, 0.82); backdrop-filter: blur(6px); padding: 20px;
}
.modal {
  position: relative; width: 100%; max-width: 560px; max-height: 90vh; overflow-y: auto;
  background: var(--surface); border: 1px solid var(--border); border-radius: 18px;
  padding: 32px; box-shadow: var(--shadow);
}
/* Desktop-sized gutters cost 104px of a 320px screen — more than a third of it,
   on the one dialog that has to hold a fixed-width reCAPTCHA. Trimmed rather
   than removed: 20px inline still clears the close button and keeps the fields
   comfortable to tap.
   The cut-off is 480 rather than a phone-sized number on purpose. With the full
   32px gutters the 304px widget needs a 421px viewport to fit, so 421-480 was
   landing within a scrollbar's width of overflowing — narrow enough to break on
   a platform whose classic scrollbar is wider than the 11px measured here. */
@media (max-width: 480px) {
  .modal-backdrop { padding: 10px; }
  .modal { padding: 26px 20px; }
}
/* The close button is absolutely positioned out of flow, so the title's line box
   runs underneath it. Hebrew — the longest title — cleared the button by 6px at
   320px, and a 10% text enlargement was enough to put glyphs on top of it.
   36px = the button (36) plus its inset (16), less the 20px inline padding this
   modal has below 480px, plus a 4px gap. It reserves rather than pushes: a title
   that already fits keeps its exact position, and one that grows wraps at the
   button's edge instead of crossing it. Logical, so RTL reserves on the left. */
.modal h3 { font-size: 22px; padding-inline-end: 36px; }
.modal-sub { color: var(--muted); font-size: 14px; margin: 6px 0 22px; }
.modal form { display: grid; gap: 16px; }
.modal-close {
  position: absolute; top: 16px; inset-inline-end: 16px; background: var(--surface-2);
  border: 1px solid var(--border); color: var(--muted); border-radius: 10px;
  width: 36px; height: 36px; cursor: pointer; font-size: 14px;
}
.modal-close:hover { color: var(--text); border-color: var(--accent); }
.booking-success { text-align: center; padding: 24px 0 8px; display: grid; gap: 12px; justify-items: center; }
.success-ico { font-size: 44px; }

/* ------------------------------- promo bar ------------------------------ */
.promo {
  display: flex; align-items: center; justify-content: center; gap: 14px; flex-wrap: wrap;
  /* Logical, not physical. The 44px is the gap reserved for .promo-x, which is
     placed with inset-inline-end — so in RTL the button moves to the left while
     a physical `padding-right: 44px` left the reserve on the right, and the X
     sat on top of the Arabic/Hebrew text. Identical rendering in LTR. */
  padding-block: 9px; padding-inline: 16px 44px; position: relative;
  background: var(--accent-grad); color: var(--on-gold);
  font-size: 13.5px; font-weight: 700;
}
.promo-cta {
  display: inline-block; background: var(--on-gold); color: var(--accent); border: none; cursor: pointer;
  padding: 5px 14px; border-radius: 999px; font: 700 12.5px "Inter", sans-serif; transition: 0.2s;
}
.promo-cta:hover { transform: translateY(-1px); }
/* The glyph stays 14px; the *target* is 24px square (WCAG 2.5.8) — it measured
   11x19 before, which is a fiddly thing to hit on a phone. The inline-end inset
   drops from 10px to 4px so the larger box keeps the X within half a pixel of
   where it has always sat: previously centred 15.5px from the edge (10 + 11/2),
   now 16px (4 + 24/2). */
.promo-x {
  position: absolute; inset-inline-end: 4px; top: 50%; transform: translateY(-50%);
  display: inline-flex; align-items: center; justify-content: center;
  width: 24px; height: 24px; padding: 0; line-height: 1;
  background: none; border: none; color: var(--on-gold); font-size: 14px; cursor: pointer; opacity: 0.7;
}
.promo-x:hover { opacity: 1; }

/* ------------------------------ contact alt ----------------------------- */
.contact-alt { text-align: center; margin-top: 18px; color: var(--muted); font-size: 14px; }
.contact-alt a { color: var(--accent); font-weight: 600; }
.contact-alt a:hover { text-decoration: underline; }
.contact-sep { margin: 0 8px; color: var(--faint); }

/* ------------------------------ cursor glow ----------------------------- */
.cursor-glow {
  position: fixed; top: 0; left: 0; width: 400px; height: 400px;
  pointer-events: none; z-index: 1;
  background: radial-gradient(circle, rgba(227, 179, 65, 0.07), transparent 65%);
  will-change: transform;
}

/* --------------------------- payment return banner ---------------------- */
.pay-banner {
  position: fixed; top: 16px; left: 50%; transform: translateX(-50%);
  z-index: 120; max-width: min(560px, calc(100vw - 32px));
  display: flex; align-items: center; gap: 14px;
  padding: 14px 18px; border-radius: 14px; box-shadow: var(--shadow);
  font-size: 14.5px; font-weight: 600;
}
.pay-banner.ok { background: rgba(52, 211, 153, 0.16); border: 1px solid var(--success); color: #d8ffe9; }
.pay-banner.err { background: rgba(248, 113, 113, 0.16); border: 1px solid var(--danger); color: #ffe1e1; }
.pay-x { background: none; border: none; color: inherit; cursor: pointer; font-size: 15px; opacity: 0.7; }
.pay-x:hover { opacity: 1; }

/* -------------------------------- chatbot ------------------------------- */
.bot { position: fixed; bottom: 24px; inset-inline-end: 24px; z-index: 90; }
.bot-toggle {
  position: relative;
  width: 54px; height: 54px; border-radius: 50%; border: none; cursor: pointer;
  background: var(--accent-grad); color: var(--on-gold);
  display: grid; place-items: center;
  box-shadow: 0 8px 30px rgba(232, 163, 24, 0.55); transition: transform 0.2s;
}
.bot-toggle:hover { transform: translateY(-3px); }
.bot-toggle svg { transition: transform 0.25s ease; }
.bot-toggle.open svg { transform: rotate(-14deg) scale(0.9); }
.bot-ping {
  position: absolute; top: 1px; inset-inline-end: 1px;
  width: 12px; height: 12px; border-radius: 50%;
  background: #ffd75e; border: 2px solid var(--bg);
}
.bot-ping::after {
  content: ""; position: absolute; inset: -2px; border-radius: 50%;
  background: rgba(255, 215, 94, 0.6); animation: botPing 1.6s ease-out infinite;
}
@keyframes botPing { to { transform: scale(2.6); opacity: 0; } }
.bot-panel {
  position: absolute; bottom: 66px; inset-inline-end: 0;
  width: min(360px, calc(100vw - 40px)); height: 460px; max-height: calc(100vh - 140px);
  display: flex; flex-direction: column;
  background: var(--surface); border: 1px solid var(--border); border-radius: 18px;
  box-shadow: var(--shadow); overflow: hidden;
  transform-origin: bottom right;
  animation: botPanelIn 0.3s cubic-bezier(0.34, 1.45, 0.64, 1) both;
}
[dir="rtl"] .bot-panel { transform-origin: bottom left; }
.bot-panel.closing { animation: botPanelOut 0.2s ease-in both; }
@keyframes botPanelIn { from { opacity: 0; transform: translateY(16px) scale(0.9); } }
@keyframes botPanelOut { to { opacity: 0; transform: translateY(16px) scale(0.9); } }
.bot-head {
  display: flex; align-items: center; gap: 10px; padding: 14px 16px;
  background: var(--surface-2); border-bottom: 1px solid var(--border);
  font-family: var(--font-head);
}
.bot-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--success); box-shadow: 0 0 8px var(--success); }
.bot-close {
  margin-inline-start: auto; background: none; border: none; color: var(--muted);
  font-size: 14px; cursor: pointer;
}
.bot-close:hover { color: var(--text); }
.bot-msgs { flex: 1; overflow-y: auto; padding: 16px; display: grid; gap: 10px; align-content: start; }
.bot-msg {
  max-width: 85%; padding: 10px 14px; border-radius: 14px; font-size: 13.5px; line-height: 1.55;
  animation: botMsgIn 0.28s cubic-bezier(0.34, 1.3, 0.64, 1) both;
}
@keyframes botMsgIn { from { opacity: 0; transform: translateY(10px) scale(0.96); } }
.bot-typing { display: flex; gap: 5px; align-items: center; padding: 13px 16px; }
.bot-typing i {
  width: 7px; height: 7px; border-radius: 50%; background: var(--accent);
  animation: typingDot 1s ease-in-out infinite;
}
.bot-typing i:nth-child(2) { animation-delay: 0.18s; }
.bot-typing i:nth-child(3) { animation-delay: 0.36s; }
@keyframes typingDot { 30% { transform: translateY(-5px); opacity: 0.45; } }
.bot-msg.ai { background: var(--surface-2); border: 1px solid var(--border); color: var(--text); justify-self: start; border-start-start-radius: 4px; }
.bot-msg.user { background: var(--accent-grad); color: var(--on-gold); justify-self: end; border-start-end-radius: 4px; font-weight: 600; }
.bot-msg a { color: var(--accent); font-weight: 600; text-decoration: underline; }
.bot-msg .bot-book { margin-top: 4px; padding: 8px 16px; font-size: 13px; }
.bot-chips { display: flex; gap: 8px; flex-wrap: wrap; padding: 0 16px 10px; }
.bot-chip {
  background: var(--surface-2); border: 1px solid var(--border); color: var(--muted);
  border-radius: 999px; padding: 6px 12px; font: 600 12px "Inter", sans-serif; cursor: pointer; transition: 0.2s;
  text-align: start;
  animation: botMsgIn 0.3s ease both;
}
.bot-chip:nth-child(2) { animation-delay: 0.1s; }
.bot-chip:nth-child(3) { animation-delay: 0.2s; }
.bot-chip:hover { border-color: var(--accent); color: var(--accent); }
.bot-input { display: flex; gap: 8px; padding: 12px; border-top: 1px solid var(--border); }
.bot-input input { flex: 1; padding: 10px 12px; font-size: 13.5px; }
.bot-input .btn { padding: 10px 16px; font-size: 13.5px; }

/* --------------------------- render performance -------------------------
   Animations use transform/opacity only (GPU-composited); below-the-fold
   sections skip rendering until needed via content-visibility. */
.reveal, .float-chip, .ticker-track, .fps-fill { will-change: transform, opacity; }
#optimize, #repairs, #results, #plans, #faq, #contact { content-visibility: auto; contain-intrinsic-size: auto 800px; }

/* -------------------------------- reveal -------------------------------
   The slide-in offset lives in --reveal-y instead of being written straight
   into `transform`, and the settled state only zeroes it. Hover lifts then
   *add* to that offset with calc() instead of racing this rule in the cascade:
   `.reveal.visible { transform: none }` used to outrank `.card:hover` — equal
   specificity, later in the file — which killed the lift on every card that
   reveals, i.e. all of them. Registered non-inheriting so a `.svc-group.reveal`
   wrapper never shifts the cards nested inside it, and defaulted to 0px so
   elements that never reveal can read the var with no fallback. */
@property --reveal-y {
  syntax: "<length>";
  inherits: false;
  initial-value: 0px;
}
/* Progressive enhancement: the hidden start state is gated behind .js-reveal,
   which main.js sets on <html> at the moment it wires the observer up. Without
   JavaScript — disabled, blocked, failed to load, or throwing before that line
   — the class never lands and every .reveal element simply renders as normal
   content. Pricing can no longer be hidden by a script that never ran.

   No first-paint flash: main.js adds the class and settles everything already
   in the viewport inside one synchronous block, so the browser has no chance to
   paint the intermediate state. --reveal-y stays at its registered 0px default
   in the un-enhanced path, which keeps the hover-lift maths identical. */
.reveal { transform: translateY(var(--reveal-y)); transition: opacity 0.6s ease, transform 0.6s ease; }
.js-reveal .reveal { --reveal-y: 18px; opacity: 0; }
.js-reveal .reveal.visible { --reveal-y: 0px; opacity: 1; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  /* Must out-rank `.js-reveal .reveal` (0,2,0), not just `.reveal` — a media
     query adds no specificity, so the plain selector would lose and leave
     off-screen content hidden. */
  .reveal, .js-reveal .reveal { --reveal-y: 0px; transition: none; opacity: 1; }
  /* Colour and shadow feedback stay; the movement goes — same trade the
     footer socials make above. */
  .card:hover, .step:hover { transform: none; }
  .fps-fill { animation: none; }
  .section-bg img { animation: none; }
  .grad, .hero-actions .btn-primary, .float-chip, .ticker-track { animation: none; }
  .brand-sub, .kicker-special, .plan-flag { animation: none; }
  /* Tier meter keeps its shape and its active/inactive reading, loses all
     movement: no charge, no travelling head, no spark, no sweep. The endpoint
     stays lit at a fixed value so the power ceiling is still identifiable. */
  .plan-tier i { animation: none; transform: none; filter: none; }
  .plan-tier::before, .plan-tier::after { display: none; }
  .plan-tier i:not(.off):last-child::after,
  .plan-tier i:not(.off):has(+ i.off)::after { animation: none; opacity: 0.26; }
  select::picker(select), select::picker-icon, select option { transition: none; }
  .lang-menu, .lang-caret { transition: none; }
  .nav-links, .nav-links a { transition: none; }
  .art-knob, .art-needle { animation: none; }
  .art-bar, .art-bar-hot, rect.art-gold, .art-chip-text, .art-halo, .art-trend-dot { animation: none; }
  .step.visible .art-check, .step.visible .art-trend { animation: none; }
  .step.visible .art-bar, .step.visible .art-bar-hot, .step.visible .art-trend-dot { animation: none; }
  .pulse-glow, .pulse-head { animation: none; opacity: 0; }
  .faq-item[open] p, .chip:has(input:checked) span, .tool-tab.active { animation: none; }
  .faq-item::details-content { transition: none; }
  .bot-toggle, .bot-ping::after, .bot-panel, .bot-msg, .bot-chip { animation: none; }
}

/* ------------------------------ responsive ----------------------------- */
@media (max-width: 1000px) {
  .hero-inner { grid-template-columns: 1fr; padding-top: 64px; }
  .grid-3 { grid-template-columns: 1fr 1fr; }
  .plans-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .footer-inner { grid-template-columns: 1fr; }
}
@media (max-width: 880px) {
  /* tighten the nav so the full logo always fits at its proper aspect */
  .nav-inner { gap: 14px; }
  .brand img { height: 40px; }
  .brand-name { font-size: 18px; }
  .brand-sub { font-size: 11px; letter-spacing: 2px; }
  .nav-links { gap: 14px; }
  .nav-links a { font-size: 13.5px; }
}
@media (max-width: 680px) {
  .nav-links {
    display: flex; position: absolute; top: 74px; left: 0; right: 0; z-index: 55;
    flex-direction: column; gap: 0; background: var(--bg-alt); border-bottom: 1px solid var(--border);
    opacity: 0; transform: translateY(-12px); visibility: hidden; pointer-events: none;
    transition: opacity 0.25s ease, transform 0.25s ease, visibility 0.25s;
  }
  .nav-links.open { opacity: 1; transform: none; visibility: visible; pointer-events: auto; }
  .nav-links a {
    padding: 15px 24px; border-top: 1px solid var(--border);
    opacity: 0; transform: translateY(-8px);
    transition: opacity 0.25s ease, transform 0.25s ease, color 0.2s;
  }
  .nav-links.open a { opacity: 1; transform: none; }
  .nav-links.open a:nth-child(2) { transition-delay: 0.04s; }
  .nav-links.open a:nth-child(3) { transition-delay: 0.08s; }
  .nav-links.open a:nth-child(4) { transition-delay: 0.12s; }
  .nav-links.open a:nth-child(5) { transition-delay: 0.16s; }
  .nav-burger { display: block; }
  .nav-cta .btn-discord { padding: 10px 12px; }
  .nav-cta .btn-discord span { display: none; }
  .grid-3, .grid-2, .plans-grid, .form-row, .tool-grid { grid-template-columns: 1fr; }
  .est-grid { grid-template-columns: 1fr; }
  .perf-compare { grid-template-columns: 1fr; }
  .perf-arrow { transform: rotate(90deg); justify-self: center; }
  /* the animated EKG line behind "Tuned for players of" is desktop-only */
  .strip-pulse { display: none; }
  .mt-big-val { font-size: 46px; }
  .mt-stage { min-height: 200px; }
  .mt-grid { grid-template-columns: 1fr; }
}
@media (max-width: 420px) {
  .nav-inner { gap: 8px; }
  .brand img { height: 25px; }
  .lang-btn { padding: 7px 8px; font-size: 12px; }
  .nav-burger { padding: 5px 9px; }
  .nav-cta { gap: 8px; }
  .hero-stats { gap: 24px; }
  .brand img { height: 34px; }
  .brand-name { font-size: 16px; letter-spacing: 1px; }
  .brand-sub { font-size: 8.5px; letter-spacing: 1.2px; }
  .result-big { font-size: 36px; }
  .float-chip { display: none; }
}
/* The header row stops shrinking at 363px: the logo, the wordmark, the language
   button, the Discord button and the burger cannot compress further, so any
   viewport narrower than that is scrolled sideways by the difference (2px at
   360px, 42px at 320px — 360px being one of the most common phone widths).
   Dropping the wordmark returns ~140px, far more than the 43px worst case, and
   is the whole fix: the `.container` gutter is deliberately left at 24px so
   every other section keeps its spacing. Nothing is lost to assistive tech —
   the <a class="brand"> carries the full name in its aria-label. */
@media (max-width: 370px) {
  .brand-sub { display: none; }
}

/* --------------------- policy consent + captcha ----------------------- */
.check-policy a { color: var(--accent); font-weight: 600; text-decoration: underline; }
.check-policy a:hover { color: #ffd75e; }
/* grecaptcha.render() injects a child with a hard `width: 304px; height: 78px`.
   This box is a grid item of `.modal form`, so its automatic minimum size
   (min-width: auto) resolved to that 304px and sized the form's whole column
   track — every other field was stretched to 304px inside a 203px content box
   and the modal scrolled sideways on phones. `min-width: 0` lets the track
   collapse to the width actually available; the rules further down make the
   widget itself fit into it. */
.recaptcha-box { display: flex; justify-content: center; min-width: 0; }
.recaptcha-box:not([hidden]) { margin-top: 2px; }
/* The image challenge normally hangs off the tickbox on this little arrow, but
   main.js re-centres it in the window (the tickbox lives in a scrolled modal,
   which reCAPTCHA's own placement cannot account for). An arrow pointing at
   nothing is worse than no arrow. */
.g-recaptcha-bubble-arrow { display: none !important; }
/* With the trimmed gutters above, 304px of widget plus the modal's own chrome
   (backdrop gutter, border, modal padding, scrollbar) still needs ~377px of
   viewport, so below that the widget is scaled down in two steps — each one
   chosen to keep a comfortable margin at the far end of its range rather than
   to only just clear it at the boundary.
   The old rule here scaled it too, but `transform` only changes what is
   painted — the element kept its full 304px layout box, which is the
   part that was overflowing. The negative margins pull the layout box in by
   exactly what the transform takes off, so the widget genuinely fits instead
   of merely looking smaller. Symmetric inline margins pair with the
   `top center` origin, which keeps the whole thing direction-agnostic: no RTL
   variant needed. Nothing is clipped, scaled or otherwise — the tickbox, the
   badge and the audio/refresh controls all stay fully visible and clickable. */
@media (max-width: 390px) {
  .recaptcha-box { --rc-scale: 0.88; }
  .recaptcha-box > div {
    transform: scale(var(--rc-scale));
    transform-origin: top center;
    margin-inline: calc(152px * (var(--rc-scale) - 1));
    margin-block-end: calc(78px * (var(--rc-scale) - 1));
  }
}
@media (max-width: 356px) {
  .recaptcha-box { --rc-scale: 0.78; }
}

/* ----------------------- footer payment logos ------------------------- */
.footer-base .byline b { color: var(--accent); font-weight: 700; }
.footer-pay { display: flex; align-items: center; gap: 10px; }
.footer-pay-label { color: var(--faint); font-size: 12px; }
.pay-logos { display: inline-flex; gap: 8px; }
.pay-card { display: inline-flex; }
.pay-card svg { width: 40px; height: 27px; border-radius: 4px; display: block; box-shadow: 0 0 0 1px var(--border); }

/* ------------------------- legal / policy pages ------------------------ */
.policy-top {
  display: flex; align-items: center; justify-content: space-between; gap: 16px;
  flex-wrap: wrap; padding: 20px 0; border-bottom: 1px solid var(--border);
}
.policy-top img { height: 38px; }
.policy-top-actions { display: flex; align-items: center; gap: 12px; }
.legal { max-width: 820px; margin: 0 auto; padding: 40px 0 72px; }
.legal h1 { font-size: 30px; margin-bottom: 8px; }
.legal .policy-updated { color: var(--faint); font-size: 13px; margin-bottom: 28px; }
.legal h2 { font-size: 19px; margin: 30px 0 10px; color: var(--accent); }
.legal h3 { font-size: 16px; margin: 18px 0 8px; }
.legal p { color: var(--muted); margin-bottom: 12px; font-size: 15px; }
.legal ul { margin: 8px 0 16px; padding-inline-start: 22px; color: var(--muted); font-size: 15px; }
.legal li { margin-bottom: 8px; }
.legal a { color: var(--accent); text-decoration: underline; }
.legal .legal-contact { margin-top: 28px; padding: 16px 18px; background: var(--surface); border: 1px solid var(--border); border-radius: 12px; }
.policy-lang { display: none; }
.policy-lang.active { display: block; }

/* ----------------------- studios / creative services ------------------- */
/* an odd trailing card (e.g. the 5th, Streaming & creator setups) spans the full row */
.studios .grid-2 > .feature:last-child:nth-child(odd) { grid-column: 1 / -1; }
.studio-note { margin-top: 24px; display: grid; gap: 12px; text-align: center; }
.studio-note p { color: var(--muted); font-size: 15px; max-width: 760px; margin: 0 auto; }
.studio-bilingual { color: var(--text); font-weight: 600; }

/* combined "Everything we do" section — sub-groups */
.svc-group { margin-top: 44px; }
.svc-kicker { display: block; margin-bottom: 16px; }

/* ----------------------- guarantee (no gains, no fee) ------------------ */
.guarantee-badge {
  display: inline-flex; align-items: center; gap: 9px; margin-top: 20px;
  padding: 9px 16px; border-radius: 999px; text-align: start;
  background: rgba(52, 211, 153, 0.1); border: 1px solid rgba(52, 211, 153, 0.42);
  color: #d8ffe9; font-size: 13px; font-weight: 600; line-height: 1.35; max-width: 540px;
}
.guarantee-badge .gbadge-ico {
  width: 18px; height: 18px; flex: none; fill: none;
  stroke: var(--success); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round;
}
.modal .guarantee-badge { display: flex; margin: 0 0 20px; max-width: none; }
.guarantee-banner {
  display: flex; align-items: center; gap: 12px; justify-content: center; text-align: center;
  max-width: 780px; margin: 0 auto 30px; padding: 14px 20px; border-radius: 14px;
  background: linear-gradient(180deg, rgba(52, 211, 153, 0.12), rgba(52, 211, 153, 0.04));
  border: 1px solid rgba(52, 211, 153, 0.45); color: #d8ffe9; font-size: 14.5px; font-weight: 600; line-height: 1.45;
}
.guarantee-banner .gbadge-ico {
  width: 26px; height: 26px; flex: none; fill: none;
  stroke: var(--success); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round;
}

/* ----------------------- FAQ — compact 2-column accordion -------------- */
.faq-item summary { padding: 14px 18px; font-size: 14.5px; }
.faq-item p { padding: 0 18px 16px; }
@media (min-width: 760px) {
  .faq-list { grid-template-columns: 1fr 1fr; align-items: start; }
}

/* --------------------- lead capture (free expert review) --------------- */
.lead-capture {
  margin-top: 22px; padding: 18px; border-radius: 12px; display: grid; gap: 8px;
  background: rgba(227, 179, 65, 0.06); border: 1px dashed rgba(227, 179, 65, 0.45);
}
.lead-cap-title { font-weight: 700; color: var(--text); font-size: 15px; }
.lead-cap-sub { color: var(--muted); font-size: 13px; line-height: 1.5; }
.lead-cap-row { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 4px; }
.lead-cap-row input { flex: 1 1 200px; }
.lead-cap-row .btn { flex: none; }
.lead-cap-done { color: var(--success); font-weight: 600; font-size: 14.5px; }

/* honeypot anti-spam field — visually hidden, off-screen, not announced */
.hp-field { position: absolute !important; left: -9999px; top: 0; width: 1px; height: 1px; opacity: 0; pointer-events: none; }

/* track-your-booking form: breathing room between the inputs and the button */
#trackForm { display: grid; gap: 18px; }
