/* ================================================================
   landing.css — Auraz ERP public landing page
   ----------------------------------------------------------------
   Source of truth: landing/DESIGN.md (tokens, bans, motion rules).
   Approved references: landing/refs/01-nav, 02-hero, m1-hero-mobile.
   Scope: marketing front page only — never the internal ERP app.
   ================================================================ */

/* ── Tokens (DESIGN.md §2) ─────────────────────────────────────── */
:root{
  --void:#050505;
  --obsidian:#0B0E13;
  --panel:rgba(255,255,255,.04);
  --panel-2:rgba(255,255,255,.03);
  --hairline:rgba(255,255,255,.04);
  --bone:#F4F5F7;
  --muted:#9BA3AF;
  --red:#C7312E;
  --red-deep:#A22323;
  --red-soft:#E2574E;
  --green:#3FB984;
  --green-soft:#6FCFA4;   /* "included" badge text (AA at small sizes) */
  --blue-pro:#8B7BD8;     /* premium/special accent, owner-directed purple */
  --blue-pro-soft:#B3A6EA;/* premium accent text on dark */
  --r-card:1.5rem;
  --r-inner:calc(1.5rem - .375rem);
  --r-input:10px;
  --font-display:'Cabinet Grotesk',sans-serif;
  --font-body:'Satoshi',sans-serif;
  --font-mono:'JetBrains Mono',monospace;
  --ease:cubic-bezier(.32,.72,0,1);
  /* z-scale (systemic layers only): overlay < nav (burger stays reachable) < grain */
  --z-overlay:200;
  --z-nav:250;
  --z-grain:300;
}

/* ── Base ──────────────────────────────────────────────────────── */
*{margin:0;padding:0;box-sizing:border-box}
/* scroll-padding-top is what makes an anchor land ON its section instead of
   underneath the bar. The nav is position:fixed and its pill ends 94px down, so
   without this every "Pricing" or "Get an App" click buried the first 94px of the
   section - heading included - behind the bar it was clicked from. One declaration
   on the root covers every anchor on every page, including the mobile menu and any
   deep link arriving with a hash already in the URL. */
html{scroll-behavior:smooth;overflow-x:clip;color-scheme:dark;scroll-padding-top:108px}
@media (max-width:767px){ html{scroll-padding-top:74px} }
body{
  background:var(--void);
  color:var(--bone);
  font-family:var(--font-body);
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  overflow-x:clip;
}
img{max-width:100%;display:block}
button{font-family:inherit;cursor:pointer}
a{color:inherit;text-decoration:none}
::selection{background:rgba(199,49,46,.35);color:#fff}

.wrap{width:min(1400px,92vw);margin:0 auto}

/* focus rings — red, visible, keyboard-only */
:focus-visible{outline:2px solid var(--red-soft);outline-offset:3px;border-radius:6px}
.btn:focus-visible,.nav-cta:focus-visible{outline-offset:2px;border-radius:999px}

/* ── Ambient depth: red bloom + grain (fixed layers, DESIGN.md §2/§6) ── */
.bloom{
  position:fixed;inset:0;pointer-events:none;z-index:0;
  background:
    radial-gradient(52% 44% at 74% 18%, rgba(199,49,46,.08), transparent 62%),
    radial-gradient(40% 36% at 12% 88%, rgba(199,49,46,.04), transparent 60%);
}
.grain{
  position:fixed;inset:0;pointer-events:none;z-index:var(--z-grain);opacity:.05;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)' opacity='.5'/%3E%3C/svg%3E");
}
main{position:relative;z-index:1}

/* ── Type ──────────────────────────────────────────────────────── */
.display{font-family:var(--font-display);font-weight:800;letter-spacing:-.03em;line-height:1.02}
.eyebrow{
  font-family:var(--font-mono);font-size:11px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--red-soft);font-weight:500;
}
.sub{color:var(--muted);font-size:17px;line-height:1.6;max-width:46ch}
.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}

/* ── Brand mark: real logo on its white tile (red-on-white lockup) ── */
.mark{
  width:34px;height:34px;border-radius:10px;flex-shrink:0;overflow:hidden;
  background:#fff;padding:3px;
  display:inline-flex;align-items:center;justify-content:center;
}
.mark img{width:100%;height:100%;object-fit:contain}
.wordmark{font-family:var(--font-display);font-weight:800;font-size:19px;letter-spacing:-.02em;color:var(--bone)}

/* ── CTA family (DESIGN.md §4) ─────────────────────────────────── */
.btn{
  display:inline-flex;align-items:center;gap:10px;
  border-radius:999px;padding:13px 26px;
  font-weight:700;font-size:15px;line-height:1;
  border:1px solid transparent;white-space:nowrap;
  transition:background .25s var(--ease), border-color .25s var(--ease), transform .25s var(--ease);
}
.btn:active{transform:scale(.98)}
.btn-red{background:var(--red);color:#fff}
.btn-red:hover{background:var(--red-deep)}
.btn-red .chip{
  width:26px;height:26px;border-radius:999px;display:inline-flex;flex-shrink:0;
  align-items:center;justify-content:center;background:rgba(255,255,255,.18);
  font-size:13px;margin-right:-8px;
  transition:transform .25s var(--ease);
}
.btn-red:hover .chip{transform:translate(2px,-1px)}
.btn-ghost{background:transparent;color:var(--bone);border-color:var(--hairline)}
.btn-ghost:hover{border-color:rgba(255,255,255,.28)}

/* ── Double-bezel glass card (outer shell + inner core) ────────── */
.shell{
  background:var(--panel-2);
  border:1px solid var(--hairline);
  border-radius:var(--r-card);
  padding:6px;
  box-shadow:0 30px 70px -40px rgba(0,0,0,.7);
}
.core{
  background:linear-gradient(180deg, rgba(255,255,255,.055), rgba(255,255,255,.028));
  border-radius:var(--r-inner);
  box-shadow:inset 0 1px 1px rgba(255,255,255,.045);
  height:100%;
}

/* ════════════════════════════════════════════════════════════════
   NAV — floating glass pill (fixed; blur allowed here only)
════════════════════════════════════════════════════════════════ */
.nav{
  position:fixed;top:0;left:0;right:0;z-index:var(--z-nav);
  display:flex;justify-content:center;
  padding-top:24px;pointer-events:none;
}
.nav-pill{
  pointer-events:auto;
  /* .wrap is min(1400px,92vw): the content underneath runs to 1400 while this bar
     stopped at 1080, so it was both narrower than the page and too small for what it
     carries. Matching .wrap lines the bar up with the content and buys 320px. */
  width:min(1400px,92vw);
  display:flex;align-items:center;justify-content:space-between;
  padding:10px 12px 10px 18px;border-radius:999px;
  background:rgba(11,14,19,.62);border:1px solid var(--hairline);
  backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.08), 0 24px 60px -30px rgba(0,0,0,.8);
}
.nav-brand{display:flex;align-items:center;gap:11px}
/* Every member of the bar is one 34px item box — the same height as the brand mark — so the
   plain links, the "Explore" trigger and the sign-in link share a single optical centre line.
   Before this the links were raw inline <a>s inside block <li>s: their line box sat ~4.5px
   above the flex-centred trigger and the CTA pill, which is the ragged nav the owner saw.
   The `> li >` scoping matters: a bare `.nav-links a` would also hit the dropdown panel's
   own links and stretch them to 34px. */
.nav-links{display:flex;align-items:center;gap:30px;font-size:14.5px;font-weight:500;color:var(--muted);list-style:none}
.nav-links>li{display:flex;align-items:center}
.nav-links>li>a,.nav-drop-btn{
  position:relative;display:inline-flex;align-items:center;gap:6px;
  height:34px;padding:0;line-height:1;
  background:none;border:none;
  font-family:inherit;font-size:14.5px;font-weight:500;color:var(--muted);
  transition:color .25s var(--ease);
}
.nav-links>li>a:hover,.nav-drop-btn:hover,
.nav-drop.open .nav-drop-btn,
.nav-links>li>a[aria-current="true"],.nav-links>li>a[aria-current="page"],
.nav-drop-btn[data-current]{color:var(--bone)}
/* current-section dot: hung off the item box itself, 2px up from its bottom edge, which puts
   it ~4px under the descenders — the same gap on a plain link and on the disclosure trigger,
   because both now have the same 34px box. */
/* aria-current="page" is the correct value for a link to the page you are ON;
   "true" is the generic fallback the scroll-spy uses for a section. Both earn
   the dot, so a real page link is not silently unmarked. */
.nav-links>li>a[aria-current="true"]::after,.nav-links>li>a[aria-current="page"]::after,
.nav-drop-btn[data-current]::after{
  content:"";position:absolute;left:50%;bottom:2px;transform:translateX(-50%);
  width:4px;height:4px;border-radius:999px;background:var(--red);
}
/* "Explore" disclosure — folds five destinations out of the bar (item 2e) */
.nav-drop{position:relative}
.nav-drop-btn i{font-size:13px;transition:transform .25s var(--ease)}
.nav-drop.open .nav-drop-btn i{transform:rotate(180deg)}
/* Left-anchored to the trigger, not centred on it: -23px cancels the panel's 1px border,
   10px padding and each row's 12px, so the menu text starts on the same x as the word
   "Explore". The 34px trigger box stops 18px short of the pill's bottom edge (the pill is
   sized by the taller CTA plus its own padding), so 28px clears the pill and still leaves
   a 10px gap under it. */
.nav-drop-panel{
  position:absolute;top:calc(100% + 28px);left:-23px;
  min-width:224px;display:flex;flex-direction:column;gap:1px;
  padding:10px;border-radius:18px;
  background:rgba(11,14,19,.94);border:1px solid var(--hairline);
  backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);
  box-shadow:0 30px 70px -30px rgba(0,0,0,.9);
  animation:navDropIn .22s var(--ease) both;
}
.nav-drop-panel[hidden]{display:none}   /* display:flex must not defeat the hidden attribute */
@keyframes navDropIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
.nav-drop-grp{
  font-family:var(--font-mono);font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--muted);padding:12px 12px 5px;
}
.nav-drop-grp:first-child{padding-top:4px}
.nav-drop-panel a{
  padding:9px 12px;border-radius:10px;font-size:14px;font-weight:500;color:var(--muted);
  white-space:nowrap;transition:background .2s var(--ease), color .2s var(--ease);
}
.nav-drop-panel a:hover{background:rgba(255,255,255,.06);color:var(--bone)}
/* "true" marks a SECTION the observer is watching; "page" marks a whole page, which is
   what the tracker is. Both mean "you are here" and both have to look it. */
.nav-drop-panel a[aria-current="true"],
.nav-drop-panel a[aria-current="page"]{color:var(--bone);background:rgba(199,49,46,.15)}
/* The account disclosure is the LAST thing in the pill, so a panel anchored to its left
   edge hangs off the pill. Anchor it to its right edge instead and it opens inward. */
#nav-acct .nav-drop-panel{left:auto;right:-23px}

.nav-actions{display:flex;align-items:center;gap:10px}
/* same 34px item box as the links, so hover/focus targets line up across the whole bar */
.nav-signin{
  display:inline-flex;align-items:center;height:34px;padding:0 10px;line-height:1;
  font-size:14.5px;font-weight:500;color:var(--muted);transition:color .25s var(--ease);
}
.nav-signin:hover{color:var(--bone)}
.nav .btn{padding:10px 20px;font-size:14px}

/* hamburger (mobile only) — two lines that morph to an X */
.burger{
  display:none;position:relative;width:44px;height:44px;flex-shrink:0;
  background:none;border:none;border-radius:999px;
}
.burger i{
  position:absolute;left:12px;right:12px;top:21px;height:2px;border-radius:2px;
  background:var(--bone);
  transition:transform .35s var(--ease);   /* transform-only morph (GPU-safe) */
}
.burger i:nth-child(1){transform:translateY(-4px)}
.burger i:nth-child(2){transform:translateY(3px)}
.burger[aria-expanded="true"] i:nth-child(1){transform:rotate(45deg)}
.burger[aria-expanded="true"] i:nth-child(2){transform:rotate(-45deg)}

/* mobile menu overlay — fixed, heavy blur allowed, staggered links */
/* This menu holds ELEVEN links plus a call to action. It was built as a statement —
   44px display type, vertically centred — which is a design for four links, not
   eleven. Two things went wrong on a 390px phone:
     · the list is far taller than the screen, and a centred flex container overflows
       equally in BOTH directions, so the first item ("Product") was pushed above the
       top edge and could not be scrolled back to. The menu was missing an item.
     · it read as a takeover rather than a way to get somewhere.
   So: start the list at the top, let it scroll, and size the type for reading a list
   rather than for making a point. Each row still clears 44px. */
.menu{
  position:fixed;inset:0;z-index:var(--z-overlay);
  display:flex;flex-direction:column;justify-content:flex-start;
  /* --nav-h is measured by setMenu() in site.js each time the menu opens, because the
     bar wraps to two rows on a narrow phone and one on a wide one. The fallback is the
     two-row height, so the first item is never hidden behind the bar if JS is late. */
  padding:calc(var(--nav-h,118px) + 14px) clamp(20px,6vw,40px)
          calc(28px + env(safe-area-inset-bottom,0px));
  overflow-y:auto;overscroll-behavior:contain;
  background:rgba(5,5,5,.82);
  backdrop-filter:blur(26px);-webkit-backdrop-filter:blur(26px);
  opacity:0;visibility:hidden;
  transition:opacity .35s var(--ease), visibility 0s linear .35s;
}
.menu.open{opacity:1;visibility:visible;transition:opacity .35s var(--ease)}
/* Direct children only. `.menu a` also matched the Start free button inside
   .menu-cta, which is why the CTA rendered at 30px+ display weight and swallowed
   the bottom of the screen — it was inheriting the navigation's type scale. */
.menu>a{
  font-family:var(--font-display);font-weight:700;letter-spacing:-.01em;
  font-size:clamp(18px,4.6vw,22px);color:var(--bone);
  padding:9px 0;min-height:44px;display:flex;align-items:center;
  border-bottom:1px solid rgba(255,255,255,.06);
  opacity:0;transform:translateY(24px);
  transition:opacity .5s var(--ease), transform .5s var(--ease), color .25s var(--ease);
}
.menu>a:last-of-type{border-bottom:0}
/* the CTA is a button, so it takes the button scale, not the heading scale */
.menu .menu-cta .btn{font-size:15px;font-weight:600;letter-spacing:0;
  font-family:var(--font-body,inherit);width:100%;justify-content:center}
.menu>a:hover{color:var(--red-soft)}
/* The bar's dot cannot help here — below its breakpoint .nav-links is display:none and
   this menu IS the navigation. The current-page marker is now a leading bar rather than
   the underline that sat beneath the old display-sized type: at list scale an underline
   competed with the row dividers. */
.menu>a[aria-current]{color:var(--red-soft)}
.menu>a[aria-current]::before{content:"";width:3px;height:1.1em;margin-inline-end:10px;
  border-radius:2px;background:var(--red)}
.menu.open a{opacity:1;transform:translateY(0)}
.menu.open a:nth-child(1){transition-delay:.08s}
.menu.open a:nth-child(2){transition-delay:.14s}
.menu.open a:nth-child(3){transition-delay:.20s}
.menu.open a:nth-child(4){transition-delay:.26s}
.menu .menu-cta{margin-top:26px;opacity:0;transform:translateY(24px);
  transition:opacity .5s var(--ease) .32s, transform .5s var(--ease) .32s}
.menu.open .menu-cta{opacity:1;transform:translateY(0)}

/* ── Currency + language: in the bar on a desktop, in the menu on a phone ──────
   Both mounts are always in the DOM and always populated; only one is ever shown.
   Keeping them mounted rather than moved means neither currency.js nor i18n.js has
   to care about the viewport, and a change made in one is already correct in the
   other because they read the same stored preference. */
.menu .menu-prefs{display:none}
@media (max-width:48rem){
  /* The two chips that wrapped .nav-actions onto a second row. The bar is 118px on a
     375px screen because of them — 14.5% of the first viewport, spent on controls
     almost nobody touches before they have read the headline. */
  .nav-actions [data-cur-toggle],
  .nav-actions [data-lang-toggle]{display:none}
  .menu .menu-prefs{
    display:flex;gap:10px;flex-wrap:wrap;align-items:center;
    margin-top:22px;padding-top:20px;border-top:1px solid rgba(255,255,255,.10);
    opacity:0;transform:translateY(24px);
    transition:opacity .5s var(--ease) .28s, transform .5s var(--ease) .28s;
  }
  .menu.open .menu-prefs{opacity:1;transform:translateY(0)}
}
@media (max-width:48rem) and (prefers-reduced-motion:reduce){
  .menu .menu-prefs{transition:none}
}
body.menu-locked{overflow:hidden}
/* The floating "my app requests" button rides at z-index 9990, far above the overlay,
   so while the menu was open it sat on top of the Start free button — two red circles
   fighting over the same corner, one of them unreachable. The menu already links to
   My app requests, so the shortcut has nothing to offer while it is open. */
body.menu-locked #az-rq-fab{display:none}
/* The consent bar outranks everything (z 9998) and is 180px tall at the bottom of the
   screen. Without room reserved for it, the menu's last links and its CTA sit
   underneath a panel that cannot be dismissed without answering it. */
body:has(#auraz-consent.in) .menu{padding-bottom:calc(200px + env(safe-area-inset-bottom,0px))}

/* ════════════════════════════════════════════════════════════════
   HERO — editorial split 7/5 (ref board 02)
════════════════════════════════════════════════════════════════ */
.hero{
  min-height:100dvh;
  display:grid;grid-template-columns:7fr 5fr;gap:56px;align-items:center;
  padding-top:96px;padding-bottom:48px;
}
.hero-copy .eyebrow{display:block;margin-bottom:22px}
.hero-copy h1{font-size:clamp(44px,4.6vw,72px);max-width:15ch;color:var(--bone)}
.hero-copy .sub{margin:24px 0 34px}
.hero-ctas{display:flex;align-items:center;gap:14px;flex-wrap:wrap}

/* layered product visual: main frame + a slim receivables chip stacked above */
.hero-visual{position:relative;height:520px}
.hv-frame{position:absolute;inset:auto 0 24px 36px;height:400px}
.hv-frame .core{padding:22px;display:flex;flex-direction:column;gap:18px}
.hv-back{
  position:absolute;right:16px;top:0;width:56%;
  transform:rotate(2deg);opacity:.92;
}
.hv-back .core{padding:14px 18px 16px}
.hv-back small{
  display:block;font-size:10px;letter-spacing:.08em;text-transform:uppercase;
  color:var(--muted);margin-bottom:6px;
}
.hv-head{display:flex;justify-content:space-between;align-items:center}
.hv-head .t{font-weight:700;font-size:14.5px;color:var(--bone)}
.hv-head .mono{font-size:11px;color:var(--muted)}
.hv-kpis{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}
.hv-kpi{border:1px solid var(--hairline);border-radius:12px;padding:12px 14px}
.hv-kpi small{display:block;font-size:10.5px;color:var(--muted);margin-bottom:6px}
.hv-kpi b{font-family:var(--font-mono);font-size:17px;color:var(--bone)}
.hv-kpi .up{color:var(--green);font-size:10.5px;margin-left:6px}
.hv-chart{flex:1;border:1px solid var(--hairline);border-radius:12px;padding:14px;display:flex;flex-direction:column}
.hv-chart-head{display:flex;justify-content:space-between;align-items:baseline}
.hv-chart-head span{font-size:12px;color:var(--muted)}
.hv-chart-head b{font-family:var(--font-mono);font-size:13px;color:var(--red-soft)}
/* A baseline the bars stand ON, rather than floating above nothing. Low-contrast on
   purpose — it orients the eye without competing with the data. */
.hv-bars{flex:1;display:flex;align-items:flex-end;gap:7px;margin-top:10px;
  border-bottom:1px solid rgba(255,255,255,.12);padding-bottom:1px}
.hv-bars i{
  flex:1;border-radius:5px 5px 2px 2px;
  /* The earlier months are quieter so the trend reads left-to-right as a rise rather
     than six equally loud bars. */
  background:linear-gradient(180deg,rgba(199,49,46,.62),rgba(199,49,46,.16));
  transform-origin:bottom;
}
/* The month the headline figure is about. One emphasis, not six. */
.hv-bars i.on{background:linear-gradient(180deg,var(--red-soft,#E2574E),rgba(199,49,46,.35))}
.hv-axis{display:flex;gap:7px;margin-top:6px}
.hv-axis span{flex:1;text-align:center;font-family:var(--font-mono);
  font-size:9px;letter-spacing:.04em;color:var(--muted);opacity:.75}
.hv-axis span:last-child{color:var(--bone);opacity:1}
.hv-recv{display:flex;justify-content:space-between;align-items:baseline}
.hv-recv b{font-family:var(--font-mono);font-size:20px;color:var(--bone)}
.hv-recv span{font-size:11px;color:var(--muted)}

/* ── Entry motion: staggered fade-up on load (transform/opacity only) ── */
.rise{opacity:0;transform:translateY(24px);
  transition:opacity .8s var(--ease), transform .8s var(--ease)}
.rise.in{opacity:1;transform:translateY(0)}
.hv-bars i{transform:scaleY(0);transition:transform .9s var(--ease)}
.hero.in .hv-bars i{transform:scaleY(1)}
.hero.in .hv-bars i:nth-child(1){transition-delay:.45s}
.hero.in .hv-bars i:nth-child(2){transition-delay:.53s}
.hero.in .hv-bars i:nth-child(3){transition-delay:.61s}
.hero.in .hv-bars i:nth-child(4){transition-delay:.69s}
.hero.in .hv-bars i:nth-child(5){transition-delay:.77s}
.hero.in .hv-bars i:nth-child(6){transition-delay:.85s}

/* generic scroll-reveal hook (IntersectionObserver) */
.reveal{opacity:0;transform:translateY(20px);
  transition:opacity .7s var(--ease), transform .7s var(--ease)}
.reveal.in{opacity:1;transform:translateY(0)}
.reveal.d1{transition-delay:.08s}
.reveal.d2{transition-delay:.16s}
.reveal.d3{transition-delay:.24s}
.reveal.d4{transition-delay:.32s}
.reveal.d5{transition-delay:.40s}

/* ════════════════════════════════════════════════════════════════
   SECTION SCAFFOLD — cinematic chapter rhythm (DESIGN.md §5)
════════════════════════════════════════════════════════════════ */
.sec{padding:clamp(6rem,10vw,10rem) 0}
.band{background:var(--obsidian);border-top:1px solid var(--hairline);border-bottom:1px solid var(--hairline)}
.sec-head{max-width:56ch;margin-bottom:38px}
.sec-head h2{font-size:clamp(34px,3.4vw,52px);color:var(--bone)}
.sec-head .sub{margin-top:14px}

/* ════════════════════════════════════════════════════════════════
   MODULES — gapless dense bento (ref board 03)
════════════════════════════════════════════════════════════════ */
.bento{
  display:grid;gap:14px;
  grid-template-columns:repeat(12,1fr);
  grid-auto-rows:184px;
  grid-auto-flow:dense;
}
.cell{grid-column:span 4}
.cell.w6{grid-column:span 6}
.cell.h2{grid-row:span 2}
.cell .core{padding:20px;display:flex;flex-direction:column;overflow:hidden}
.cell h3{font-family:var(--font-display);font-weight:700;font-size:17px;letter-spacing:-.01em;color:var(--bone)}
.cell p{font-size:13px;color:var(--muted);line-height:1.5;margin-top:6px;max-width:34ch}
.cell .art{flex:1;margin-top:14px;min-height:0}

/* haptic hover physics: lift + border warms toward the accent (GPU-safe) */
.cell{transition:transform .7s var(--ease), border-color .7s var(--ease), box-shadow .7s var(--ease)}
@media (hover:hover){
  .cell:hover{
    transform:translateY(-4px);
    border-color:rgba(199,49,46,.35);
    box-shadow:0 34px 80px -42px rgba(0,0,0,.85);
  }
}

/* card header row: title + ultra-light icon chip */
.cell-top{display:flex;align-items:center;justify-content:space-between;gap:10px}
.cix{
  width:32px;height:32px;flex-shrink:0;border-radius:10px;
  border:1px solid var(--hairline);
  display:inline-flex;align-items:center;justify-content:center;
  color:var(--red-soft);font-size:17px;
}

/* Sales & POS: channel split chips */
.split{display:flex;gap:10px;margin-top:14px}
.split-chip{flex:1;border:1px solid var(--hairline);border-radius:10px;padding:9px 12px}
.split-chip small{display:block;font-size:10px;color:var(--muted);margin-bottom:4px}
.split-chip b{font-family:var(--font-mono);font-size:13px;color:var(--bone);font-weight:500}

/* Online storefront: mini browser chrome */
.store-chrome{
  margin-top:auto;padding:10px 12px;border:1px solid var(--hairline);border-radius:12px;
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  background:rgba(5,5,5,.35);
}
.store-url{
  font-family:var(--font-mono);font-size:11px;color:var(--muted);
  border:1px solid var(--hairline);border-radius:999px;padding:5px 12px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.store-tiles{display:flex;gap:6px;flex-shrink:0}
.store-tiles i{width:18px;height:18px;border-radius:5px;background:rgba(255,255,255,.10)}
.store-tiles i:nth-child(2){background:rgba(199,49,46,.55)}

/* Inventory: named stock meters, one flagged low */
.stock{display:flex;flex-direction:column;gap:9px;margin-top:12px}
.stock-row{display:flex;align-items:center;gap:12px;font-size:12.5px;color:var(--muted)}
.stock-row span{width:86px;flex-shrink:0}
.stock-row em{flex:1;height:6px;border-radius:4px;background:rgba(255,255,255,.03);overflow:hidden}
.stock-row em i{display:block;height:100%;border-radius:4px;background:rgba(255,255,255,.35)}
.stock-row b{font-family:var(--font-mono);font-size:11.5px;color:var(--bone);font-weight:500;width:52px;text-align:right;flex-shrink:0}
.stock-row.low em i{background:var(--red)}
.stock-row.low b{color:var(--red-soft)}

/* CRM: customer initial chips + note */
.crm-strip{display:flex;align-items:center;gap:8px;margin-top:auto;padding-top:14px}
.crm-face{
  width:26px;height:26px;border-radius:9px;flex-shrink:0;
  display:inline-flex;align-items:center;justify-content:center;
  font-family:var(--font-mono);font-size:9.5px;color:var(--bone);
  background:rgba(255,255,255,.08);border:1px solid var(--hairline);
}
.crm-face + .crm-face{margin-left:-12px}
.crm-note{font-size:11.5px;color:var(--muted);margin-left:6px}

/* The Reports card's green delta chips ("38.2% gross margin", "BHD 3,140 net cash")
   are gone, and their rules go with them rather than sitting here as dead weight for
   the next person to wonder about. .rep-deltas, .delta and .delta.up have no other
   user in the markup or in landing.js. */
.cell-grad .core{background:linear-gradient(150deg, rgba(199,49,46,.28), rgba(199,49,46,.04) 55%, rgba(255,255,255,.03))}
.cell-pattern .core{
  background-image:radial-gradient(rgba(255,255,255,.09) 1px, transparent 1px);
  background-size:14px 14px;
}
.cell-chart{border:1px solid var(--hairline);border-radius:12px;padding:14px;height:100%}
.cell-chart .hv-bars{height:calc(100% - 4px);margin-top:0}
.cell-rows{display:flex;flex-direction:column;gap:8px;margin-top:14px}
.cell-rows i{height:9px;border-radius:5px;background:rgba(255,255,255,.09)}
.cell-rows i:nth-child(1){width:88%}
.cell-rows i:nth-child(2){width:64%;background:rgba(199,49,46,.5)}
.cell-rows i:nth-child(3){width:76%}
.cell-ledger{font-family:var(--font-mono);font-size:12px;color:var(--muted);margin-top:10px;line-height:1.8}
.cell-ledger b{color:var(--bone);float:right;font-weight:500}
/* bento bars don't wait for the hero flag — reveal drives them */
.bento .hv-bars i{transform:scaleY(1)}

/* ════════════════════════════════════════════════════════════════
   HOW IT WORKS — hairline-divided strip (no step numbers, verb-led)
════════════════════════════════════════════════════════════════ */
.how{display:grid;grid-template-columns:repeat(3,1fr);gap:0}
.how-item{padding:6px 34px 6px 26px;border-left:1px solid var(--hairline)}
.how-item h3{font-family:var(--font-display);font-weight:800;font-size:21px;letter-spacing:-.02em;color:var(--bone)}
.how-item p{font-size:14px;color:var(--muted);line-height:1.6;margin-top:10px;max-width:34ch}

/* ════════════════════════════════════════════════════════════════
   AI WORKFORCE — stage spotlight (ref board 04; the page's peak)
════════════════════════════════════════════════════════════════ */
.workforce{position:relative}
.spot-glow{
  position:absolute;inset:-10% -6%;pointer-events:none;z-index:-1;
  background:
    radial-gradient(46% 52% at 50% 26%, rgba(199,49,46,.13), transparent 64%),
    radial-gradient(30% 30% at 50% 108%, rgba(199,49,46,.05), transparent 60%);
}
.emp-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
.emp .core{padding:24px;display:flex;flex-direction:column;min-height:340px}
.emp{transition:transform .7s var(--ease), border-color .7s var(--ease)}
.emp.spot{transform:translateY(-16px);border-color:rgba(199,49,46,.45)}
@media (hover:hover){
  .emp:hover{transform:translateY(-4px);border-color:rgba(199,49,46,.35)}
  .emp.spot:hover{transform:translateY(-20px)}
}
.face{
  width:52px;height:52px;border-radius:16px;margin-bottom:16px;
  display:flex;align-items:center;justify-content:center;
  font-family:var(--font-display);font-weight:800;font-size:22px;color:#fff;
  background:linear-gradient(150deg,#E2574E,#A22323);
}
.emp h3{font-family:var(--font-display);font-weight:800;font-size:22px;letter-spacing:-.02em;color:var(--bone)}
.role{font-size:13px;color:var(--red-soft);font-weight:500;margin-top:3px}
.duty{font-size:13.5px;color:var(--muted);line-height:1.55;margin-top:12px;max-width:30ch}
.emp-provides{list-style:none;margin:14px 0 0;padding:0;display:flex;flex-direction:column;gap:7px}
.emp-provides li{display:flex;align-items:flex-start;gap:8px;font-size:12.5px;color:var(--bone);line-height:1.45}
.emp-provides li i{color:var(--red-soft);font-size:14px;flex:none;margin-top:1px}
.emp .foot{margin-top:auto;padding-top:18px;display:flex;align-items:center;justify-content:space-between}
.seat{font-family:var(--font-mono);font-size:13px;color:var(--bone)}
.seat small{display:block;font-size:10px;color:var(--muted);letter-spacing:.06em;text-transform:uppercase;margin-top:2px}
.hire{
  display:inline-flex;align-items:center;justify-content:center;
  min-height:44px;border-radius:999px;padding:9px 22px;
  font-weight:700;font-size:13.5px;
  border:1px solid rgba(199,49,46,.55);background:rgba(199,49,46,.10);color:var(--red-soft);
  transition:background .25s var(--ease), color .25s var(--ease), transform .25s var(--ease);
}
.hire:hover{background:rgba(199,49,46,.2)}
.hire:active{transform:scale(.98)}
.hire-fill{background:var(--red);border-color:var(--red);color:#fff}
.hire-fill:hover{background:var(--red-deep);border-color:var(--red-deep)}
.emp-note{margin-top:26px;font-size:12.5px;color:var(--muted)}

/* ════════════════════════════════════════════════════════════════
   PRICING — three tiers (ref board 05)
════════════════════════════════════════════════════════════════ */
.price-head{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;flex-wrap:wrap;margin-bottom:38px}
.price-head h2{font-size:clamp(34px,3.4vw,52px);max-width:18ch}
.bill{font-family:var(--font-mono);font-size:11.5px;color:var(--muted);letter-spacing:.08em;text-transform:uppercase;padding-bottom:8px}
.tiers{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
/* shell flexes and core grows with content — a fixed-height core would
   crush the expanding plan-details back to zero via flex-shrink */
.tier{display:flex;flex-direction:column}
.tier .core{padding:26px;display:flex;flex-direction:column;min-height:420px;height:auto;flex:1}
.tier h3{font-family:var(--font-display);font-weight:800;font-size:20px;color:var(--bone)}
.who{font-size:12.5px;color:var(--muted);margin-top:4px;min-height:38px}
.price{margin:18px 0 6px;font-family:var(--font-mono);font-size:34px;font-weight:500;color:var(--bone);font-variant-numeric:tabular-nums}
.price-sub{display:block;font-family:var(--font-body,inherit);font-size:12px;color:var(--muted);letter-spacing:0;text-transform:none;margin-top:4px}
/* monthly / yearly billing toggle (item 2) */
.bill-toggle{display:inline-flex;gap:4px;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.10);border-radius:999px;padding:4px}
.bill-opt{display:inline-flex;align-items:center;gap:7px;border:0;background:transparent;color:var(--muted);font:inherit;font-size:13px;font-weight:600;padding:8px 16px;border-radius:999px;cursor:pointer;transition:background .2s var(--ease),color .2s var(--ease)}
.bill-opt.on{background:var(--red);color:#fff}
.bill-save{font-size:10px;font-weight:700;letter-spacing:.02em;text-transform:uppercase;color:var(--red-soft);background:rgba(199,49,46,.05);border-radius:999px;padding:2px 7px}
.bill-opt.on .bill-save{color:#fff;background:rgba(255,255,255,.22)}
/* plan comparison checklist (item 4) */
.plan-compare{margin-top:34px;background:var(--card,rgba(255,255,255,.03));border:1px solid rgba(255,255,255,.10);border-radius:20px;padding:22px 24px;animation:pcIn .3s var(--ease) both}
@keyframes pcIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.pc-head{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:16px}
.pc-head h3{font-size:clamp(22px,2.2vw,30px)}
.pc-close{border:1px solid rgba(255,255,255,.14);background:transparent;color:var(--muted);font:inherit;font-size:13px;font-weight:600;border-radius:999px;padding:7px 15px;cursor:pointer}
.pc-close:hover{color:var(--bone);border-color:rgba(255,255,255,.3)}
.pc-scroll{overflow-x:auto}
.pc-table{width:100%;border-collapse:collapse;font-size:13.5px;min-width:560px}
.pc-table th[scope=col]{font-family:var(--font-display);font-weight:800;font-size:15px;color:var(--bone);text-align:center;padding:10px 12px;border-bottom:1px solid rgba(255,255,255,.14)}
.pc-table th[scope=col].pc-rec{color:var(--red-soft)}
.pc-table th[scope=row]{text-align:left;font-weight:500;color:var(--muted);padding:11px 12px;border-bottom:1px solid rgba(255,255,255,.06)}
.pc-table td{text-align:center;padding:11px 12px;color:var(--bone);border-bottom:1px solid rgba(255,255,255,.06);font-variant-numeric:tabular-nums}
.pc-table td.pc-rec{background:rgba(199,49,46,.06)}
.pc-table td.y{color:var(--green,#3bb97a);font-size:16px}
.pc-table td.n{color:rgba(255,255,255,.28)}
.pc-table tbody tr:hover th[scope=row]{color:var(--bone)}
.price small{font-size:12px;color:var(--muted);font-weight:400}
.feat{list-style:none;margin:14px 0 4px;display:flex;flex-direction:column;gap:10px;font-size:13.5px;color:var(--muted)}
.feat li::before{content:"";display:inline-block;width:14px;height:2px;background:var(--red);border-radius:2px;margin-right:10px;vertical-align:middle;opacity:.85}
.tier .btn{margin-top:auto;justify-content:center}

/* AI chat indicator — identical on every plan (all tiers include it) */
.ai-chip{
  display:inline-flex;align-items:center;gap:7px;align-self:flex-start;
  margin-top:14px;border-radius:999px;padding:6px 12px;
  font-size:12px;font-weight:600;color:var(--bone);
  background:rgba(255,255,255,.05);border:1px solid var(--hairline);
}
.ai-chip i{color:var(--red-soft);font-size:14px}

/* highlight badges — green = included with plan, blue = premium/advanced
   (badge palette extension sanctioned by the owner for scannability) */
.pills{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.pill{
  display:inline-flex;align-items:center;gap:7px;border-radius:999px;
  padding:6px 12px;font-size:12px;font-weight:600;
}
.pill i{font-size:14px}
.pill-inc{color:var(--green-soft);background:rgba(63,185,132,.10);border:1px solid rgba(63,185,132,.3)}
.pill-pro{color:var(--blue-pro-soft);background:rgba(139,123,216,.12);border:1px solid rgba(139,123,216,.38)}

/* top tier — "Most powerful", premium blue treatment mirroring .rec */
.tier.top{position:relative;border-color:rgba(139,123,216,.45)}
.tier.top::after{
  content:"Most powerful";position:absolute;top:-11px;left:26px;
  font-family:var(--font-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;
  color:#fff;background:var(--blue-pro);padding:4px 12px;border-radius:999px;
}
.tier.top .core{background:linear-gradient(180deg, rgba(139,123,216,.10), rgba(139,123,216,.02) 55%, rgba(255,255,255,.03))}
@media (hover:hover){ .tier.top:hover{border-color:rgba(139,123,216,.6)} }

/* expandable plan details — grid-rows + opacity disclosure
   (height animation sanctioned by the owner for this control) */
.plan-toggle{
  display:inline-flex;align-items:center;gap:7px;align-self:flex-start;
  margin:10px 0;background:none;border:none;padding:8px 0;min-height:44px;
  font-size:12.5px;font-weight:700;color:var(--red-soft);
}
.plan-toggle:hover{color:var(--bone)}
.plan-toggle i{font-size:14px;transition:transform .35s var(--ease)}
.tier.open .plan-toggle i{transform:rotate(180deg)}
/* capped max-height, not grid-rows 0fr/1fr: the fr trick resolves to a
   zero track when the grid is a flex item in a column flexbox (Chrome) */
.plan-details{
  max-height:0;overflow:hidden;opacity:0;
  transition:max-height .5s var(--ease), opacity .45s var(--ease);
}
.tier.open .plan-details{max-height:420px;opacity:1}
.feat-full{margin:2px 0 16px;font-size:12.5px;gap:8px}
.feat-full li::before{background:rgba(255,255,255,.28)}
.tier{transition:transform .7s var(--ease), border-color .7s var(--ease)}
@media (hover:hover){ .tier:hover{transform:translateY(-4px);border-color:rgba(199,49,46,.3)} }
.rec{position:relative;border-color:rgba(199,49,46,.45)}
.rec::after{
  content:"Most popular";position:absolute;top:-11px;left:26px;
  font-family:var(--font-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;
  color:#fff;background:var(--red);padding:4px 12px;border-radius:999px;
}
.rec .core{background:linear-gradient(180deg, rgba(199,49,46,.13), rgba(199,49,46,.03) 55%, rgba(255,255,255,.03))}

/* ════════════════════════════════════════════════════════════════
   SIGNUP — the ONE centered moment; motion deliberately restrained
════════════════════════════════════════════════════════════════ */
.signup{display:flex;flex-direction:column;align-items:center;text-align:center}
.signup-head h2{font-size:clamp(36px,4vw,58px);max-width:16ch;margin:0 auto}
.signup-head .sub{margin:16px auto 0;text-align:center}
.form-shell{width:min(460px,100%);margin-top:36px;text-align:left}
.form-core{padding:26px}
.mode{
  display:flex;gap:4px;padding:4px;border:1px solid var(--hairline);border-radius:999px;
  margin-bottom:8px;
}
.mode-btn{
  flex:1;min-height:44px;border:none;border-radius:999px;background:transparent;
  font-weight:700;font-size:13.5px;color:var(--muted);
  transition:background .25s var(--ease), color .25s var(--ease);
}
.mode-btn.on{background:rgba(255,255,255,.08);color:var(--bone)}
.field{display:flex;flex-direction:column;gap:6px;margin-top:18px}
.field[hidden]{display:none}   /* display:flex must not defeat the hidden attribute */
.field label{font-size:13px;font-weight:700;color:var(--bone)}
.field input{
  min-height:44px;padding:11px 14px;font-size:14.5px;font-family:var(--font-body);
  color:var(--bone);background:rgba(5,5,5,.4);
  border:1.5px solid var(--hairline);border-radius:var(--r-input);
  transition:border-color .2s var(--ease), box-shadow .2s var(--ease);
}
.field input:focus{outline:none;border-color:var(--red);box-shadow:0 0 0 3px rgba(199,49,46,.22)}
/* Autofill repaints a field in the browser's own light palette, and it beats
   a plain background declaration. Sign-in and signup fields are MEANT to be filled, so on a dark page the
   repaint is not a maybe. Solid #080A0E rather than the field's own
   rgba(5,5,5,.4), which an inset shadow cannot reproduce.
   The inset shadow is the only thing that overrides it in WebKit; the long
   transition stops the pale flash before it lands. */
.field input:-webkit-autofill,
.field input:-webkit-autofill:hover,
.field input:-webkit-autofill:focus,
.field input:-webkit-autofill:active{
  -webkit-text-fill-color:var(--bone);
  -webkit-box-shadow:0 0 0 1000px #080A0E inset;
  box-shadow:0 0 0 1000px #080A0E inset;
  caret-color:var(--bone);
  transition:background-color 100000s ease-in-out 0s;
}
/* The standard selector, kept in its OWN block: a browser that does not know
   :autofill drops the whole rule it appears in, which would take the
   -webkit- fallback above down with it. */
.field input:autofill{
  box-shadow:0 0 0 1000px #080A0E inset;
  -webkit-text-fill-color:var(--bone);
  caret-color:var(--bone);
}

.hint{font-size:11.5px;color:var(--muted)}
.err{display:none;font-size:12px;color:#E07069;font-weight:500}
.field.bad .err{display:block}
.field.bad input{border-color:rgba(224,112,105,.75)}
.form-submit{width:100%;justify-content:center;margin-top:24px;position:relative;overflow:hidden}
.form-submit.loading{pointer-events:none;opacity:.88}
.form-submit.loading::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(100deg, transparent 30%, rgba(255,255,255,.28), transparent 70%);
  transform:translateX(-100%);
  animation:sheen 1.1s var(--ease) infinite;
}
@keyframes sheen{to{transform:translateX(100%)}}
.fine{margin-top:14px;font-size:11.5px;color:var(--muted);text-align:center}

/* ── Google auth (UI only until OAuth credentials are configured) ── */
.btn-google{
  position:relative;
  width:100%;justify-content:center;gap:10px;
  background:rgba(255,255,255,.06);border-color:var(--hairline);color:var(--bone);
}
.btn-google:hover{border-color:rgba(255,255,255,.28);background:rgba(255,255,255,.09)}
.btn-google svg{width:18px;height:18px;flex-shrink:0}
/* Busy state: spinner is absolutely positioned so the label never reflows and the
   button keeps a stable size instead of jumping when it is clicked repeatedly. */
.btn-google.loading{opacity:.72;pointer-events:none}
.btn-google.loading::after{content:"";position:absolute;right:16px;top:50%;width:15px;height:15px;margin-top:-8px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:aurazspin .7s linear infinite}
@keyframes aurazspin{to{transform:rotate(360deg)}}
.or-div{
  display:flex;align-items:center;gap:12px;margin-top:18px;
  color:var(--muted);font-family:var(--font-mono);font-size:10.5px;
  letter-spacing:.12em;text-transform:uppercase;
}
.or-div::before,.or-div::after{content:"";flex:1;height:1px;background:var(--hairline)}
.auth-note{
  display:none;margin-top:12px;padding:10px 12px;border-radius:var(--r-input);
  font-size:12px;color:var(--blue-pro-soft);
  background:rgba(139,123,216,.1);border:1px solid rgba(139,123,216,.35);
}
.auth-note.show{display:block}

/* ════════════════════════════════════════════════════════════════
   ONBOARDING WIZARD (onboarding.html) — calm, transactional
════════════════════════════════════════════════════════════════ */
.wiz{max-width:600px;margin:0 auto;padding:64px 0 90px}
.wiz-brand{display:flex;justify-content:center;margin-bottom:26px}
.wiz-head{text-align:center;margin-bottom:22px}
.wiz-head h1{font-family:var(--font-display);font-weight:800;letter-spacing:-.03em;font-size:clamp(26px,3.2vw,38px);color:var(--bone)}
.wiz-head p{font-size:14px;color:var(--muted);margin-top:8px}
.steps{display:flex;justify-content:center;gap:18px;margin-bottom:26px;flex-wrap:wrap}
.sdot{display:flex;align-items:center;gap:8px;font-size:11.5px;font-weight:600;color:var(--muted)}
.sdot i{
  width:26px;height:26px;border-radius:999px;flex-shrink:0;font-style:normal;
  display:flex;align-items:center;justify-content:center;
  font-family:var(--font-mono);font-size:11px;
  border:1px solid var(--hairline);color:var(--muted);
  transition:background .3s var(--ease), border-color .3s var(--ease), color .3s var(--ease);
}
.sdot.on{color:var(--bone)}
.sdot.on i{background:var(--red);border-color:var(--red);color:#fff}
.sdot.done i{border-color:rgba(63,185,132,.55);color:var(--green-soft)}
.wiz-pane{display:none}
.wiz-pane.on{display:block;animation:paneIn .35s var(--ease)}
@keyframes paneIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.wiz-nav{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:26px}
.wiz-nav .btn{min-width:130px;justify-content:center}
.wiz-note{margin-top:14px;font-size:11.5px;color:var(--muted);text-align:center}

/* plan pickers (step 2) — selectable tiles. gap clears the -11px "Most popular" /
   "Most powerful" ribbons that overhang each card's top edge. */
.picks{display:flex;flex-direction:column;gap:26px}
.pick{cursor:pointer;text-align:left;width:100%;background:none;font-family:inherit}
.pick .core{padding:16px 18px;display:flex;flex-direction:column;gap:8px}
.pick-row{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
.pick h3{font-family:var(--font-display);font-weight:800;font-size:17px;color:var(--bone)}
.pick .pprice{font-family:var(--font-mono);font-size:16px;color:var(--bone);font-variant-numeric:tabular-nums}
.pick .pprice small{font-size:10.5px;color:var(--muted)}
.pick .pwho{font-size:12px;color:var(--muted)}
.pick .pills{margin-top:2px}
.pick{transition:border-color .3s var(--ease), transform .3s var(--ease)}
.pick.sel{border-color:rgba(199,49,46,.55)}
.pick.sel .core{background:linear-gradient(180deg, rgba(199,49,46,.12), rgba(199,49,46,.02) 60%, rgba(255,255,255,.03))}
.pick .tick{
  width:22px;height:22px;border-radius:999px;flex-shrink:0;align-self:center;
  border:1.5px solid var(--hairline);display:flex;align-items:center;justify-content:center;
  color:transparent;font-size:12px;
}
.pick.sel .tick{background:var(--red);border-color:var(--red);color:#fff}
.pick-top{display:flex;gap:12px;align-items:flex-start;justify-content:space-between}

/* Selects share the input recipe. `.ga-select` (the app-configurator language picker) is
   named here rather than carrying its own copy: it used to declare a near-identical block
   at lower specificity, so `.field select` won font-size and it rendered a different size
   from the block it was authored to match. One recipe, one size, no drift. */
.field select,.ga-select{
  min-height:44px;padding:11px 40px 11px 14px;font-size:14.5px;font-family:var(--font-body);
  color:var(--bone);background:rgba(5,5,5,.4);
  border:1.5px solid var(--hairline);border-radius:var(--r-input);
  appearance:none;-webkit-appearance:none;
  /* the popup list is drawn by the OS, not by us — without a declared scheme it can come
     back light-on-white and the option rows are unreadable on this dark page */
  color-scheme:dark;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%239BA3AF' stroke-width='1.6' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 14px center;
  transition:border-color .2s var(--ease), box-shadow .2s var(--ease);
}
.field select:focus,.ga-select:focus{outline:none;border-color:var(--red);box-shadow:0 0 0 3px rgba(199,49,46,.22)}
.field select:invalid{color:var(--muted)}
.field select option,.ga-select option{
  font-family:var(--font-body);font-size:14px;background:#0B0E13;color:var(--bone);
}
.field select option:disabled,.ga-select option:disabled{color:var(--muted)}

/* phone: flag + dial-code dropdown + number (structured collection) */
.phone-row{display:grid;grid-template-columns:28px 150px 1fr;gap:10px;align-items:center}
@media (max-width: 560px){ .phone-row{grid-template-columns:26px 118px 1fr;gap:8px} }
.dial-flag{width:26px;height:18px;border-radius:3px;overflow:hidden;display:block;box-shadow:inset 0 0 0 1px rgba(255,255,255,.16)}
.dial-flag svg{display:block;width:100%;height:100%}

/* shared optional-marker */
.opt{color:var(--muted);font-weight:400}

/* logo upload (branding) */
.logo-up{display:flex;align-items:center;gap:14px}
.logo-prev{width:58px;height:58px;border-radius:12px;flex-shrink:0;display:grid;place-items:center;overflow:hidden;
  background:rgba(5,5,5,.4);border:1.5px solid var(--hairline);color:var(--muted);font-size:22px}
.logo-prev img{width:100%;height:100%;object-fit:cover}
.logo-side{display:flex;flex-direction:column;gap:6px;min-width:0}
.logo-btns{display:flex;align-items:center;gap:12px}
.btn-sm{font-size:12.5px;padding:8px 14px}
.logo-clear{background:none;border:none;padding:0;font:inherit;font-size:12px;font-weight:600;color:var(--red-soft);cursor:pointer}
.logo-clear:hover{color:var(--bone)}

/* branch location: online-only toggle */
.remote-check{display:flex;align-items:center;gap:9px;cursor:pointer;font-size:13px;font-weight:500;color:var(--muted);margin:2px 0}
.remote-check input{width:16px;height:16px;accent-color:var(--red);flex-shrink:0;cursor:pointer}
.field input[disabled]{opacity:.5;cursor:not-allowed}

/* plan cards: emphasis badges (Most popular = brand red, Most powerful = purple) */
.pick{position:relative;overflow:visible}
.plan-badge{position:absolute;top:-11px;left:16px;z-index:2;display:inline-flex;align-items:center;gap:5px;
  padding:4px 11px;border-radius:999px;font-size:10.5px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;line-height:1;white-space:nowrap}
.plan-badge i{font-size:12px}
.pop-badge{color:#fff;background:var(--red);box-shadow:0 6px 16px -6px rgba(199,49,46,.7)}
.power-badge{color:#fff;background:#7C6BD0;box-shadow:0 6px 16px -6px rgba(124,107,208,.7)}
/* resting emphasis (before selection) */
.pick.pop{border-color:rgba(199,49,46,.42)}
.pick.pop .core{background:linear-gradient(180deg, rgba(199,49,46,.06), rgba(255,255,255,.02))}
.pick.power{border-color:rgba(139,123,216,.42)}
.pick.power .core{background:linear-gradient(180deg, rgba(139,123,216,.07), rgba(255,255,255,.02))}
/* selection still wins, keeping each card's own hue */
.pick.power.sel{border-color:rgba(139,123,216,.7)}
.pick.power.sel .core{background:linear-gradient(180deg, rgba(139,123,216,.16), rgba(139,123,216,.03) 60%, rgba(255,255,255,.03))}
.pick.power.sel .tick{background:#7C6BD0;border-color:#7C6BD0}

/* tag input: type + Enter -> removable chips (forecast categories) */
.tagbox{
  display:flex;flex-wrap:wrap;gap:8px;align-items:center;
  min-height:44px;padding:8px 10px;
  background:rgba(5,5,5,.4);
  border:1.5px solid var(--hairline);border-radius:var(--r-input);
  transition:border-color .2s var(--ease), box-shadow .2s var(--ease);
}
.tagbox:focus-within{border-color:var(--red);box-shadow:0 0 0 3px rgba(199,49,46,.22)}
.tagbox input{
  flex:1;min-width:150px;min-height:28px;
  border:none;background:none;outline:none;
  color:var(--bone);font-family:inherit;font-size:14px;
}
.tag{
  display:inline-flex;align-items:center;gap:7px;
  padding:5px 7px 5px 12px;border-radius:999px;
  font-size:12.5px;font-weight:600;
  color:var(--blue-pro-soft);background:rgba(139,123,216,.12);
  border:1px solid rgba(139,123,216,.38);
}
.tag button{
  width:18px;height:18px;border-radius:999px;flex-shrink:0;
  border:none;padding:0;display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.12);color:inherit;font-size:12px;line-height:1;
  cursor:pointer;transition:background .2s var(--ease);
}
.tag button:hover{background:rgba(255,255,255,.24)}
.frow2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media (max-width: 560px){ .frow2{grid-template-columns:1fr} }

/* review (step 4) */
.rev{border:1px solid var(--hairline);border-radius:12px;padding:14px 16px;margin-top:12px}
.rev-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
.rev-head b{font-family:var(--font-display);font-size:14px;color:var(--bone)}
.rev-edit{background:none;border:none;padding:4px 0;font-size:12px;font-weight:700;color:var(--red-soft);cursor:pointer}
.rev-edit:hover{color:var(--bone)}
.rev dl{display:grid;grid-template-columns:auto 1fr;gap:4px 16px;font-size:12.5px}
.rev dt{color:var(--muted)}
.rev dd{color:var(--bone);text-align:right}
.rev .flags{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.rev-feat{list-style:none;margin-top:10px;display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--muted)}
.rev-feat li::before{content:"";display:inline-block;width:12px;height:2px;background:var(--red);border-radius:2px;margin-right:9px;vertical-align:middle;opacity:.85}

/* success pane */
.done-icon{
  width:56px;height:56px;border-radius:999px;margin:6px auto 18px;
  display:flex;align-items:center;justify-content:center;font-size:26px;
  background:rgba(63,185,132,.12);border:1px solid rgba(63,185,132,.4);color:var(--green-soft);
}
.wiz-done{text-align:center}
.wiz-done h2{font-family:var(--font-display);font-weight:800;font-size:24px;color:var(--bone)}
.wiz-done p{font-size:13.5px;color:var(--muted);margin:10px auto 0;max-width:40ch}
.wiz-done .btn{margin-top:22px}

/* ════════════════════════════════════════════════════════════════
   FOOTER — quiet, compact (ref board 06); no link farm
════════════════════════════════════════════════════════════════ */
.footer{border-top:1px solid var(--hairline);background:var(--obsidian);position:relative;z-index:1}
.frow{
  display:flex;justify-content:space-between;align-items:flex-start;gap:44px;
  padding:34px 0 40px;flex-wrap:wrap;
}
.fbrand{display:flex;flex-direction:column;gap:12px;max-width:30ch}
.fline{display:flex;align-items:center;gap:11px}
.fbrand p{font-size:12.5px;color:var(--muted);line-height:1.6}
.fcols{display:flex;gap:64px;flex-wrap:wrap}
.fcol{display:flex;flex-direction:column;gap:10px;font-size:13.5px;color:var(--muted)}
.fcol b{font-family:var(--font-display);font-weight:700;font-size:13px;color:var(--bone);margin-bottom:4px}
.fcol a{padding:2px 0;transition:color .25s var(--ease)}
.fcol a:hover{color:var(--bone)}
.fmeta{
  border-top:1px solid var(--hairline);
  display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap;
  padding:16px 0 40px;font-size:12px;color:var(--muted);
}
.flang{font-family:var(--font-mono);font-size:11.5px}
.flang b{color:var(--bone);font-weight:500}

/* ── Legal pages (privacy.html / terms.html) ─────────────────── */
.legal{max-width:72ch;margin:0 auto;padding:120px 0 90px}
.legal h1{font-family:var(--font-display);font-weight:800;font-size:clamp(30px,3.4vw,44px);letter-spacing:-.03em;color:var(--bone)}
.legal .updated{font-family:var(--font-mono);font-size:11.5px;color:var(--muted);margin:10px 0 34px}
.legal h2{font-family:var(--font-display);font-weight:700;font-size:19px;color:var(--bone);margin:34px 0 10px}
.legal p,.legal li{font-size:14.5px;color:var(--muted);line-height:1.7}
.legal ul{padding-left:20px;margin-top:8px}
.legal .back{display:inline-flex;align-items:center;gap:8px;margin-bottom:34px;font-size:13.5px;font-weight:600;color:var(--red-soft)}
.legal .back:hover{color:var(--bone)}
.legal a{color:var(--red-soft)}
.legal a:hover{color:var(--bone)}
.legal ol{padding-left:20px;margin-top:8px}
.legal ol li{margin-bottom:6px}
.legal .notice{
  border:1px solid rgba(199,49,46,.4);background:rgba(199,49,46,.08);
  border-radius:var(--r-input);padding:14px 16px;margin:0 0 30px;
  font-size:13px;color:var(--bone);line-height:1.6;
}
.legal .pending{
  border:1px solid rgba(139,123,216,.4);background:rgba(139,123,216,.08);
  border-radius:var(--r-input);padding:12px 16px;margin:10px 0 0;
  font-size:12.5px;color:var(--bone);
}

/* About page: three quiet fact cards inside the reading column */
.about-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:28px 0 6px}
.about-cards .core{padding:18px}
.about-cards h3{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--bone);margin-bottom:6px}
.about-cards p{font-size:12.5px;margin:0}
@media (max-width: 767px){ .about-cards{grid-template-columns:1fr} }

@media (max-width: 767px){
  .bento{grid-template-columns:1fr;grid-auto-rows:auto}
  .cell,.cell.w6{grid-column:span 1}
  .cell.h2{grid-row:span 1}
  .cell .core{min-height:120px}
  .cell-chart{height:130px}
  .how{grid-template-columns:1fr;gap:26px}
  .how-item{border-left:none;border-top:1px solid var(--hairline);padding:20px 4px 0}

  /* workforce collapse (ref m2): featured first, lift removed, full-width */
  .emp-cards{grid-template-columns:1fr;gap:16px}
  .emp.spot{transform:none;order:-1}
  .emp .core{min-height:0}

  /* Pricing collapse: summaries + details disclosure.
     The recommended tier used to be pulled to the front with order:-1. On a wide
     screen the three tiers are read side by side, so leading with the recommended
     one is a fair emphasis. Stacked on a phone they are read as a SEQUENCE, and
     hoisting Business Owner put the cheapest plan second — the ladder went 16.930,
     then 9.390, then up again, which reads as disorder rather than emphasis and
     hides the entry price from someone scanning for it.
     Price order now stands: Solo Starter, Business Owner, OmniMatrix. The
     recommended tier keeps its border, badge and accent, which is emphasis that
     does not have to fight the sequence. */
  .price-head{align-items:flex-start;flex-direction:column}
  .tiers{grid-template-columns:1fr;gap:16px}
  .tier .core{min-height:0}
  .who{min-height:0}
  .tier .btn{margin-top:12px}

  .form-core{padding:20px}
}

/* ── Reduced motion: everything static (DESIGN.md §6) ──────────── */
@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto}
  .rise,.reveal{opacity:1;transform:none;transition:none}
  .hv-bars i,.hero.in .hv-bars i{transform:scaleY(1);transition:none}
  .menu,.menu a,.menu .menu-cta,.burger i,.btn,.btn-red .chip{transition:none}
  .form-submit.loading::after{animation:none}
  .cell,.emp,.tier{transition:none}
  .plan-details{transition:none}
  .plan-toggle i{transition:none}
  .wiz-pane.on{animation:none}
  .sdot i,.pick{transition:none}
  /* the panel is placed by `left`, not by a transform, so cancelling the animation is enough */
  .nav-drop-panel{animation:none;transform:none}
  .nav-drop-btn i{transition:none}
}

/* ════════════════════════════════════════════════════════════════
   MOBILE COLLAPSE (< 768px) — per ref board m1
════════════════════════════════════════════════════════════════ */
@media (max-width: 767px){
  .nav{padding-top:0}
  .nav-pill{
    width:100%;border-radius:0;border-left:none;border-right:none;border-top:none;
    padding:10px 16px;
  }
  .nav-links,.nav-signin{display:none}
  .burger{display:block}

  /* ── Reading order on a phone ──────────────────────────────────────────────
     The two calls to action sat directly under the sub-heading, so the page asked
     for a decision before it had shown anything. Stacked, the product shot is the
     argument and the buttons are the answer to it, so the buttons move below it.

     They cannot simply be re-ordered: .hero-ctas lives inside .hero-copy while the
     shot is .hero-copy's SIBLING, and `order` only sorts among siblings. So
     .hero-copy stands down as a box and lets its children become items of .hero
     directly, which puts all six on one axis where order can sort them.

     `gap` has to go with it: the grid gap would then apply between the eyebrow, the
     headline and the sub, which are spaced by their own margins. Each item carries
     the spacing it needs instead. */
  .hero-copy{display:contents}
  .hero .eyebrow{order:1}
  .hero .display{order:2}
  .hero .sub{order:3}
  /* THE BUTTONS COME BACK UP, and this reverses a deliberate earlier decision, so
     here is why. The argument for putting them under the product shot — show the
     thing, then ask — holds on a desktop where the whole hero is on screen at once.
     Measured on a 375x812 phone it did not: the shot is 377px and the proof list was
     125px, which put "Start free" at y=928 on an 812px screen. The primary call to
     action was BELOW THE FOLD on every phone, and the owner's report was exactly
     that — having to scroll to reach what they came for.
     Above the fold beats rhetorically better ordering. The shot still argues; it
     argues to someone who has already been shown the way in. */
  .hero-ctas{order:4;margin-top:4px}
  .hero-proof{order:5}
  .hero-visual{order:6;margin-top:24px}

  .hero{
    grid-template-columns:1fr;gap:0;align-items:start;
    /* The bar is fixed and 118px tall once it wraps to two rows on a phone, but this
       padding was 96px — so the eyebrow's top 16px sat BEHIND the bar and the section
       opened on a clipped line. --nav-h is measured in site.js (the bar's height moves
       with width and with webfont loading); the 118px fallback is the two-row height,
       so the first line is never clipped even before JS runs. */
    padding-top:calc(var(--nav-h,118px) + 26px);padding-bottom:56px;min-height:100dvh;
  }
  .hero-copy h1{font-size:clamp(34px,9.4vw,44px)}
  .hero-copy .sub{font-size:14.5px;margin:16px 0 24px}
  .hero-ctas{flex-direction:column;align-items:stretch;gap:12px}
  /* Stacked full-width, the two buttons measured 58px and 47px: identical padding, but
     the red one carries the arrow chip and the ghost carries only text, so their
     content heights differed by 11px. Two primary actions of visibly different sizes,
     one directly above the other, is the kind of misalignment you feel before you can
     name it. A shared floor settles both on the same line. */
  .hero-ctas .btn{width:100%;justify-content:center;padding:0;min-height:56px}

  /* .hero-proof is laid out further down, in the max-width:48rem block that sits
     AFTER its base rule — a copy here would be overridden by that base and do nothing. */

  .hero-visual{height:auto}
  .hv-back{display:none}                 /* back layer removed on mobile */
  /* The frame keeps the desktop lockup's offsets (inset:auto 0 24px 36px), which on a
     phone pushed the "Your business today" card 36px to the right and 20px past the
     screen edge — the card was cropped down its right side. Clear the offsets so it
     sits centred in the column, squared with the headline above it. Written out per
     side because `position` alone does not neutralise an inherited inset. */
  .hv-frame{position:relative;height:auto;
    inset:auto;left:auto;right:auto;top:auto;bottom:auto;
    width:100%;margin-inline:auto}
  .hv-kpis{grid-template-columns:1fr 1fr}
  .hv-kpi:nth-child(3){display:none}     /* two KPIs at phone width */
  .hv-chart{min-height:150px}
  .hv-bars{flex:none;height:96px}        /* definite track so % bar heights resolve */
}

/* tablet: keep the split but tighten */
@media (min-width: 768px) and (max-width: 1023px){
  .hero{grid-template-columns:1fr 1fr;gap:36px}
  .hero-visual{height:440px}
  .hv-frame{inset:auto 0 20px 20px;height:380px}
}

/* ══════════════════════════════════════════════════════════════════
   GET AN APP — Auraz App Studio (marketing intake + live estimate)
   Reuses the token system; owns only the .ga-* namespace.
   ══════════════════════════════════════════════════════════════════ */
.ga-intro{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:26px}
.ga-ip{border:1px solid var(--hairline);border-radius:14px;background:var(--panel-2);padding:16px 18px;display:flex;flex-direction:column;gap:6px}
.ga-ip i{font-size:22px;color:var(--red-soft)}
.ga-ip b{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--bone)}
.ga-ip span{font-size:12.5px;color:var(--muted);line-height:1.5}
.ga-grid{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:26px;align-items:start}
.ga-config{display:flex;flex-direction:column;gap:14px;margin:0}
.ga-step{border:1px solid var(--hairline);border-radius:var(--r-card);background:var(--panel-2);padding:20px 22px}
.ga-step legend{font-family:var(--font-display);font-weight:800;font-size:16px;color:var(--bone);padding:0;display:flex;align-items:center;gap:10px}
.ga-hint{font-family:var(--font-body);font-weight:500;font-size:12.5px;color:var(--muted)}
.ga-n{width:22px;height:22px;border-radius:50%;flex:none;display:inline-flex;align-items:center;justify-content:center;
  font-family:var(--font-mono);font-size:11px;font-weight:500;color:var(--red-soft);
  background:rgba(199,49,46,.12);border:1px solid rgba(199,49,46,.4)}

/* platform cards */
/* ── Step 1: what are you building? ─────────────────────────────────────────
   Deliberately the same card as .ga-plat rather than a new visual idea: these are
   two consecutive steps asking the same shape of question, and giving them two
   different looks would imply a difference that is not there. Six across at three
   columns, so it is two tidy rows rather than a ragged five-plus-one. */
.ga-kindpick{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:14px}
.ga-kind{text-align:left;background:rgba(5,5,5,.35);border:1.5px solid var(--hairline);border-radius:14px;padding:14px;
  display:flex;flex-direction:column;gap:6px;min-height:126px;transition:border-color .2s var(--ease), background .2s var(--ease)}
.ga-kind:hover{border-color:rgba(255,255,255,.28)}
.ga-kind.on{border-color:var(--red);background:linear-gradient(180deg,rgba(199,49,46,.12),rgba(199,49,46,.03))}
.ga-kind i{font-size:20px;color:var(--red-soft)}
.ga-kind b{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--bone)}
.ga-kind small{color:var(--muted);font-size:11.5px;line-height:1.4}
.ga-kind .ga-kind-n{margin-top:auto;font-family:var(--font-mono);font-size:12px;color:var(--red-soft);font-weight:500}
.ga-kind-lead{margin-top:10px}
/* Said out loud, in the accent, because a basket losing rows silently is worse
   than the rows being wrong in the first place. */
.ga-kind-dropped{margin-top:10px;font-size:12.5px;color:var(--red-soft);font-family:var(--font-mono)}
/* The standing note on a games order. Bordered rather than muted: it is the one
   paragraph on the page whose job is to stop somebody buying the wrong thing. */
.ga-kind-note{margin-top:14px;border:1.5px solid var(--hairline);border-left:3px solid var(--red);
  border-radius:12px;padding:14px 16px;background:rgba(5,5,5,.35)}
.ga-kind-note b{display:block;font-family:var(--font-display);font-size:14px;color:var(--bone);margin-bottom:6px}
.ga-kind-note p{color:var(--muted);font-size:12.5px;line-height:1.65;margin:0 0 8px}
.ga-kind-note p:last-child{margin-bottom:0}
.ga-kind-note em{color:var(--bone);font-style:italic}
/* The escape hatch under the filtered list. Quiet on purpose — it exists for the
   visitor whose business straddles two kinds, not as a second way to browse. */
.ga-showall{display:flex;align-items:center;gap:9px;margin-top:12px;cursor:pointer;
  font-size:12.5px;color:var(--muted)}
.ga-showall input{width:15px;height:15px;accent-color:var(--red);cursor:pointer}
@media (max-width:860px){.ga-kindpick{grid-template-columns:repeat(2,1fr)}}
@media (max-width:520px){.ga-kindpick{grid-template-columns:1fr}}
.ga-plats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:16px}
.ga-plat{text-align:left;background:rgba(5,5,5,.35);border:1.5px solid var(--hairline);border-radius:14px;padding:14px;
  display:flex;flex-direction:column;gap:6px;min-height:118px;transition:border-color .2s var(--ease), background .2s var(--ease)}
.ga-plat:hover{border-color:rgba(255,255,255,.28)}
.ga-plat.on{border-color:var(--red);background:linear-gradient(180deg,rgba(199,49,46,.12),rgba(199,49,46,.03))}
.ga-plat i{font-size:20px;color:var(--red-soft)}
.ga-plat b{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--bone)}
.ga-plat small{color:var(--muted);font-size:11.5px;line-height:1.4}
.ga-plat .ga-plat-from{margin-top:auto;font-family:var(--font-mono);font-size:12px;color:var(--red-soft);font-weight:500}
.ga-plat .ga-plat-eta{font-size:11px;color:var(--muted);margin-top:3px}
.ga-q-eta{margin-top:10px;padding-top:10px;border-top:1px dashed var(--hairline);font-size:12.5px;color:var(--muted)}
.ga-q-eta b{color:var(--bone);font-weight:600}
.ga-eta-rush{font-family:var(--font-mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--red-soft);border:1px solid rgba(199,49,46,.4);border-radius:6px;padding:1px 6px;margin-left:6px}
.ga-os{display:flex;flex-wrap:wrap;align-items:center;gap:16px;margin-top:14px;padding-top:14px;border-top:1px dashed var(--hairline)}
.ga-os[hidden]{display:none}
.ga-os-lbl{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.ga-check{display:inline-flex;align-items:center;gap:8px;font-size:13.5px;color:var(--bone);cursor:pointer}
.ga-check i{color:var(--muted);font-size:16px}
.ga-check input{width:17px;height:17px;accent-color:var(--red);cursor:pointer}

/* languages: pick from a world list, remove any chip (item 2d) */
.ga-langfield{gap:14px}
.ga-lang{
  display:inline-flex;align-items:center;gap:8px;
  padding:6px 7px 6px 14px;border-radius:999px;
  font-size:13px;font-weight:600;color:#fff;
  background:var(--red);border:1.5px solid var(--red);
}
.ga-lang-x{
  width:20px;height:20px;border-radius:999px;flex:none;border:none;padding:0;
  display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.22);color:inherit;font-size:13px;line-height:1;
  transition:background .2s var(--ease);
}
.ga-lang-x:hover{background:rgba(255,255,255,.42)}
.ga-langs-empty{font-size:12.5px;color:var(--muted)}
.ga-langadd{display:flex;flex-direction:column;gap:7px;max-width:290px}
/* the control recipe lives with the other selects, next to `.field select` */
.field.bad .ga-select{border-color:rgba(224,112,105,.75)}

/* chips */
.ga-chips{display:flex;flex-wrap:wrap;gap:9px;margin-top:16px}
/* must follow .ga-chips: the language row sits in a .field that already spaces it */
.ga-langs{margin-top:0}
.ga-feat-other{margin-top:10px}
.ga-hardship{margin-top:14px}
.ga-chip{padding:8px 15px;border-radius:999px;border:1.5px solid var(--hairline);background:transparent;
  color:var(--bone);font-size:13px;font-weight:600;transition:border-color .2s var(--ease), background .2s var(--ease)}
.ga-chip:hover{border-color:rgba(255,255,255,.28)}
.ga-chip.on{background:var(--red);border-color:var(--red);color:#fff}

/* Every context gives .core its own padding — .tier 26, .emp 24, .cell 20 — because
   the base .core has none. The purpose card was added without one, so the mission ran
   flush to all four edges of the panel behind it and read as text with a stray border
   round it rather than text in a card. */
.pur .core{padding:22px 26px}
.pur .core p{margin:0;font-size:var(--fs-body-lg,15px);line-height:1.7;color:var(--bone)}

/* "Show 5 more" — the bar under a paged feature list. Full width so it reads as the
   end of the list rather than another row, and quiet enough that it never competes
   with the features above it. */
.ga-more{
  display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;
  width:100%;margin-top:10px;padding:14px 16px;
  border:1.5px dashed var(--hairline);border-radius:14px;background:rgba(5,5,5,.3);
  color:var(--bone);font-size:13.5px;font-weight:600;cursor:pointer;
  transition:border-color .2s var(--ease), background .2s var(--ease);
}
.ga-more:hover{border-color:rgba(255,255,255,.28);background:rgba(255,255,255,.04)}
.ga-more-n{color:var(--muted);font-weight:500;font-size:12.5px}

/* feature category filter — 19 features read as noise in one flat list (item 2a) */
.ga-featbar{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}
.ga-fcat{
  display:inline-flex;align-items:center;gap:7px;
  padding:8px 13px;border-radius:999px;
  border:1.5px solid var(--hairline);background:rgba(5,5,5,.3);
  color:var(--muted);font-size:12.5px;font-weight:600;
  transition:border-color .2s var(--ease), background .2s var(--ease), color .2s var(--ease);
}
.ga-fcat:hover{border-color:rgba(255,255,255,.28);color:var(--bone)}
.ga-fcat.on{border-color:var(--red);background:linear-gradient(180deg,rgba(199,49,46,.14),rgba(199,49,46,.04));color:var(--bone)}
.ga-fcat-n{font-family:var(--font-mono);font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.ga-fcat.on .ga-fcat-n{color:var(--red-soft)}
/* a selection outside the visible tab still costs money — this badge is how the visitor knows */
.ga-fcat-sel{
  font-family:var(--font-mono);font-size:10px;font-weight:500;letter-spacing:.03em;
  color:#fff;background:var(--red);border-radius:999px;padding:2px 7px;white-space:nowrap;
}
.ga-feats-note{
  display:flex;gap:8px;align-items:flex-start;
  padding:9px 12px;border-radius:10px;
  background:rgba(255,255,255,.03);border:1px dashed var(--hairline);
  font-size:12px;color:var(--muted);line-height:1.45;
}
.ga-feats-note i{color:var(--red-soft);font-size:14px;flex:none;margin-top:1px}

/* included-free selling point — deliberately copy, never a priced row (item 1g) */
.ga-included{
  display:flex;gap:10px;align-items:flex-start;margin-top:12px;
  padding:12px 14px;border-radius:12px;
  background:rgba(255,255,255,.03);border:1px solid var(--hairline);
  font-size:12.5px;color:var(--muted);line-height:1.5;
}
.ga-included i{color:var(--bone);font-size:17px;flex:none;margin-top:1px}
.ga-included b{color:var(--bone);font-weight:700}

/* feature list */
.ga-feats{display:flex;flex-direction:column;gap:8px;margin-top:16px}
.ga-feat{display:flex;align-items:center;gap:12px;background:rgba(5,5,5,.3);border:1.5px solid var(--hairline);
  border-radius:12px;padding:11px 14px;cursor:pointer;transition:border-color .2s var(--ease), background .2s var(--ease)}
.ga-feat:hover{border-color:rgba(255,255,255,.24)}
.ga-feat.on{border-color:rgba(199,49,46,.5);background:linear-gradient(180deg,rgba(199,49,46,.07),transparent)}
.ga-feat.locked{opacity:.85;cursor:default}
.ga-feat .ga-box{width:20px;height:20px;border-radius:6px;flex:none;border:1.5px solid var(--hairline);
  display:grid;place-items:center;color:#fff;font-size:12px;transition:background .2s var(--ease), border-color .2s var(--ease)}
.ga-feat.on .ga-box{background:var(--red);border-color:var(--red)}
.ga-feat.locked .ga-box{background:var(--green);border-color:var(--green)}
.ga-feat .ga-ftext{flex:1;min-width:0}
.ga-feat .ga-ftext b{display:block;font-size:14px;color:var(--bone);font-weight:600}
.ga-feat .ga-ftext span{font-size:12px;color:var(--muted)}
.ga-feat .ga-price{font-family:var(--font-mono);font-size:12.5px;font-weight:500;color:var(--red-soft);white-space:nowrap}
.ga-feat.locked .ga-price{color:var(--green-soft)}

/* design / timeline segmented */
.ga-opts{display:flex;flex-direction:column;gap:18px;margin-top:16px}
.ga-optgroup{display:flex;flex-direction:column;gap:9px}
.ga-sublabel{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
/* the language picker's sub-label is a <label> inside a .field, and `.field label` (0,1,1)
   outranked `.ga-sublabel` (0,1,0) — it came out 13px bold bone while every other sub-label
   in the configurator is 10.5px normal muted. Re-assert the token at matching weight. */
.field .ga-sublabel{font-size:10.5px;font-weight:400;color:var(--muted)}
.ga-optrow{display:flex;flex-wrap:wrap;gap:8px}
.ga-opt{flex:1;min-width:120px;text-align:center;padding:11px 12px;border-radius:12px;border:1.5px solid var(--hairline);
  background:rgba(5,5,5,.3);color:var(--bone);font-size:13.5px;font-weight:600;line-height:1.3;
  transition:border-color .2s var(--ease), background .2s var(--ease)}
.ga-opt small{display:block;font-family:var(--font-mono);font-size:10.5px;font-weight:400;color:var(--muted);margin-top:2px}
.ga-opt:hover{border-color:rgba(255,255,255,.28)}
.ga-opt.on{border-color:var(--red);background:linear-gradient(180deg,rgba(199,49,46,.12),rgba(199,49,46,.03))}
.ga-opt.on small{color:var(--red-soft)}

/* Design is the only choice in this step that costs real money AND real time, so both
   options carry their explanation permanently instead of hiding it behind a click — the
   difference is readable before either is chosen, and the selected one's copy brightens. */
.ga-optrow-rich{gap:10px}
.ga-opt-rich{
  flex:1 1 250px;min-width:250px;text-align:left;
  display:flex;flex-direction:column;gap:8px;padding:14px 15px;
}
.ga-opt-rich .ga-opt-t{display:block;font-size:14px;font-weight:700;color:var(--bone)}
.ga-opt-rich .ga-opt-d{font-size:12.5px;font-weight:400;line-height:1.5;color:var(--muted)}
.ga-opt-rich.on .ga-opt-d{color:var(--bone)}

/* detail fields */
.ga-fields{display:grid;grid-template-columns:1fr 1fr;gap:0 16px;margin-top:4px}
.ga-field-wide{grid-column:1 / -1}
.ga-fields .field label small{font-weight:500;color:var(--muted)}
.ga-config textarea{min-height:44px;padding:11px 14px;font-size:14.5px;font-family:var(--font-body);color:var(--bone);
  background:rgba(5,5,5,.4);border:1.5px solid var(--hairline);border-radius:var(--r-input);resize:vertical;
  transition:border-color .2s var(--ease), box-shadow .2s var(--ease)}
.ga-config textarea:focus{outline:none;border-color:var(--red);box-shadow:0 0 0 3px rgba(199,49,46,.22)}

/* custom-design brief + contact preference */
.ga-custom{margin-top:18px;padding-top:18px;border-top:1px dashed var(--hairline);display:flex;flex-direction:column;gap:16px}
.ga-custom[hidden]{display:none}
.ga-custom-head{font-family:var(--font-display);font-weight:700;font-size:14px;color:var(--bone);display:flex;align-items:center;gap:8px}
.ga-custom-head i{color:var(--red-soft);font-size:17px}
.ga-custom .field{margin-top:0}
.ga-prefgroup{margin-top:18px}
.ga-prefgroup .ga-hint{text-transform:none;letter-spacing:0}

/* team accounts stepper */
.ga-team-note{font-size:12.5px;color:var(--muted);line-height:1.55;margin-top:16px;max-width:62ch}
.ga-stepper{display:inline-flex;align-items:center;margin-top:16px;border:1.5px solid var(--hairline);border-radius:12px;overflow:hidden;background:rgba(5,5,5,.3)}
.ga-step-btn{width:46px;height:46px;background:transparent;border:none;color:var(--bone);font-size:22px;line-height:1;cursor:pointer;transition:background .2s var(--ease)}
.ga-step-btn:hover{background:rgba(199,49,46,.14)}
.ga-step-val{min-width:60px;text-align:center;font-family:var(--font-display);font-weight:800;font-size:19px;color:var(--bone);font-variant-numeric:tabular-nums;border-left:1.5px solid var(--hairline);border-right:1.5px solid var(--hairline);align-self:stretch;display:flex;align-items:center;justify-content:center}

/* student discount toggle */
.ga-student{display:flex;align-items:center;gap:12px;margin-top:16px;padding:13px 15px;border-radius:12px;
  border:1.5px solid var(--hairline);background:rgba(5,5,5,.3);cursor:pointer;transition:border-color .2s var(--ease), background .2s var(--ease)}
.ga-student:hover{border-color:rgba(255,255,255,.24)}
.ga-student.on{border-color:var(--red);background:linear-gradient(180deg,rgba(199,49,46,.1),transparent)}
.ga-student input{width:19px;height:19px;accent-color:var(--red);cursor:pointer;flex:none}
.ga-student-txt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.ga-student-txt b{font-size:14px;color:var(--bone)}
.ga-student-txt small{font-size:12px;color:var(--muted);line-height:1.4}
.ga-student-tag{font-family:var(--font-mono);font-size:13px;font-weight:500;color:var(--red-soft);white-space:nowrap;flex:none}
.ga-proof-upload{display:flex;align-items:center;gap:12px;margin-top:10px;flex-wrap:wrap}
.ga-upload-btn{display:inline-flex;align-items:center;gap:7px;padding:9px 15px;border-radius:10px;cursor:pointer;
  border:1.5px solid var(--hairline);background:rgba(255,255,255,.04);color:var(--bone);font-size:13px;font-weight:600;
  transition:border-color .2s var(--ease), background .2s var(--ease)}
.ga-upload-btn:hover{border-color:rgba(255,255,255,.28)}
.ga-upload-btn i{font-size:16px;color:var(--red-soft)}
.ga-proof-name{font-size:12px;color:var(--muted)}
.ga-proof-name.has{color:var(--green-soft)}

/* what we can build */
.ga-kinds{border:1px solid var(--hairline);border-radius:var(--r-card);background:var(--panel-2);padding:22px 24px;margin-bottom:26px}
.ga-kinds-lead{margin-bottom:14px}
.ga-kinds-lead b{font-family:var(--font-display);font-weight:800;font-size:17px;color:var(--bone);display:block}
.ga-kinds-lead p{font-size:13.5px;color:var(--muted);margin-top:4px;max-width:64ch}
.ga-kinds-tags{display:flex;flex-wrap:wrap;gap:8px}
.ga-kinds-tags span{font-size:12.5px;color:var(--bone);padding:7px 13px;border-radius:999px;
  border:1px solid var(--hairline);background:rgba(255,255,255,.03)}
.ga-tag-no{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;padding:7px 13px;border-radius:999px;
  color:var(--red-soft);border:1px solid rgba(199,49,46,.4);background:rgba(199,49,46,.06)}
.ga-tag-no i{font-size:14px}
.ga-kinds-no{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:14px;padding-top:14px;border-top:1px dashed var(--hairline)}
.ga-kinds-no-lbl{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-right:2px}

/* sticky quote */
.ga-quote{position:sticky;top:96px}
.ga-quote-core{padding:22px 24px;display:flex;flex-direction:column;gap:4px}
.ga-q-eyebrow{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.ga-q-plat{font-family:var(--font-display);font-weight:700;font-size:16px;color:var(--bone);margin-top:2px}
.ga-q-build{display:flex;flex-direction:column;margin-top:12px}
.ga-q-build b{font-family:var(--font-display);font-weight:800;font-size:34px;letter-spacing:-.02em;color:var(--bone);font-variant-numeric:tabular-nums}
.ga-q-build small,.ga-q-care small{font-size:11.5px;color:var(--muted)}
.ga-q-disc{font-family:var(--font-mono);font-size:12px;color:var(--green-soft);margin-top:5px}
.ga-q-disc[hidden]{display:none}
.ga-q-disc s{color:var(--muted);opacity:.85;margin-left:4px}
.ga-q-care{display:flex;flex-direction:column;margin-top:10px}
.ga-q-care b{font-family:var(--font-display);font-weight:700;font-size:17px;color:var(--red-soft);font-variant-numeric:tabular-nums}
/* declined: the monthly line must stop looking like money owed (item 2b) */
.ga-q-care.off b{color:var(--muted)}
.ga-carechk{
  display:flex;gap:10px;align-items:flex-start;margin-top:10px;
  padding:11px 13px;border-radius:11px;cursor:pointer;
  background:rgba(255,255,255,.03);border:1px solid var(--hairline);
  transition:border-color .2s var(--ease), background .2s var(--ease);
}
.ga-carechk.on{border-color:rgba(199,49,46,.45);background:rgba(199,49,46,.07)}
.ga-carechk input{margin-top:2px;width:17px;height:17px;flex:none;accent-color:var(--red);cursor:pointer}
.ga-carechk>span{display:flex;flex-direction:column;gap:3px;min-width:0}
.ga-carechk b{font-size:12.5px;color:var(--bone);font-weight:700}
.ga-carechk small{font-size:11px;color:var(--muted);line-height:1.45}
.ga-q-sum{list-style:none;margin:16px 0 4px;padding:16px 0 0;border-top:1px solid var(--hairline);display:flex;flex-direction:column;gap:7px}
.ga-q-sum li{display:flex;gap:9px;align-items:flex-start;font-size:12.5px;color:var(--muted);line-height:1.45}
.ga-q-sum li i{color:var(--green);font-size:14px;margin-top:1px;flex:none}
.ga-q-host{display:flex;gap:9px;align-items:flex-start;margin-top:14px;padding:10px 12px;border-radius:10px;
  background:rgba(255,255,255,.03);border:1px solid var(--hairline);font-size:11.5px;color:var(--muted);line-height:1.5}
.ga-q-host i{color:var(--red-soft);font-size:15px;margin-top:1px;flex:none}
/* ── one-of-many choice (document language) ───────────────────────────
   Radios, not chips: the quote can only be written in one language, and a control that
   looks multi-select would invite a choice the document cannot honour. */
.ga-radios{display:grid;grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));gap:10px;margin-top:9px}
.ga-radio{display:grid;grid-template-columns:auto 1fr;gap:2px 10px;align-items:start;
  padding:12px 14px;min-height:44px;border:1px solid var(--hairline);border-radius:11px;
  background:rgba(255,255,255,.03);cursor:pointer;
  transition:border-color .18s ease,background .18s ease}
.ga-radio:hover{border-color:var(--red-soft)}
.ga-radio.on{border-color:var(--red);background:rgba(199,49,46,.10)}
.ga-radio input[type="radio"]{grid-row:1 / span 2;align-self:center;
  appearance:none;-webkit-appearance:none;margin:0;flex:none;cursor:pointer;
  width:18px;height:18px;border-radius:50%;
  border:1.5px solid rgba(255,255,255,.32);background:rgba(0,0,0,.25);position:relative;
  transition:border-color .15s ease}
.ga-radio input[type="radio"]:checked{border-color:var(--red)}
.ga-radio input[type="radio"]::after{content:"";position:absolute;inset:3px;border-radius:50%;
  background:var(--red);transform:scale(0);transition:transform .16s cubic-bezier(.2,.9,.3,1.2)}
.ga-radio input[type="radio"]:checked::after{transform:scale(1)}
.ga-radio input[type="radio"]:focus-visible{outline:2px solid var(--red);outline-offset:2px}
.ga-radio-t{font-size:14px;font-weight:600;color:#fff;line-height:1.3}
.ga-radio-s{font-size:11.5px;color:var(--muted);line-height:1.45}
/* The Arabic option's own label is Arabic, so it reads right-to-left regardless of the
   page language — plaintext keeps its punctuation correct without mirroring the card. */
.ga-radio [lang="ar"],.ga-radio-t:dir(rtl),.ga-radio-s:dir(rtl){unicode-bidi:plaintext}

/* ── checkboxes ──────────────────────────────────────────────────────
   These were native inputs tinted with accent-color. On a dark background the browser
   draws a solid red block with a cramped white tick that clips at small sizes — which
   is the effect that looked broken. Drawn here instead: a hairline box that fills on
   check, with a tick built from a rotated border so it scales cleanly and needs no
   image. One rule set, so every checkbox on the site matches. */
.remote-check input[type="checkbox"],
.ga-check input[type="checkbox"],
.ga-student input[type="checkbox"],
.ga-carechk input[type="checkbox"],
#auraz-consent-d .acd-row input[type="checkbox"]{
  appearance:none;-webkit-appearance:none;accent-color:auto;
  position:relative;flex:none;cursor:pointer;
  width:18px;height:18px;min-width:18px;border-radius:5px;
  border:1.5px solid rgba(255,255,255,.30);
  background:rgba(255,255,255,.04);
  transition:background .15s ease,border-color .15s ease,box-shadow .15s ease}
.remote-check input[type="checkbox"]:hover,
.ga-check input[type="checkbox"]:hover,
.ga-student input[type="checkbox"]:hover,
.ga-carechk input[type="checkbox"]:hover,
#auraz-consent-d .acd-row input[type="checkbox"]:hover{border-color:var(--red-soft)}
.remote-check input[type="checkbox"]:checked,
.ga-check input[type="checkbox"]:checked,
.ga-student input[type="checkbox"]:checked,
.ga-carechk input[type="checkbox"]:checked,
#auraz-consent-d .acd-row input[type="checkbox"]:checked{
  background:var(--red);border-color:var(--red)}
/* The tick: two borders on a rotated box. Positioned off-centre on purpose — a
   checkmark looks centred when it sits slightly high and left of true centre. */
.remote-check input[type="checkbox"]::after,
.ga-check input[type="checkbox"]::after,
.ga-student input[type="checkbox"]::after,
.ga-carechk input[type="checkbox"]::after,
#auraz-consent-d .acd-row input[type="checkbox"]::after{
  content:"";position:absolute;left:50%;top:47%;
  width:5px;height:9px;
  border:solid #fff;border-width:0 2px 2px 0;
  transform:translate(-50%,-55%) rotate(45deg) scale(.4);
  opacity:0;transition:opacity .12s ease,transform .15s cubic-bezier(.2,.9,.3,1.2)}
.remote-check input[type="checkbox"]:checked::after,
.ga-check input[type="checkbox"]:checked::after,
.ga-student input[type="checkbox"]:checked::after,
.ga-carechk input[type="checkbox"]:checked::after,
#auraz-consent-d .acd-row input[type="checkbox"]:checked::after{
  opacity:1;transform:translate(-50%,-55%) rotate(45deg) scale(1)}
.remote-check input[type="checkbox"]:focus-visible,
.ga-check input[type="checkbox"]:focus-visible,
.ga-student input[type="checkbox"]:focus-visible,
.ga-carechk input[type="checkbox"]:focus-visible,
#auraz-consent-d .acd-row input[type="checkbox"]:focus-visible{
  outline:2px solid var(--red);outline-offset:2px}
.remote-check input[type="checkbox"]:disabled,
#auraz-consent-d .acd-row input[type="checkbox"]:disabled{opacity:.5;cursor:default}
@media (prefers-reduced-motion:reduce){
  .ga-check input[type="checkbox"]::after,
  .ga-student input[type="checkbox"]::after,
  .ga-carechk input[type="checkbox"]::after,
  .ga-agree input[type="checkbox"]::after{transition:opacity .12s ease}
}

/* ── currency picker (js/currency.js) ────────────────────────────────
   Sits in the nav beside the language switch. Prices on this site are set in BHD, so
   that is the default; the picker exists so a visitor in Riyadh or Dubai does not have
   to convert a quote in their head before deciding it is too expensive. */
.cur-wrap{position:relative;display:inline-flex}
.cur-btn{display:inline-flex;align-items:center;gap:7px;height:34px;padding:0 10px;
  border:1px solid var(--hairline);border-radius:9px;background:rgba(255,255,255,.04);
  color:#fff;font:inherit;font-size:12.5px;font-weight:600;cursor:pointer;
  transition:border-color .18s ease,background .18s ease}
.cur-btn:hover{border-color:var(--red);background:rgba(255,255,255,.07)}
.cur-btn:focus-visible{outline:2px solid var(--red);outline-offset:2px}
.cur-flag{display:inline-flex;width:19px;height:13px;border-radius:2px;overflow:hidden;
  flex:none;box-shadow:0 0 0 1px rgba(0,0,0,.28)}
.cur-flag svg{width:100%;height:100%;display:block}
.cur-car{opacity:.55;transition:transform .18s ease}
.cur-btn[aria-expanded="true"] .cur-car{transform:rotate(180deg)}
.cur-menu{position:absolute;top:calc(100% + 8px);right:0;z-index:80;min-width:236px;
  padding:6px;border:1px solid var(--hairline);border-radius:13px;
  background:#141013;box-shadow:0 22px 50px rgba(0,0,0,.6);
  /* the nav is fixed, so cap the height rather than let it run off a short viewport */
  max-height:min(70vh,420px);overflow:auto;overscroll-behavior:contain}
.cur-head{padding:8px 10px 7px;font-size:10px;font-weight:700;letter-spacing:.09em;
  text-transform:uppercase;color:var(--red-soft)}
.cur-opt{display:flex;align-items:center;gap:10px;width:100%;padding:9px 10px;
  min-height:40px;border:0;border-radius:9px;background:none;color:#fff;font:inherit;
  font-size:13px;text-align:left;cursor:pointer}
.cur-opt:hover{background:rgba(255,255,255,.06)}
.cur-opt:focus-visible{outline:2px solid var(--red);outline-offset:-2px}
.cur-opt.on{background:rgba(199,49,46,.14)}
.cur-name{flex:1 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cur-abbr{font-family:var(--mono,ui-monospace,monospace);font-size:11px;color:var(--muted);
  letter-spacing:.04em}
.cur-opt.on .cur-abbr{color:var(--red-soft)}
@media (max-width:640px){
  .cur-btn .cur-code{display:none}     /* the flag alone is enough on a narrow bar */
  .cur-menu{right:auto;left:0}
}

/* discount code — arrives from a win-back email, or typed by hand */
.ga-promo{margin-top:14px;padding:12px 14px;border-radius:11px;
  background:rgba(255,255,255,.03);border:1px solid var(--hairline)}
.ga-promo-l{display:block;text-align:center;font-size:10.5px;font-weight:700;letter-spacing:.07em;
  text-transform:uppercase;color:var(--muted);margin-bottom:7px}
.ga-promo-row{display:flex;gap:8px;align-items:stretch}
.ga-promo-row input{flex:1 1 auto;min-width:0;
  /* 16px on mobile or iOS Safari zooms the whole page on focus */
  font-size:16px;font-family:var(--mono,ui-monospace,SFMono-Regular,Menlo,monospace);
  letter-spacing:.09em;text-transform:uppercase;
  padding:10px 12px;min-height:44px;border-radius:9px;
  background:rgba(0,0,0,.28);border:1px solid var(--hairline);color:#fff}
.ga-promo-row input::placeholder{letter-spacing:.06em;text-transform:none;color:rgba(255,255,255,.3)}
.ga-promo-row input:focus-visible{outline:2px solid var(--red);outline-offset:1px;border-color:var(--red)}
.ga-promo-btn{flex:none;min-height:44px;padding:0 16px;font-size:13px;white-space:nowrap}
.ga-promo-btn[disabled]{opacity:.55;cursor:default}
.ga-promo-msg{margin:8px 0 0;font-size:11.5px;line-height:1.5;color:var(--muted);min-height:1em;
  text-align:center}
/* same success tone the signup password rules already use — one green, not two */
.ga-promo-msg.ok{color:#7ea86b}
.ga-promo-msg.bad{color:var(--red-soft)}
@media (max-width:520px){
  .ga-promo-row{flex-wrap:wrap}
  .ga-promo-btn{width:100%}
}
/* 50 / 50 payment split */
.ga-q-pay{margin-top:14px;padding:12px 14px;border-radius:11px;background:rgba(255,255,255,.03);border:1px solid var(--hairline)}
.ga-q-pay-h{display:flex;align-items:center;gap:7px;font-size:10.5px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--muted)}
.ga-q-pay-h i{color:var(--red-soft);font-size:14px}
.ga-q-pay-split{display:flex;align-items:center;gap:8px;margin-top:9px}
.ga-q-pay-split>div{flex:1;text-align:center}
.ga-q-pay-split b{display:block;font-family:var(--font-display);font-weight:700;font-size:16px;color:var(--red-soft);font-variant-numeric:tabular-nums}
.ga-q-pay-split small{display:block;font-size:10px;color:var(--muted);margin-top:2px;line-height:1.3}
.ga-q-pay-x{flex:0 0 auto !important;color:var(--muted);font-weight:700;font-size:15px}
/* read-&-agree gate */
.ga-agree-wrap{margin-top:16px}
.ga-agree{display:flex;gap:11px;align-items:flex-start;padding:12px 14px;border-radius:11px;
  background:rgba(255,255,255,.03);border:1px solid var(--hairline);cursor:pointer;transition:border-color .15s,background .15s;margin:0}
.ga-agree:hover{border-color:color-mix(in srgb,var(--red-soft) 40%,var(--hairline))}
.ga-agree-wrap.on .ga-agree{border-color:color-mix(in srgb,var(--red-soft) 55%,transparent);background:color-mix(in srgb,var(--red-soft) 9%,transparent)}
.field.bad .ga-agree{border-color:#E07069}
/* The 17px native box this used to draw is gone — .ga-agree input[type=checkbox]
   below paints its own. Left as a cursor rule only, so a stray non-checkbox input
   inside the label still reads as clickable. */
.ga-agree input{cursor:pointer}
.ga-agree span{font-size:12px;color:var(--bone);line-height:1.5}
.ga-agree a{color:var(--red-soft);font-weight:600;text-decoration:underline}
.ga-agree-wrap .err{margin-top:6px}
.ga-submit{width:100%;justify-content:center;margin-top:18px;position:relative;overflow:hidden}
.ga-submit.loading{pointer-events:none;opacity:.88}
.ga-submit.loading::after{content:"";position:absolute;inset:0;
  background:linear-gradient(100deg, transparent 30%, rgba(255,255,255,.28), transparent 70%);
  transform:translateX(-100%);animation:sheen 1.1s var(--ease) infinite}
/* Notice text under the quote — centred so it reads as a message about the card
   rather than a stray paragraph hanging off its left edge. */
.ga-q-fine{margin-top:12px;font-size:11px;color:var(--muted);line-height:1.5;text-align:center}

/* success state */
.ga-done{text-align:center;padding:14px 6px}
.ga-done .ga-done-tick{width:56px;height:56px;border-radius:50%;background:var(--green);color:#04140d;display:grid;place-items:center;
  font-size:28px;margin:6px auto 14px;box-shadow:0 0 0 8px rgba(63,185,132,.14)}
.ga-done h3{font-family:var(--font-display);font-weight:800;font-size:22px;color:var(--bone);margin-bottom:8px}
.ga-done p{color:var(--muted);font-size:14px;max-width:44ch;margin:0 auto 6px}
.ga-done .ga-done-ref{font-family:var(--font-mono);font-size:13px;color:var(--red-soft);margin-top:4px}

/* responsive */
/* Running total (built by stickyTotal() in landing.js). Phone only: on a wide screen
   the quote is a sticky sidebar already sitting beside the questions, so a second
   copy of the same number would be noise. */
.ga-runtot{display:none}
@media (max-width: 900px){
  .ga-runtot{
    position:fixed;inset-inline:0;bottom:0;z-index:9985;
    display:flex;align-items:center;gap:10px;
    padding:10px clamp(14px,4vw,20px) calc(10px + env(safe-area-inset-bottom,0px));
    background:rgba(11,14,19,.94);border-top:1px solid var(--hairline);
    backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}
  .ga-runtot[hidden]{display:none}
  .ga-runtot-l{font-family:var(--font-mono);font-size:10px;letter-spacing:.14em;
    text-transform:uppercase;color:var(--muted)}
  .ga-runtot-v{font-family:var(--font-mono);font-size:15px;color:var(--bone);
    font-weight:500;margin-inline-end:auto}
  .ga-runtot-b{min-height:var(--tap,44px);padding:0 14px;border-radius:999px;
    border:1px solid var(--hairline);background:transparent;color:var(--bone);
    font:inherit;font-size:12.5px;font-weight:600;cursor:pointer;white-space:nowrap}
  /* the consent bar owns the bottom of the screen until it is answered */
  body:has(#auraz-consent.in) .ga-runtot{display:none}
  /* The requests FAB rides at bottom:22px / z-index 9990, so it parked on top of
     "See the breakdown" and cut the label in half. It already carries a bottom
     transition, so it was built to step aside — give it somewhere to step to. */
  body:has(.ga-runtot:not([hidden])) .az-rq-fab{
    bottom:calc(76px + env(safe-area-inset-bottom,0px))}

  .ga-grid{grid-template-columns:1fr}
  /* The quote was hoisted above the builder with order:-1. Side by side that is a
     sticky sidebar you glance at while choosing, which is right. Stacked, it put the
     PRICE before the question — the first thing the visitor met was "BHD 1,120" and
     "0 features selected", quoting them for something they had not chosen yet.
     Reading order now matches the decision order: choose, then see the estimate. */
  .ga-quote{position:static}
  .ga-plats{grid-template-columns:1fr}
  .ga-intro{grid-template-columns:1fr}
}
@media (max-width: 560px){
  .ga-fields{grid-template-columns:1fr}
  .ga-opt{min-width:0}
  .ga-langadd{max-width:none}

  /* Twenty feature rows made the feature step 4,142px tall on a 390px phone — five
     screens before you reach the next question. It is not spacing: each row carries a
     full paragraph (.ga-fwhat) of ~150px explaining what the feature includes.

     The base rule at the bottom of this file deliberately keeps that paragraph always
     open, and says why: "A visitor comparing '+ $530' against a price needs the
     paragraph in front of them, not one gesture away." That reasoning holds on a wide
     screen, where the paragraph costs nothing. On a phone the same choice costs five
     screens of scrolling, and the visitor scanning for the ONE feature they came for
     has to wade through nineteen explanations to find it.

     The compromise keeps the intent: two lines stay in front of them while scanning —
     enough to tell the features apart — and the full paragraph opens the moment the
     feature is chosen, which is when the price comparison actually happens. Nothing
     is removed and the row is still one tap.
     Scoped .ga-feat .ga-fwhat (0,2,0) so it beats the base rule regardless of order. */
  .ga-feat .ga-fwhat{display:-webkit-box;-webkit-box-orient:vertical;
    -webkit-line-clamp:2;overflow:hidden}
  .ga-feat.on .ga-fwhat,.ga-feat.sel .ga-fwhat,
  .ga-feat[aria-checked="true"] .ga-fwhat{-webkit-line-clamp:unset;overflow:visible}

  /* The catalogue grew to 54 features, and the clamp above stopped being enough: the
     "All" list measured 6,800px on a 375px phone — 8.4 screens, against the 4,142px
     that the clamp was written to fix. No clamp saves a list that long. The answer is
     the filter that is already on the page; it was simply unreachable once you had
     scrolled into the list, so changing category meant scrolling all the way back past
     everything you had just rejected.

     Two changes and no new control. The bar becomes ONE horizontally-scrolling row
     rather than three wrapped ones — nine categories measured 791px of chips, which
     wrapped to 148px of height and now costs about 48px — and it sticks under the
     fixed 65px header, so the filter is in reach at any depth in the list. */
  /* TWO defaults, one on top of the other, both of which refuse to shrink below the
     widest child — and both were harmless right up until the bar stopped wrapping:
       .ga-config is a GRID ITEM, and a grid item's min-width defaults to `auto`,
                  which resolves to min-content.
       .ga-step   is a <fieldset>, whose UA min-inline-size is min-content, not 0.
     With a wrapped bar nothing was ever wider than the column. With one 883px row,
     the fieldset grew to 885px, took the form with it, and the whole list was being
     laid out against a width no phone has. Every overflow rule below needs both. */
  .ga-config{min-width:0}
  .ga-step{min-width:0}
  .ga-featbar{
    position:sticky; top:65px; z-index:5;
    flex-wrap:nowrap; overflow-x:auto; overflow-y:hidden;
    scrollbar-width:none; -webkit-overflow-scrolling:touch;
    /* full-bleed across the step's 14px side padding, or rows show through at the edges */
    margin-inline:-14px; padding:10px 14px;
    /* body #050505 with the step's own rgba(255,255,255,.03) composited in, so the bar
       is opaque without reading as a different surface from the card it sits on */
    background:#0d0d0d;
    border-bottom:1px solid var(--hairline);
  }
  .ga-featbar::-webkit-scrollbar{display:none}
  /* nowrap makes flex items shrink to fit instead of overflowing — both the category
     chips and the Clear all button have to keep their own width and scroll instead */
  .ga-fcat,.ga-clearall{flex:none}

  /* The design choice is two cards carrying ~38 words each, so the pair stood 320px
     tall on a phone against 128px on a desk — a quarter of the screen spent on one
     either/or. Two lines are enough to tell "match my brand" from "custom design",
     and the titles carry the part that decides it: Included, or + $1,485.

     Unlike the feature rows, the chosen card does NOT re-expand here. One of the two
     is always selected, so an expand-on-select rule would leave the block permanently
     tall and defeat the point — it is why the first pass only reached 264px. */
  .ga-opt-rich{padding:11px 13px;gap:5px}
  .ga-opt-rich .ga-opt-d{display:-webkit-box;-webkit-box-orient:vertical;
    -webkit-line-clamp:2;overflow:hidden;line-height:1.45}
}
/* 375px phones: 19 feature rows + the category bar must stay on one line each */
@media (max-width: 420px){
  .ga-step{padding:16px 14px}
  .ga-feat{padding:10px 11px;gap:10px}
  .ga-feat .ga-ftext b{font-size:13.5px}
  .ga-feat .ga-price{font-size:11.5px}
  .ga-fcat{padding:7px 11px;font-size:12px;gap:6px}
  .ga-fcat-sel{padding:2px 6px}
}

/* ── #purpose on a phone ──────────────────────────────────────────────────────
   A vision, a mission and four values is the most text on the page, and stacked
   into one column it filled the screen top to bottom with nothing but prose — no
   heading to rest on, no edge to tell one idea from the next. The copy itself was
   cut (four two-sentence values became one sentence each); this is the rest of it:
   the mission card gets its own padding back at a phone size, the vision stops
   being a second headline, and each value gets a rule above it so the eye has a
   place to break. Everything is inside a max-width query — desktop is unchanged. */
@media (max-width: 767.98px){
  #purpose .sec-head{margin-bottom:var(--sp-section,16px)}
  #purpose .sec-head .sub{font-size:var(--fs-body,14px);line-height:1.65;max-width:none}
  .pur .core{padding:16px 18px}
  .pur .core p{font-size:var(--fs-body,14px);line-height:1.65}
  #purpose .how{gap:0;margin-top:var(--sp-section,16px)}
  #purpose .how-item{padding:16px 0;border-top:1px solid var(--hairline)}
  #purpose .how-item:first-child{border-top:0;padding-top:4px}
  #purpose .how-item h3{font-size:var(--fs-h3,15.5px);margin-bottom:4px}
  #purpose .how-item p{font-size:var(--fs-small,13px);line-height:1.6;margin:0}
}


/* ── Auraz account: header chip + sign-in dialog (landing/auth.js) ────────── */
#auraz-account{display:inline-flex;align-items:center;gap:.6rem}
#auraz-account .acct-who{font-size:.82rem;color:var(--muted,#8a8f98);max-width:14rem;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#auraz-account .acct-btn{font:inherit;font-size:.85rem;font-weight:600;cursor:pointer;
  padding:.42rem .9rem;border-radius:8px;border:1px solid rgba(199,49,46,.45);
  background:transparent;color:var(--red,#C7312E)}
#auraz-account .acct-btn:hover{background:rgba(199,49,46,.08)}
#auraz-auth{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;
  justify-content:center;padding:24px;background:rgba(10,10,12,.72);backdrop-filter:blur(6px)}
#auraz-auth .aa-card{position:relative;width:100%;max-width:25rem;border-radius:16px;padding:2rem;
  background:var(--card,#141418);color:var(--text,#f2f2f3);
  border:1px solid rgba(255,255,255,.08);box-shadow:0 24px 60px rgba(0,0,0,.45)}
#auraz-auth h2{margin:0 0 .4rem;font-size:1.25rem;font-weight:650}
#auraz-auth .aa-sub{margin:0 0 1.25rem;font-size:.9rem;line-height:1.55;color:var(--muted,#8a8f98)}
#auraz-auth .aa-l{display:block;font-size:.78rem;font-weight:600;margin:.85rem 0 .3rem;
  color:var(--muted,#8a8f98)}
#auraz-auth .aa-i{width:100%;box-sizing:border-box;font:inherit;font-size:.95rem;padding:.65rem .8rem;
  border-radius:9px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.04);color:inherit}
#auraz-auth .aa-i:focus{outline:2px solid rgba(199,49,46,.55);outline-offset:1px;border-color:transparent}
#auraz-auth .aa-err{min-height:1.1rem;margin:.6rem 0 0;font-size:.82rem;color:#e2574e}
#auraz-auth .aa-go{width:100%;margin-top:1rem;font:inherit;font-weight:650;cursor:pointer;
  padding:.7rem 1rem;border-radius:10px;border:0;background:#C7312E;color:#fff}
#auraz-auth .aa-go[disabled]{opacity:.6;cursor:default}
#auraz-auth .aa-alt{margin-top:1rem;text-align:center;font-size:.85rem;color:var(--muted,#8a8f98)}
#auraz-auth .aa-link{font:inherit;font-weight:600;color:#C7312E;background:none;border:0;
  cursor:pointer;padding:0}
#auraz-auth .aa-x{position:absolute;top:.75rem;right:.9rem;font-size:1.5rem;line-height:1;
  background:none;border:0;color:var(--muted,#8a8f98);cursor:pointer}
@media (prefers-color-scheme: light){
  #auraz-auth .aa-card{background:#fff;color:#17171a;border-color:#e6e6ea}
  #auraz-auth .aa-i{background:#fafafb;border-color:#dcdce2}
}


/* ── expanded signup: sections, two-up rows, password strength ───────────── */
#auraz-auth .aa-card.aa-wide{max-width:32rem}
#auraz-auth .aa-body{max-height:min(58vh,34rem);overflow-y:auto;margin:0 -.35rem;padding:0 .35rem}
#auraz-auth .aa-sec{margin:1.35rem 0 .2rem;font-size:.74rem;font-weight:700;
  letter-spacing:.09em;text-transform:uppercase;color:var(--red,#C7312E)}
#auraz-auth .aa-sec:first-child{margin-top:.4rem}
#auraz-auth .aa-why{display:block;margin-top:.2rem;font-size:.75rem;font-weight:400;
  letter-spacing:0;text-transform:none;color:var(--muted,#8a8f98)}
#auraz-auth .aa-f{margin-top:.15rem}
#auraz-auth .aa-row{display:grid;grid-template-columns:1fr 1fr;gap:.7rem}
@media (max-width:24rem){#auraz-auth .aa-row{grid-template-columns:1fr}}
#auraz-auth select.aa-i{appearance:none;color-scheme:dark;
  background-image:linear-gradient(45deg,transparent 50%,currentColor 50%),
                   linear-gradient(135deg,currentColor 50%,transparent 50%);
  background-position:calc(100% - 18px) 52%,calc(100% - 13px) 52%;
  background-size:5px 5px,5px 5px;background-repeat:no-repeat;padding-right:2.2rem}
#auraz-auth .aa-pw-meter{height:4px;margin-top:.45rem;border-radius:99px;
  background:rgba(255,255,255,.10);overflow:hidden}
#auraz-auth .aa-pw-meter > i{display:block;height:100%;width:0;border-radius:99px;
  transition:width .18s ease,background .18s ease}
#auraz-auth .aa-pw-meter.s1 > i{width:25%;background:#e2574e}
#auraz-auth .aa-pw-meter.s2 > i{width:50%;background:#e0a93e}
#auraz-auth .aa-pw-meter.s3 > i{width:78%;background:#7ea86b}
#auraz-auth .aa-pw-meter.s4 > i{width:100%;background:#5f9e4f}
#auraz-auth .aa-pw-rules{list-style:none;margin:.5rem 0 0;padding:0;
  display:flex;flex-wrap:wrap;gap:.25rem .85rem}
#auraz-auth .aa-pw-rules li{font-size:.74rem;color:var(--muted,#8a8f98);
  display:flex;align-items:center;gap:.3rem}
#auraz-auth .aa-pw-rules li::before{content:"";width:5px;height:5px;border-radius:99px;
  background:currentColor;opacity:.45}
#auraz-auth .aa-pw-rules li.ok{color:#7ea86b}
#auraz-auth .aa-pw-rules li.ok::before{opacity:1}
#auraz-auth .aa-hint{min-height:1rem;margin-top:.35rem;font-size:.76rem;color:var(--muted,#8a8f98)}
#auraz-auth .aa-hint.ok{color:#7ea86b}
#auraz-auth .aa-hint.bad{color:#e2574e}
@media (prefers-color-scheme: light){
  #auraz-auth select.aa-i{color-scheme:light}
  #auraz-auth .aa-pw-meter{background:rgba(0,0,0,.08)}
}


/* ── nav account chip: match the quiet "Sign in" link it replaced ─────────
   It was a bordered pill sitting next to the red Start-free button, which read
   as two competing buttons. Sign in is the quiet option; Start free is the CTA. */
#auraz-account .acct-btn{
  display:inline-flex;align-items:center;height:34px;padding:0 10px;line-height:1;
  font:inherit;font-size:14.5px;font-weight:500;cursor:pointer;
  background:none;border:0;color:var(--muted);transition:color .25s var(--ease);
}
#auraz-account .acct-btn:hover{color:var(--bone);background:none}
#auraz-account .acct-who{font-size:13.5px;max-width:12rem}

/* ── section rhythm ──────────────────────────────────────────────────────
   Every .sec carries its own 128px top AND bottom padding, so two stacked
   sections produced 256px of dead space (worst between #getapp and #signup).
   Collapse the seam to a single gap. */
.sec + .sec{padding-top:0}


/* ── cookie consent (landing/consent.js) ─────────────────────────────────── */
#auraz-consent{position:fixed;left:0;right:0;bottom:0;z-index:9998;
  padding:14px 20px;background:rgba(12,10,10,.96);backdrop-filter:blur(10px);
  border-top:1px solid rgba(255,255,255,.10);
  transform:translateY(100%);transition:transform .28s var(--ease,ease)}
#auraz-consent.in{transform:translateY(0)}
@media (prefers-reduced-motion:reduce){#auraz-consent{transition:none}}
#auraz-consent .ac-in{max-width:72rem;margin:0 auto;display:flex;gap:1.25rem;
  align-items:center;justify-content:space-between;flex-wrap:wrap}
#auraz-consent .ac-txt{font-size:.875rem;line-height:1.55;color:#c9c6c4;max-width:52rem}
#auraz-consent .ac-txt strong{color:#f4f2f1}
#auraz-consent .ac-more{font:inherit;font-size:.875rem;background:none;border:0;padding:0;
  cursor:pointer;color:#e2574e;text-decoration:underline;text-underline-offset:2px}
#auraz-consent .ac-acts{display:flex;gap:.6rem;flex-shrink:0}
.ac-btn{font:inherit;font-size:.85rem;font-weight:600;cursor:pointer;white-space:nowrap;
  padding:.55rem 1.1rem;border-radius:999px;border:1px solid transparent}
.ac-ghost{background:transparent;color:#c9c6c4;border-color:rgba(255,255,255,.22)}
.ac-ghost:hover{color:#fff;border-color:rgba(255,255,255,.42)}
.ac-primary{background:#C7312E;color:#fff}
.ac-primary:hover{background:#A22323}
#auraz-consent-d{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;
  justify-content:center;padding:24px;background:rgba(10,10,12,.74);backdrop-filter:blur(6px)}
#auraz-consent-d .acd-card{position:relative;width:100%;max-width:33rem;max-height:86vh;
  overflow-y:auto;border-radius:16px;padding:2rem;background:#141418;color:#f2f2f3;
  border:1px solid rgba(255,255,255,.09);box-shadow:0 24px 60px rgba(0,0,0,.45)}
#auraz-consent-d h2{margin:0 0 .4rem;font-size:1.2rem;font-weight:650}
#auraz-consent-d .acd-sub{margin:0 0 1.25rem;font-size:.875rem;line-height:1.55;color:#8a8f98}
#auraz-consent-d .acd-cat{padding:.9rem 0;border-top:1px solid rgba(255,255,255,.07)}
#auraz-consent-d .acd-row{display:flex;align-items:center;gap:.6rem;cursor:pointer}
#auraz-consent-d .acd-row input{width:16px;height:16px;accent-color:#C7312E;flex-shrink:0}
#auraz-consent-d .acd-row input:disabled{opacity:.6;cursor:default}
#auraz-consent-d .acd-t{font-size:.94rem;font-weight:600;display:flex;align-items:center;gap:.5rem}
#auraz-consent-d .acd-lock{font-size:.68rem;font-weight:600;letter-spacing:.06em;
  text-transform:uppercase;color:#8a8f98;background:rgba(255,255,255,.06);
  padding:2px 7px;border-radius:999px}
#auraz-consent-d .acd-d{margin:.4rem 0 0 2.2rem;font-size:.83rem;line-height:1.55;color:#8a8f98}
#auraz-consent-d .acd-acts{margin-top:1.4rem;display:flex;justify-content:flex-end}
#auraz-consent-d .acd-x{position:absolute;top:.75rem;right:.9rem;font-size:1.5rem;line-height:1;
  background:none;border:0;color:#8a8f98;cursor:pointer}
@media (max-width:40rem){
  #auraz-consent .ac-in{flex-direction:column;align-items:flex-start}
  #auraz-consent .ac-acts{width:100%}
  .ac-btn{flex:1}
}


/* ── Arabic: translate, do NOT mirror ────────────────────────────────────
   Deliberately no dir=rtl and no mirroring. The brief is to change the WORDS,
   not move the furniture — the layout, the reading order of the UI and every
   gap stay exactly as designed in English. Only the type needs attention,
   because the Latin display face has no Arabic glyphs and the tight negative
   tracking it wants pulls Arabic letters apart. */
[lang="ar"]{
  --font-ar:"Noto Kufi Arabic","Segoe UI",Tahoma,"Geeza Pro",Arial,sans-serif;
}
[lang="ar"] body,
[lang="ar"] .display,[lang="ar"] h1,[lang="ar"] h2,[lang="ar"] h3,[lang="ar"] h4,
[lang="ar"] .eyebrow,[lang="ar"] label,[lang="ar"] .btn,
[lang="ar"] input,[lang="ar"] select,[lang="ar"] textarea,[lang="ar"] button{
  font-family:var(--font-ar);
}
/* Arabic has no case and taller ascenders/descenders: negative tracking damages
   letter joining, and the Latin line-heights sit too tight. */
[lang="ar"] .display,[lang="ar"] h1,[lang="ar"] h2,[lang="ar"] h3,
[lang="ar"] .eyebrow,[lang="ar"] .mono{letter-spacing:0}
[lang="ar"] .display{line-height:1.2}
[lang="ar"] h1,[lang="ar"] h2{line-height:1.28}
[lang="ar"] body{line-height:1.7}
/* Numbers, money and codes keep running left-to-right inside Arabic text. */
[lang="ar"] .mono,[lang="ar"] .num,[lang="ar"] [class*="price"],
[lang="ar"] [class*="amount"]{direction:ltr;unicode-bidi:embed}

/* language toggle */
[data-lang-toggle]{display:inline-flex;align-items:center;gap:2px}
.lang-b{font:inherit;font-size:13px;font-weight:600;cursor:pointer;padding:4px 8px;
  border:0;border-radius:6px;background:none;color:var(--muted);line-height:1;
  transition:color .2s var(--ease,ease),background .2s var(--ease,ease)}
.lang-b:hover{color:var(--bone,#f2f2f3)}
.lang-b.on{color:var(--bone,#f2f2f3);background:rgba(255,255,255,.08)}
.lang-b[lang="ar"]{font-size:14px}


/* ── native select popups ────────────────────────────────────────────────
   color-scheme alone did not do it: on Windows the OPTION list is painted by
   the platform and needs explicit colours on the option elements too, or you
   get white-on-white. Set both, and set them on every select in the dialogs. */
#auraz-auth select.aa-i,
#auraz-consent-d select{
  color-scheme:dark;
  background-color:rgba(255,255,255,.04);
  color:var(--bone,#f2f2f3);
}
#auraz-auth select.aa-i option,
#auraz-consent-d select option{
  background-color:#17171b;
  color:#f2f2f3;
}
#auraz-auth select.aa-i option:checked,
#auraz-auth select.aa-i option:hover{
  background-color:#C7312E;
  color:#fff;
}
/* the empty "Select..." placeholder should read as a placeholder */
#auraz-auth select.aa-i option[value=""]{color:#8a8f98}
@media (prefers-color-scheme: light){
  #auraz-auth select.aa-i,#auraz-consent-d select{
    color-scheme:light;background-color:#fafafb;color:#17171a;
  }
  #auraz-auth select.aa-i option,#auraz-consent-d select option{
    background-color:#fff;color:#17171a;
  }
}

/* ── a richer, roomier signup dialog, with the scrollbar INSIDE it ────────
   The scroll track used to sit against the card edge and overlap the fields.
   Padding-right on the scroll body reserves the gutter, and a styled thin
   scrollbar keeps it from looking like a system artefact bolted on. */
#auraz-auth .aa-card.aa-wide{max-width:38rem;padding:2.25rem 2.25rem 2rem}
#auraz-auth .aa-body{
  max-height:min(62vh,38rem);
  overflow-y:auto;overscroll-behavior:contain;
  margin:0;padding:.25rem 1rem .25rem 0;
  scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.22) transparent;
}
#auraz-auth .aa-body::-webkit-scrollbar{width:8px}
#auraz-auth .aa-body::-webkit-scrollbar-track{background:transparent;margin:4px 0}
#auraz-auth .aa-body::-webkit-scrollbar-thumb{
  background:rgba(255,255,255,.18);border-radius:99px;
}
#auraz-auth .aa-body::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.3)}
/* a hairline that tells you the panel scrolls, instead of the content just
   vanishing at the edge */
#auraz-auth .aa-body{
  background:
    linear-gradient(var(--card,#141418) 30%,rgba(20,20,24,0)) top/100% 22px no-repeat,
    linear-gradient(rgba(20,20,24,0),var(--card,#141418) 70%) bottom/100% 22px no-repeat;
  background-attachment:local,local;
}
#auraz-auth .aa-sec{display:flex;align-items:baseline;flex-wrap:wrap;gap:.5rem}
#auraz-auth .aa-badge-opt{
  font-size:.62rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  padding:2px 7px;border-radius:999px;color:#8a8f98;
  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.10);
}
#auraz-auth .aa-why{flex:1 1 100%}

/* ── "Your business" is a switch, not a wall of fields ─────────────────────────
   The badge said optional and then showed six inputs, which is a form contradicting
   its own label. Off by default: name, email, password is the whole required path.
   role="switch" + aria-checked carries the state to a screen reader; the track is
   decorative, so the visible label is what gets read. */
#auraz-auth .aa-sec-tog{align-items:center}
#auraz-auth .aa-switch{
  margin-inline-start:auto;display:inline-flex;align-items:center;gap:.5rem;
  min-height:44px;padding:0 .25rem;                 /* 44px touch target, no visible box */
  font:inherit;font-size:.72rem;font-weight:600;letter-spacing:.02em;
  color:var(--muted);background:none;border:0;cursor:pointer;
}
#auraz-auth .aa-switch-t{
  width:38px;height:22px;border-radius:999px;flex:none;position:relative;
  background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.14);
  transition:background .2s ease,border-color .2s ease;
}
#auraz-auth .aa-switch-t::after{
  content:'';position:absolute;top:2px;inset-inline-start:2px;width:16px;height:16px;
  border-radius:50%;background:#9aa0a8;transition:transform .2s ease,background .2s ease;
}
#auraz-auth .aa-switch[aria-checked="true"]{color:var(--bone)}
#auraz-auth .aa-switch[aria-checked="true"] .aa-switch-t{
  background:rgba(199,49,46,.30);border-color:rgba(226,87,78,.55)}
#auraz-auth .aa-switch[aria-checked="true"] .aa-switch-t::after{
  transform:translateX(16px);background:#E2574E}
#auraz-auth .aa-switch:focus-visible{outline:2px solid #E2574E;outline-offset:3px;border-radius:8px}
/* The revealed block gets a rail so it reads as belonging to the switch above it. */
#auraz-auth .aa-biz{
  margin-top:.6rem;padding-inline-start:.85rem;
  border-inline-start:2px solid rgba(226,87,78,.30);
}
@media (prefers-reduced-motion:reduce){
  #auraz-auth .aa-switch-t,#auraz-auth .aa-switch-t::after{transition:none}
}

/* ── Forgot password ──────────────────────────────────────────────────────────
   Directly under the password field, which is where someone looks the moment it
   does not work. Right-aligned so it reads as a way out rather than a second label. */
#auraz-auth .aa-forgot{display:flex;justify-content:flex-end;margin:-.35rem 0 .1rem}
#auraz-auth .aa-forgot button{
  font:inherit;font-size:.78rem;font-weight:600;color:#E2574E;
  background:none;border:0;cursor:pointer;padding:.35rem .1rem;min-height:44px;
}
#auraz-auth .aa-forgot button:hover{text-decoration:underline}
#auraz-auth .aa-forgot button:disabled{opacity:.6;cursor:default;text-decoration:none}
#auraz-auth .aa-forgot button:focus-visible{outline:2px solid #E2574E;outline-offset:2px;border-radius:6px}


/* ══ One system, every screen — device showcase ═══════════════════════════
   Devices drawn in CSS rather than shipped as images: nothing to download, no
   2x/3x asset set, sharp at any zoom, and it recolours with the theme. */
.devices{position:relative;overflow:hidden}
.dev-head{max-width:44rem;margin:0 auto 3.5rem;text-align:center}
.dev-head h2{font-size:clamp(2rem,4.4vw,3.1rem);margin:.5rem 0 .9rem}
/* .sub carries max-width:46ch from the base rule, and a narrower box with no auto
   margins does not centre just because its TEXT is centred — it sat flush left inside
   the 704px header while the heading above it was centred, a 96px disagreement.
   text-wrap:balance evens the ragged line lengths that made it look more crooked. */
.dev-head .sub{color:var(--muted);font-size:1.02rem;line-height:1.7;
  margin-inline:auto;text-wrap:balance}

/* ── the lights ──────────────────────────────────────────────────────────
   Three soft pools behind the devices so the section reads as lit rather than
   flat. Very large, very low opacity, heavily blurred — a glow you notice only
   if you look for it. blur() on a huge element is expensive to repaint, so they
   never animate on scroll; the drift is a slow transform, which the compositor
   handles on its own layer. */
.dev-lights{position:absolute;inset:-10% -5% 0;pointer-events:none;z-index:0}
.dev-lights .dl{position:absolute;border-radius:50%;filter:blur(90px);opacity:.5}
.dev-lights .dl-1{width:38rem;height:38rem;left:-6rem;top:2rem;
  background:radial-gradient(circle,rgba(199,49,46,.42),transparent 68%);
  animation:devDrift 22s ease-in-out infinite alternate}
.dev-lights .dl-2{width:30rem;height:30rem;right:-4rem;top:8rem;
  background:radial-gradient(circle,rgba(226,87,78,.14),transparent 70%);
  animation:devDrift 28s ease-in-out infinite alternate-reverse}
.dev-lights .dl-3{width:26rem;height:26rem;left:38%;bottom:-6rem;
  background:radial-gradient(circle,rgba(162,35,35,.34),transparent 72%);
  animation:devDrift 34s ease-in-out infinite alternate}
@keyframes devDrift{from{transform:translate3d(0,0,0) scale(1)}
                    to{transform:translate3d(2.5rem,-1.5rem,0) scale(1.08)}}
@media (prefers-reduced-motion:reduce){.dev-lights .dl{animation:none}}

.dev-stage{position:relative;z-index:1;display:flex;align-items:flex-end;
  justify-content:center;gap:0;padding-bottom:2.5rem}

/* ── laptop ─────────────────────────────────────────────────────────────── */
.dev-laptop{position:relative;width:min(46rem,100%);flex:0 1 46rem}
.dl-screen{position:relative;border-radius:14px 14px 4px 4px;padding:10px;
  background:linear-gradient(160deg,#2a2a30,#15151a 55%);
  border:1px solid rgba(255,255,255,.10);
  box-shadow:0 40px 90px -30px rgba(0,0,0,.85),
             0 0 0 1px rgba(255,255,255,.04) inset,
             0 0 70px -20px rgba(199,49,46,.35);
  aspect-ratio:16/10}
.dl-bar{display:flex;align-items:center;gap:5px;padding:0 0 8px}
.dl-bar i{width:8px;height:8px;border-radius:50%;background:rgba(255,255,255,.18)}
.dl-url{margin-left:auto;margin-right:auto;font-family:var(--font-mono);font-size:9px;
  letter-spacing:.06em;color:rgba(255,255,255,.34);
  background:rgba(255,255,255,.05);padding:2px 10px;border-radius:99px}
.dl-app{display:flex;gap:8px;height:calc(100% - 22px);
  background:#0d0d11;border-radius:8px;padding:8px;overflow:hidden}
.dl-nav{display:flex;flex-direction:column;gap:6px;width:34px;flex-shrink:0}
.dl-nav span{height:8px;border-radius:3px;background:rgba(255,255,255,.07)}
.dl-nav span.on{background:var(--red);box-shadow:0 0 12px rgba(199,49,46,.6)}
.dl-main{flex:1;display:flex;flex-direction:column;gap:8px;min-width:0}
.dl-row{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.dl-kpi{background:rgba(255,255,255,.035);border:1px solid rgba(255,255,255,.06);
  border-radius:7px;padding:8px 10px}
.dl-kpi b{display:block;font-family:var(--font-mono);font-size:12px;color:#f0eeec;
  font-variant-numeric:tabular-nums}
.dl-kpi small{display:block;margin-top:2px;font-size:8px;letter-spacing:.05em;
  text-transform:uppercase;color:rgba(255,255,255,.34)}
.dl-kpi.up b{color:#7ea86b}
.dl-chart{flex:1;display:flex;align-items:flex-end;gap:6px;padding:10px;
  background:rgba(255,255,255,.025);border-radius:7px;
  border:1px solid rgba(255,255,255,.05);min-height:0}
.dl-chart i{flex:1;border-radius:3px 3px 0 0;
  background:linear-gradient(180deg,var(--red),rgba(199,49,46,.25));
  box-shadow:0 0 14px -4px rgba(199,49,46,.7)}
.dl-lines{display:flex;flex-direction:column;gap:5px}
.dl-lines i{height:6px;border-radius:3px;background:rgba(255,255,255,.06)}
.dl-lines i:nth-child(2){width:72%}
.dl-lines i:nth-child(3){width:44%}
/* the lid sits on a base, which is what makes it read as a laptop and not a TV */
.dl-base{height:12px;margin:0 -7%;border-radius:0 0 12px 12px;
  background:linear-gradient(180deg,#33333a,#1b1b20);
  box-shadow:0 18px 30px -14px rgba(0,0,0,.9)}
.dl-base span{display:block;width:14%;height:3px;margin:0 auto;border-radius:0 0 4px 4px;
  background:rgba(0,0,0,.5)}

/* ── phone ──────────────────────────────────────────────────────────────
   Overlaps the laptop deliberately: two devices in a row reads as a spec sheet,
   one in front of the other reads as a product family. */
.dev-phone{position:relative;flex:0 0 auto;width:11.5rem;margin-left:-4.5rem;
  margin-bottom:-1rem;z-index:2}
.dp-screen{position:relative;aspect-ratio:9/19.5;border-radius:26px;padding:8px;
  background:linear-gradient(160deg,#2c2c33,#15151a 60%);
  border:1px solid rgba(255,255,255,.12);
  box-shadow:0 34px 70px -22px rgba(0,0,0,.9),
             0 0 60px -18px rgba(199,49,46,.42),
             0 0 0 1px rgba(255,255,255,.05) inset;
  display:flex;flex-direction:column;gap:6px;overflow:hidden}
.dp-notch{position:absolute;top:8px;left:50%;transform:translateX(-50%);
  width:34%;height:5px;border-radius:99px;background:#0a0a0d;z-index:3}
.dp-top{display:flex;align-items:center;justify-content:space-between;
  padding:12px 4px 0}
.dp-brand{width:38%;height:7px;border-radius:3px;
  background:linear-gradient(90deg,var(--red),rgba(226,87,78,.4))}
.dp-cart{width:12px;height:12px;border-radius:4px;background:rgba(255,255,255,.14)}
.dp-hero{height:26%;border-radius:10px;
  background:linear-gradient(150deg,rgba(199,49,46,.55),rgba(162,35,35,.18));
  box-shadow:0 0 24px -8px rgba(199,49,46,.5)}
.dp-grid{flex:1;display:grid;grid-template-columns:1fr 1fr;gap:6px;min-height:0}
.dp-grid i{border-radius:8px;background:rgba(255,255,255,.055);
  border:1px solid rgba(255,255,255,.05)}
.dp-cta{height:22px;border-radius:99px;background:var(--red);
  box-shadow:0 0 18px -4px rgba(199,49,46,.75)}
.dp-tabs{display:flex;gap:8px;justify-content:center;padding:4px 0 6px}
.dp-tabs i{width:16px;height:4px;border-radius:99px;background:rgba(255,255,255,.12)}
.dp-tabs i.on{background:var(--red)}

.dev-tag{position:absolute;left:50%;transform:translateX(-50%);bottom:-2.1rem;
  white-space:nowrap;font-family:var(--font-mono);font-size:9.5px;letter-spacing:.14em;
  text-transform:uppercase;color:rgba(255,255,255,.42)}
.dev-phone .dev-tag{bottom:-2.6rem}

/* ── the three claims under the devices ─────────────────────────────────── */
.dev-points{position:relative;z-index:1;list-style:none;margin:4.5rem auto 0;padding:0;
  max-width:64rem;display:grid;grid-template-columns:repeat(3,1fr);gap:1.75rem}
.dev-points li{font-size:.94rem;line-height:1.65;color:var(--muted);
  padding-top:1rem;border-top:1px solid rgba(255,255,255,.09)}
.dev-points b{display:block;margin-bottom:.3rem;color:var(--bone);font-weight:650}

@media (max-width:60rem){
  .dev-stage{flex-direction:column;align-items:center;gap:3.5rem}
  .dev-phone{margin-left:0;margin-bottom:0;width:13rem}
  /* flex-basis measures the MAIN axis, and the line above just turned that axis
     vertical. The base rule's `flex:0 1 46rem` was written as a width for the row
     layout, so once stacked it became a 736px HEIGHT request — and with nothing to
     shrink against in a column of free height, the laptop reserved 736px to draw
     241px of artwork. That left ~500px of blank screen between the laptop and the
     phone, which read as a layout bug because it was one.
     Resetting the basis lets the height come from the artwork, as it always did on
     the row axis. Width is set on the next line, so nothing is lost by giving it up
     as a basis. */
  .dev-laptop{width:100%;flex:0 0 auto}
  .dev-points{grid-template-columns:1fr;gap:1.25rem;margin-top:3.5rem}
}
@media (prefers-color-scheme:light){
  .dev-points li{border-top-color:rgba(0,0,0,.10)}
  .dev-tag{color:rgba(0,0,0,.45)}
}


/* The card must never exceed the viewport, whatever the content or screen height.
   Clamping the CARD and letting the scroll body flex is the robust form — a fixed
   max-height on the body alone still overflows once the header, error line and
   footer are added on a short screen. */
#auraz-auth .aa-card{display:flex;flex-direction:column;max-height:92vh}
#auraz-auth .aa-card > h2,#auraz-auth .aa-card > .aa-sub,
#auraz-auth .aa-card > .aa-err,#auraz-auth .aa-card > .aa-go,
#auraz-auth .aa-card > .aa-alt{flex:0 0 auto}
#auraz-auth .aa-body{flex:1 1 auto;min-height:0;max-height:none}


/* ══ Page-wide neon ambience ══════════════════════════════════════════════
   Replaces the section-scoped glow, which was clipped by .devices{overflow:hidden}
   and therefore drew a hard-edged rectangle across the page — the "colour
   misalignment between sections" in the report. A single FIXED layer behind
   everything has no section boundaries to clip against, so there is no seam
   anywhere, and it lights the whole site instead of one band.

   fixed + pointer-events:none + a huge blur = one compositor layer that never
   repaints on scroll. It is drawn once and then just sits there. */
.neon-world{
  position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden;
}
/* No contain:strict and no mix-blend-mode here, deliberately. Both were tried and
   both promoted the whole page to the compositor, which left opacity transitions
   in OTHER sections holding a stale paint at 0 with no animation running — the
   hero rendered blank while its computed target value was correctly 1. A plain
   blurred gradient layer gets the same look without touching how the rest of the
   page composites. */
.neon-world span{
  position:absolute;display:block;border-radius:50%;
  /* A modest blur, not a huge one. Removing it entirely left visible gradient
     edges; 60px softens them without the offscreen buffers that four
     viewport-sized 100px blurs demanded. */
  filter:blur(60px);
}
.nw-1{width:52vw;height:52vw;left:-12vw;top:-8vh;
  background:radial-gradient(circle,rgba(199,49,46,.30),transparent 66%);
  animation:nwDrift 26s ease-in-out infinite alternate}
.nw-2{width:44vw;height:44vw;right:-10vw;top:18vh;
  background:radial-gradient(circle,rgba(226,87,78,.22),transparent 68%);
  animation:nwDrift 33s ease-in-out infinite alternate-reverse}
.nw-3{width:40vw;height:40vw;left:26vw;bottom:-14vh;
  background:radial-gradient(circle,rgba(162,35,35,.12),transparent 70%);
  animation:nwDrift 40s ease-in-out infinite alternate}
.nw-4{width:30vw;height:30vw;right:14vw;bottom:4vh;
  background:radial-gradient(circle,rgba(255,120,110,.14),transparent 72%);
  animation:nwDrift 47s ease-in-out infinite alternate-reverse}
@keyframes nwDrift{
  from{transform:translate3d(0,0,0) scale(1)}
  to  {transform:translate3d(3vw,-2vh,0) scale(1.12)}
}
/* Content must sit above the light, and the nav above everything. */
/* The sections live inside <main>, not directly in <body> — a body > section
   selector silently matched nothing and left the fixed light able to paint
   over the content. Lift the real containers. */
/* The sections live inside <main>, not directly in <body>, so a body > section
   selector matched nothing and left the fixed light able to paint over content.
   NOTE: .nav is deliberately absent here. It is position:fixed by design, and an
   earlier version of this rule listed header.nav and reset it to relative — which
   is why the top bar stopped following the page on scroll. Only raise the things
   that are static to begin with. */
main,footer{position:relative;z-index:1}
.neon-world{z-index:0}
@media (prefers-reduced-motion:reduce){.neon-world span{animation:none}}

/* the local device glow no longer needs to be clipped, so the seam is gone */
.devices{overflow:visible}
.dev-lights{display:none}

/* ── neon edge on the surfaces that should read as lit ──────────────────── */
.dl-screen,.dp-screen{position:relative}
.dl-screen::after,.dp-screen::after{
  content:"";position:absolute;inset:-1px;border-radius:inherit;pointer-events:none;
  background:linear-gradient(150deg,rgba(255,120,110,.55),transparent 42%,rgba(199,49,46,.35));
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude;padding:1px;
  opacity:.65;
}

/* ══ Hero: more presence, and information that earns the space ════════════ */
.hero{position:relative}
/* a soft floor-light under the hero so the fold does not end on a flat black
   line — this is the band that read as a colour change */
.hero::after{
  content:"";position:absolute;left:50%;bottom:-1px;transform:translateX(-50%);
  width:min(70rem,120%);height:14rem;pointer-events:none;z-index:0;
  background:radial-gradient(ellipse at 50% 100%,rgba(199,49,46,.16),transparent 70%);
}
.hero-copy{position:relative;z-index:2}
.hero .eyebrow{position:relative;display:inline-flex;align-items:center;gap:.55rem}
.hero .eyebrow::before{
  content:"";width:6px;height:6px;border-radius:50%;background:var(--red);
  box-shadow:0 0 10px 2px rgba(199,49,46,.85);
  animation:nwPulse 2.6s ease-in-out infinite;
}
@keyframes nwPulse{0%,100%{opacity:1}50%{opacity:.35}}
@media (prefers-reduced-motion:reduce){.hero .eyebrow::before{animation:none}}

/* proof strip: concrete facts under the CTAs instead of empty space */
.hero-proof{
  position:relative;z-index:2;display:flex;flex-wrap:wrap;gap:.5rem 1.6rem;
  margin-top:2.25rem;padding-top:1.5rem;
  border-top:1px solid rgba(255,255,255,.08);
}
.hero-proof li{list-style:none;display:flex;align-items:center;gap:.5rem;
  font-size:.82rem;color:var(--muted);white-space:nowrap}
.hero-proof b{color:var(--bone);font-weight:650;font-variant-numeric:tabular-nums}
.hero-proof i{width:5px;height:5px;border-radius:50%;background:var(--red);
  box-shadow:0 0 8px rgba(199,49,46,.8);flex-shrink:0}

/* ══ MOBILE: the form must be usable, which it was not ════════════════════
   iOS Safari zooms the whole page when a focused field has font-size < 16px.
   Thirteen fields were at 14.5px, so tapping any of them zoomed the layout and
   pushed neighbouring inputs off-screen — the reported "missing text boxes".
   16px is the fix, and it is not negotiable on iOS. */
@media (max-width:48rem){
  input,select,textarea,
  .fld,.ga-i,#auraz-auth .aa-i{font-size:16px !important}
  /* checkboxes were 17px — under every touch-target guideline. Scale the box and
     make the whole label a target so a thumb can hit it. */
  /* Scaling is for the boxes the BROWSER draws, which cannot be sized any other way.
     A checkbox we paint ourselves is already sized for touch, and scaling it renders
     it 23px inside a 20px slot — overlapping the sentence beside it and dragging its
     tick out of the box, because transform-origin:left center moves the paint and not
     the layout. :not([style]) is deliberately NOT the guard: appearance:none is the
     honest test for "we draw this one". */
  input[type=checkbox],input[type=radio]{
    width:20px;height:20px;flex-shrink:0;
    transform:scale(1.15);transform-origin:left center;
  }
  input[type=checkbox]:where(.ga-agree *,.ga-check *,.ga-student *,.ga-carechk *,
    .remote-check *,#auraz-consent-d *){transform:none}
  label:has(> input[type=checkbox]),label:has(> input[type=radio]),
  .ga-check,.ga-agree-field{min-height:44px;display:flex;align-items:center;gap:.65rem}
  /* the nav actions measured 399px inside a 375px viewport */
  .nav-actions{flex-wrap:wrap;justify-content:flex-end;gap:.4rem;min-width:0}
  .nav-actions .btn{padding:8px 14px;font-size:13px}
  #auraz-account .acct-who{display:none}   /* the name reappears in the drawer */
  [data-lang-toggle]{gap:0}
  .lang-b{padding:4px 6px}
  /* my device mockups overflowed their section by 238px */
  .dev-stage{width:100%;overflow:hidden}
  .dev-laptop{width:100%;max-width:100%}
  .dl-base{margin:0;width:100%}
  .dev-phone{width:min(11rem,60vw)}
  .devices{overflow:hidden}      /* no page-level scroll on small screens */
  /* ONE STRIP, NOT FOUR ROWS. As a 2-column grid of wrapping list items this block
     measured 125px on a 375px screen — four separate objects, each with a dot, each
     claiming its own line, for four facts nobody reads one at a time. It is a single
     run of text now, separated by hairlines, so it reads as one credential line and
     costs about a third of the height. The numbers keep their weight; the dots go,
     because a bullet per fact is what made four facts look like four things. */
  .hero-proof{
    display:flex;flex-wrap:wrap;gap:6px 0;align-items:baseline;
    margin-top:1.5rem;padding-top:1.1rem;
  }
  .hero-proof li{font-size:12px;line-height:1.5;white-space:nowrap;
    padding:0 10px;border-inline-start:1px solid rgba(255,255,255,.14)}
  .hero-proof li:first-child{padding-inline-start:0;border-inline-start:0}
  .hero-proof i{display:none}
  .hero-proof b{font-weight:700}
  .hp-x{display:none}                    /* the words a phone does not have room for */
}
/* Fields on a phone deserve a bigger tap area regardless of the zoom rule. */
@media (max-width:48rem) and (pointer:coarse){
  input:not([type=checkbox]):not([type=radio]),select,textarea{min-height:46px}
  .btn,button{min-height:44px}

  /* The rule above only ever fixed HEIGHT, so a column of controls came out 44px
     tall and 20-42px wide. Measured in Chrome at 320px, these were the survivors.
     Width is the axis a thumb misses on a narrow control, so each gets a floor on
     the axis it was actually short on — never both, or the nav row grows for no
     reason. Growth only, so nothing can reflow narrower than it already is.

     Deliberately NOT included: .sim-tab (15px and 22px wide, and by far the worst
     numbers on the page) lives inside .sim-phone .sim-screen — it is a drawing of
     an app's tab bar inside a device mockup, not a control of this site. Padding
     it to 44px would blow the mockup apart to fix a button nobody taps. */
  .nav-brand{min-height:44px;display:inline-flex;align-items:center}
  .lang-b{min-width:44px}
  .az-eye{min-width:44px}
  /* footer columns are already 44px tall; the words are short, so only width was
     left, and a stacked column has the room to spare */
  .fcol a{min-width:44px}

  /* .ga-lang-x was on the list above, and it was the wrong remedy: unlike the others
     it lives INSIDE a pill, so growing the button grew the pill around it. Measured
     at 375px, the chip reading "English" came out 119x58 — a label the size of a
     button, which is what makes the language row look oversized on a phone.

     The thumb still needs 44x44. It gets it from a hit area extended PAST the visual
     bounds (Apple HIG's own remedy for exactly this case) rather than from a bigger
     button, so the chip goes back to reading as a label. min-height:0 is what undoes
     the blanket `button{min-height:44px}` a few rules up. */
  .ga-lang-x{position:relative;min-height:0}
  .ga-lang-x::after{content:'';position:absolute;left:50%;top:50%;
    transform:translate(-50%,-50%);width:44px;height:44px}
  /* The invisible area is ~5px taller than the chip on each side, so a wrapped
     second row needs a bigger row gap or the two rows' targets overlap (measured:
     34.8px chips 8px apart put their centres 43px apart, one short of 44).

     Two classes, not one: index.html carries an inline block that sets
     `.ga-chips,.ga-optrow,.ga-featbar{gap:var(--tap-gap)}` — same specificity as a
     bare `.ga-langs`, but inline styles come after the linked sheet, so it wins the
     tie. `.ga-chips.ga-langs` outranks it instead of racing it. */
  .ga-chips.ga-langs{gap:12px}
}


/* ── Arabic text direction WITHOUT moving the layout ──────────────────────
   Not mirroring the UI is right, but it left sentence punctuation on the wrong
   side: "أدِر عملك بالكامل .من مكان واحد" — the full stop jumped to the left.
   dir=auto on the TEXT elements only lets each block resolve its own direction
   from its first strong character, so Arabic reads and punctuates correctly
   while every container, grid and gap stays exactly where it was designed. */
[lang="ar"] h1,[lang="ar"] h2,[lang="ar"] h3,[lang="ar"] h4,
[lang="ar"] p,[lang="ar"] li,[lang="ar"] label,[lang="ar"] .sub,
[lang="ar"] .eyebrow,[lang="ar"] .aa-sub,[lang="ar"] .lede,
[lang="ar"] .aa-l,[lang="ar"] .dev-points b{unicode-bidi:plaintext}
/* plaintext = same resolution as dir=auto, but applied in CSS so no markup
   changes and it cannot leak into the layout boxes. */


/* ══ Neon LINES ═══════════════════════════════════════════════════════════
   The earlier attempt flooded the page with red radial pools, which is not what
   neon means — a neon sign is a bright thin LINE against a dark ground, not a
   coloured fog. Those pools are now barely-there ambience, and the accent lives
   in hairlines on the UI itself: a lit top edge on cards, a glowing rule under
   section headings, and a bright seam on the focused control. */

/* a lit top edge that brightens on hover — the card reads as edge-lit */
.shell{position:relative}
.shell::before{
  content:"";position:absolute;left:14%;right:14%;top:0;height:1px;pointer-events:none;
  background:linear-gradient(90deg,transparent,rgba(226,87,78,.75),transparent);
  opacity:.5;transition:opacity .35s var(--ease,ease),left .35s var(--ease,ease),right .35s var(--ease,ease);
}
.shell:hover::before{opacity:1;left:4%;right:4%}
.cell:hover,.tier:hover{border-color:rgba(199,49,46,.34)}

/* a glowing rule under every section heading */
.sec-head,.dev-head{position:relative}
.sec-head::after,.dev-head::after{
  content:"";display:block;width:4.5rem;height:2px;margin:1.15rem 0 0;border-radius:2px;
  background:linear-gradient(90deg,var(--red),rgba(226,87,78,0));
  box-shadow:0 0 12px rgba(199,49,46,.7);
}
.dev-head::after{margin-left:auto;margin-right:auto}

/* the focused field gets a real neon seam instead of a flat ring */
.fld:focus,.ga-i:focus,#auraz-auth .aa-i:focus,input:focus,select:focus,textarea:focus{
  outline:none;
  border-color:rgba(226,87,78,.85);
  box-shadow:0 0 0 1px rgba(226,87,78,.5),0 0 14px -2px rgba(199,49,46,.55);
}
/* keyboard users still get a visible focus ring on non-fields */
a:focus-visible,button:focus-visible{
  outline:2px solid rgba(226,87,78,.9);outline-offset:2px;
}

/* the primary button, lit */
.btn-red{box-shadow:0 0 20px -6px rgba(199,49,46,.75)}
.btn-red:hover{box-shadow:0 0 26px -4px rgba(199,49,46,.95)}

/* neon divider between sections, replacing the flat black seam */
.sec + .sec::before{
  content:"";position:absolute;left:50%;top:0;transform:translateX(-50%);
  width:min(46rem,78%);height:1px;pointer-events:none;
  background:linear-gradient(90deg,transparent,rgba(199,49,46,.38),transparent);
}
.sec{position:relative}

/* device screens: keep the edge light, drop the heavy outer bloom */
.dl-screen,.dp-screen{box-shadow:0 34px 70px -24px rgba(0,0,0,.9),0 0 0 1px rgba(255,255,255,.05) inset}
@media (prefers-reduced-motion:reduce){.shell::before{transition:none}}


/* ── App Studio: the feature detail ──────────────────────────────────────
   ALWAYS VISIBLE, on purpose. The first version collapsed it and revealed on
   hover or selection, which was wrong twice over: the complaint being fixed here
   is "I cannot see what the applications contain", and hiding the answer behind a
   hover is how it got lost in the first place. It also could not have worked —
   .ga-feat has a FAKE checkbox (span.ga-box, no input element), so the
   input:checked selector matched nothing, and hover states cannot be verified on
   touch at all. A visitor comparing "+ $530" against a price needs the paragraph
   in front of them, not one gesture away. */
.ga-fwhat{
  display:block;margin-top:.45rem;
  font-size:.82rem;line-height:1.6;color:var(--muted);
}
/* Slightly brighter once the feature is actually chosen, so a long list still
   shows you what you have picked. */
.ga-feat.sel .ga-fwhat,.ga-feat[aria-checked="true"] .ga-fwhat{color:var(--bone)}


/* -- "Try it" on an App Studio feature ------------------------------------
   Sits inside a row that is itself a checkbox, so it has to read as a separate
   control rather than part of the label: its own outline, its own hover, and the
   click is stopped before it reaches the row. Only rendered for features that
   have a module behind them on the try-it page. */
.ga-right{display:flex;flex-direction:column;align-items:flex-end;gap:7px;flex:none}
/* A plain text link, not a pill. Sitting beside the feature's price, a bordered
   red chip read as a second thing to buy rather than a way to go and look at one.
   The chevron points along the direction of travel; the old ↗ implied a new window,
   which it is not. */
.ga-try{display:inline-flex;align-items:center;gap:5px;
  padding:5px 0;white-space:nowrap;
  font-size:12px;font-weight:600;letter-spacing:.01em;text-decoration:none;
  color:var(--red-soft);background:none;border:0;
  transition:color .18s var(--ease)}
.ga-try span{font-size:14px;line-height:1;transition:transform .18s var(--ease)}
.ga-try:hover span{transform:translateX(2px)}
/* The pill's fill and border states are gone with the pill itself — left in place
   they would have repainted the chip on hover and on selection. */
.ga-try:hover{color:var(--bone)}
.ga-try:focus-visible{outline:2px solid var(--red);outline-offset:3px;border-radius:4px}
.ga-feat.on .ga-try{color:var(--bone)}


/* -- signed in ------------------------------------------------------------
   Two things stop making sense once somebody is signed in: an account form
   inviting them to create the account they already have, and a header with no
   way into the thing they signed in for. Both are driven off one class that
   auth.js puts on <body>, so they can never disagree with each other. */
body.is-signed-in #signup{display:none}
.signed-panel{display:none}
body.is-signed-in .signed-panel{display:block}
.signed-panel .core{padding:clamp(24px,4vw,40px);text-align:center}
.signed-panel h2{margin:0 0 8px}
.signed-panel .sub{margin:0 auto 20px;max-width:52ch}
.signed-panel .signed-cta{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
/* .nav-links>li already sets display:flex, and it out-specifies a bare class --
   so the tab has to be hidden at the same weight or it shows to everyone. */
.nav-links>li.nav-erp{display:none}
body.is-signed-in .nav-links>li.nav-erp{display:flex}

/* ══ the bar has to survive its own contents ══════════════════════════════
   Signed in, the bar carries: brand, six links, a currency picker, two language
   toggles, an account name, Sign out and Start free. Measured, that wants 1047px
   of a pill whose inside is about 1050 -- it was fitting by three pixels, and the
   workspace tab was what spent them. Below that the flex items were squeezed
   under their own text width, so each label broke across two lines and the brand
   ended up touching the first link.

   Three defences, in order of how gently they act:
     1. labels never break across lines -- squeezing may crowd, but it may not
        produce a two-line "Get an / App";
     2. the account name is capped and ellipsised, because its length is user data
        and a long one must not be able to break the layout;
     3. spacing tightens, and then the whole set folds into the burger while there
        is still room for it, rather than after it has already collapsed.
   The fold now happens at 1024px instead of 767px -- with this much in the bar,
   767 was far past the point where it still fitted. */
/* justify-content:space-between distributes only the space that is LEFT. Once the
   bar is full there is none, and the wordmark ends up against the first link --
   "AurazExplore". A gap is a floor rather than a distribution, so the three groups
   keep their distance even when the bar is at capacity. */
/* ── one spacing scale for the bar ────────────────────────────────────────
   The gaps had grown apart: 10px inside the actions, 20px between the links, and
   18px between the three GROUPS. Separation between groups being smaller than the
   spacing inside one is why the bar read as a single undifferentiated run rather
   than brand | links | actions.

   The hierarchy now steps up: controls sit closest, text links wider, and the
   groups widest of all. The action controls stay tighter than the links on
   purpose — each is a chip or button carrying its own padding, so equal numeric
   gaps would read as wider than the links, not equal to them. */
.nav-pill{gap:24px}                 /* FLOOR between the three groups */
.nav-links{gap:18px}                /* between text links             */
.nav-actions{gap:10px}              /* between chips and buttons      */
.nav-pill{padding:10px 14px 10px 20px}
#auraz-account .acct-who{max-width:6rem}
/* The group figure is a floor, not a fixed gap: justify-content:space-between
   hands the groups whatever is left over, so on a wide screen they sit ~90px
   apart and only close up to 24 when the bar is genuinely full. Chosen so the
   whole set still fits a 1280 laptop signed in -- at 24/18/10 it needs about
   1158px, and generous spacing that forces the burger open on a normal screen
   is not generosity. */

.nav-links>li>a,.nav-drop-btn{white-space:nowrap}
/* the same for everything in the actions group -- "Sign out" was breaking
   into "Sign / out" for exactly the same reason the links did */
.nav-actions .acct-btn,.nav-actions .btn,.acct-who{white-space:nowrap}
/* SCOPED, and it must stay scoped. Unqualified, this rule sits 189 lines after
   the @media(max-width:48rem) block that sets .nav-actions{flex-wrap:wrap} and
   beats it on source order at equal specificity -- so the phone override silently
   did nothing. Measured at 360px: the currency button started at x=-44.6 (off the
   left edge of the viewport), the brand link overlapped both the language toggle
   and the account button, and body.scrollWidth was 379 against a 360 viewport,
   hidden only by html{overflow-x:clip}. nowrap is a desktop rule; say so. */
@media (min-width:48.0625rem){
  .nav-actions{flex-wrap:nowrap}
}
.nav-brand .wordmark{white-space:nowrap}

/* These are NOT tightening-for-small-screens rules, which is how they were first
   written and why the bar still overflowed at 1400px. .nav-pill is width:min(1080px,
   92vw) -- it stops growing at 1080 and a wider viewport buys nothing. There is no
   roomy regime to relax for, so the tighter spacing and the shorter name cap are
   simply what the bar is, at every width. */
@media (max-width:1100px){
  .nav-links{gap:18px}
  .nav-actions{gap:9px}
}
/* Below this the full set genuinely does not fit -- fold it rather than crush it. */
@media (max-width:1024px){
  .nav-links,.nav-signin{display:none}
  .burger{display:block}
}

/* Signed in the bar carries three more things -- the workspace tab, the account
   name and Sign out -- and measures about 200px wider. It therefore has to fold
   sooner than the signed-out bar, which still has 127px to spare at this width.
   Folding both at the same breakpoint would either crush one or needlessly hide
   the other, so the threshold follows the contents. Measured, not guessed:
   signed in the set fits to 1280 and breaks by 1200, so it folds at 1250. */
@media (max-width:1250px){
  body.is-signed-in .nav-links,
  body.is-signed-in .nav-signin{display:none}
  body.is-signed-in .burger{display:block}
}
.menu .menu-erp{display:none}
body.is-signed-in .menu .menu-erp{display:block}

/* ══ App Studio simulator ═════════════════════════════════════════════════
   A phone and a browser showing the app being specified. Built on the site's
   tokens so it reads as part of the page, but the frames are deliberately
   flatter and cooler than the marketing cards around them -- they are a
   product being shown, not another panel competing for attention. */
.ga-sim{margin:26px 0 8px}
.sim-head h3{font-family:var(--font-display,'Cabinet Grotesk',sans-serif);
  font-size:1.15rem;font-weight:700;letter-spacing:-.01em;color:var(--bone);margin:0 0 6px}
.sim-head p{color:var(--muted);font-size:.9rem;line-height:1.6;margin:0 0 18px;max-width:62ch}

.sim-frames{display:grid;gap:22px;align-items:start}
.sim-frames.sim-both{grid-template-columns:minmax(0,1fr) 268px}
.sim-frames.sim-web{grid-template-columns:minmax(0,1fr)}
.sim-frames.sim-mobile{grid-template-columns:268px;justify-content:start}
@media(max-width:900px){
  .sim-frames.sim-both{grid-template-columns:minmax(0,1fr)}
  .sim-frames.sim-mobile{justify-content:center}
}
.sim-frames figure{margin:0}
.sim-frames figcaption{margin-top:9px;font-family:var(--font-mono,'JetBrains Mono',monospace);
  font-size:10px;letter-spacing:.13em;text-transform:uppercase;color:var(--muted);text-align:center}

/* ── shared inner bits ───────────────────────────────────────────────── */
.sim-frames svg{width:15px;height:15px;flex:none}
.sim-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:7px;padding:34px 18px;text-align:center;color:var(--muted)}
.sim-empty svg{width:24px;height:24px;opacity:.5}
.sim-empty b{color:var(--bone);font-size:.88rem;font-weight:600}
.sim-empty span{font-size:.78rem;line-height:1.5;max-width:26ch}

/* ── the phone ───────────────────────────────────────────────────────── */
.sim-phone{position:relative}
.sim-phone .sim-screen{position:relative;overflow:hidden;
  border:8px solid #16181d;border-radius:34px;background:#0b0d11;
  box-shadow:0 26px 60px -30px rgba(0,0,0,.9),inset 0 0 0 1px rgba(255,255,255,.05);
  height:520px;display:flex;flex-direction:column}
.sim-notch{position:absolute;top:8px;left:50%;transform:translateX(-50%);
  width:86px;height:20px;border-radius:0 0 12px 12px;background:#16181d;z-index:3}
.sim-status{display:flex;justify-content:space-between;align-items:center;
  padding:9px 16px 4px;font-size:9.5px;color:var(--muted);
  font-family:var(--font-mono,'JetBrains Mono',monospace)}
.sim-sig{width:16px;height:8px;border-radius:2px;background:rgba(255,255,255,.35)}
.sim-appbar{display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:6px 14px 10px}
.sim-appbar b{font-size:.92rem;color:var(--bone);font-weight:700;letter-spacing:-.01em}
.sim-chips{display:flex;gap:6px}
.sim-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 7px;border-radius:999px;
  border:1px solid var(--hairline);font-size:9.5px;color:var(--muted)}
.sim-chip-dot{position:relative}
.sim-chip-dot::after{content:'';position:absolute;top:1px;right:1px;width:5px;height:5px;
  border-radius:50%;background:var(--red)}
/* Scrolls rather than clips: with several features ticked the content is taller
   than the screen, which is true of the real app too -- letting the visitor push
   it up is the difference between a picture of an app and a thing that behaves
   like one. Thin scrollbar so it does not read as a web page inside a phone. */
.sim-body{flex:1;overflow-y:auto;overflow-x:hidden;padding:0 12px;display:flex;
  flex-direction:column;gap:9px;scrollbar-width:thin;overscroll-behavior:contain}
.sim-body::-webkit-scrollbar{width:3px}
.sim-body::-webkit-scrollbar-thumb{background:rgba(255,255,255,.16);border-radius:3px}
.sim-phone.is-rtl .sim-body,.sim-phone.is-rtl .sim-appbar{direction:rtl}

.sim-search{display:flex;align-items:center;gap:7px;padding:7px 10px;border-radius:9px;
  background:rgba(255,255,255,.05);color:var(--muted);font-size:11px}
.sim-cats{display:flex;gap:6px;font-size:10px;color:var(--muted)}
.sim-cats b{color:var(--bone);background:rgba(199,49,46,.18);border:1px solid rgba(199,49,46,.4);
  padding:3px 9px;border-radius:999px;font-weight:600}
.sim-cats span{padding:3px 9px;border-radius:999px;border:1px solid var(--hairline)}
.sim-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.sim-card{position:relative;border:1px solid var(--hairline);border-radius:11px;
  padding:7px;background:rgba(255,255,255,.025);display:flex;flex-direction:column;gap:2px}
.sim-card img{width:100%;height:46px;object-fit:contain;border-radius:7px}
.sim-card i{font-style:normal;font-size:9.5px;color:var(--muted);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sim-card b{font-size:10.5px;color:var(--bone)}
.sim-add{position:absolute;top:6px;right:6px;width:17px;height:17px;border-radius:50%;
  background:var(--red);color:#fff;font-size:12px;line-height:16px;text-align:center}

.sim-block{display:flex;align-items:center;gap:9px;padding:9px 11px;border-radius:11px;
  border:1px solid var(--hairline);background:rgba(255,255,255,.025)}
.sim-block b{display:block;font-size:11px;color:var(--bone)}
.sim-block span{font-size:9.5px;color:var(--muted)}
.sim-block-accent{border-color:rgba(199,49,46,.35);background:rgba(199,49,46,.08)}
.sim-block-accent svg{color:var(--red-soft)}
.sim-slots{display:flex;gap:5px;margin-top:4px}
.sim-slots i{font-style:normal;font-size:9px;padding:2px 7px;border-radius:6px;
  border:1px solid var(--hairline);color:var(--muted)}
.sim-slots i.on{background:var(--red);border-color:var(--red);color:#fff}

.sim-track{padding:9px 11px;border-radius:11px;border:1px solid var(--hairline);
  background:rgba(255,255,255,.025)}
.sim-track b{display:block;font-size:11px;color:var(--bone);margin-top:6px}
.sim-track span:last-child{font-size:9.5px;color:var(--muted)}
.sim-track-line{display:block;height:3px;border-radius:3px;background:rgba(255,255,255,.1)}
.sim-track-line i{display:block;height:100%;width:62%;border-radius:3px;background:var(--red)}

.sim-cartbar{display:flex;align-items:center;gap:8px;margin:0 12px 8px;padding:8px 11px;
  border-radius:11px;background:rgba(199,49,46,.14);border:1px solid rgba(199,49,46,.4)}
.sim-cartbar span{font-size:10px;color:var(--muted)}
.sim-cartbar b{font-size:11px;color:var(--bone);margin-left:auto}
.sim-cartbar em{font-style:normal;font-size:10px;background:var(--red);color:#fff;
  padding:4px 10px;border-radius:999px}
.sim-fab{position:absolute;right:14px;bottom:70px;width:34px;height:34px;border-radius:50%;
  background:var(--red);color:#fff;display:grid;place-items:center;
  box-shadow:0 8px 20px -6px rgba(199,49,46,.8)}
.sim-tabs{display:flex;justify-content:space-around;padding:8px 4px 12px;
  border-top:1px solid var(--hairline)}
.sim-tabs i{font-style:normal;display:flex;flex-direction:column;align-items:center;gap:3px;
  color:var(--muted)}
.sim-tabs i.on{color:var(--red-soft)}
.sim-tabs u{text-decoration:none;font-size:8px;letter-spacing:.02em}

/* ── the browser ─────────────────────────────────────────────────────── */
.sim-web .sim-chrome{display:flex;align-items:center;gap:10px;padding:9px 12px;
  border:1px solid var(--hairline);border-bottom:0;border-radius:14px 14px 0 0;
  background:rgba(255,255,255,.04)}
.sim-dots{display:flex;gap:5px}
.sim-dots i{width:8px;height:8px;border-radius:50%;background:rgba(255,255,255,.16)}
.sim-url{display:inline-flex;align-items:center;gap:6px;padding:3px 12px;border-radius:999px;
  background:rgba(0,0,0,.35);font-family:var(--font-mono,'JetBrains Mono',monospace);
  font-size:10px;color:var(--muted)}
.sim-page{border:1px solid var(--hairline);border-radius:0 0 14px 14px;background:#0b0d11;
  padding:14px;min-height:360px;box-shadow:0 26px 60px -34px rgba(0,0,0,.9)}
.sim-w-nav{display:flex;align-items:center;gap:14px;padding-bottom:12px;
  border-bottom:1px solid var(--hairline)}
.sim-w-nav b{font-size:.92rem;color:var(--bone);font-weight:700}
.sim-w-nav span{display:flex;gap:14px}
.sim-w-nav i{font-style:normal;font-size:11px;color:var(--muted)}
.sim-w-cart{margin-left:auto;display:inline-flex;align-items:center;gap:5px;font-style:normal;
  font-size:11px;color:var(--bone);border:1px solid var(--hairline);
  padding:4px 10px;border-radius:999px}
.sim-w-hero{margin:14px 0;padding:20px;border-radius:12px;
  background:linear-gradient(120deg,rgba(199,49,46,.16),rgba(255,255,255,.03))}
.sim-w-hero b{display:block;font-family:var(--font-display,'Cabinet Grotesk',sans-serif);
  font-size:1.3rem;color:var(--bone);letter-spacing:-.015em}
.sim-w-hero span{display:block;font-size:11.5px;color:var(--muted);margin:5px 0 11px}
.sim-w-cta{font-style:normal;display:inline-block;font-size:11px;background:var(--red);
  color:#fff;padding:6px 14px;border-radius:999px}
.sim-w-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.sim-w-card{border:1px solid var(--hairline);border-radius:11px;padding:9px;
  background:rgba(255,255,255,.025)}
.sim-w-card img{width:100%;height:62px;object-fit:contain;border-radius:8px}
.sim-w-card i{display:block;font-style:normal;font-size:10px;color:var(--muted);margin-top:5px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sim-w-card b{font-size:11px;color:var(--bone)}
.sim-w-panels{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  gap:10px;margin-top:12px}
.sim-w-panel{border:1px solid var(--hairline);border-radius:11px;padding:11px;
  background:rgba(255,255,255,.025)}
.sim-w-panel svg{color:var(--red-soft);margin-bottom:5px}
.sim-w-panel b{display:block;font-size:11px;color:var(--bone)}
.sim-w-panel span{font-size:9.5px;color:var(--muted);line-height:1.5}
@media(max-width:640px){ .sim-w-grid{grid-template-columns:1fr 1fr} }


/* The preview moved to its own page. It needs room and a dark room to work in, and
   inline it was a third thing competing with the feature list and the quote. This
   is the doorway: a sentence, not a widget. */
.ga-previewlink{display:flex;align-items:flex-start;gap:11px;margin:20px 0 6px;
  padding:14px 16px;border:1px solid var(--hairline);border-radius:13px;
  background:linear-gradient(120deg,rgba(199,49,46,.09),rgba(255,255,255,.02));
  font-size:.9rem;color:var(--muted);line-height:1.6}
.ga-previewlink i{color:var(--red-soft);font-size:18px;margin-top:1px}
.ga-previewlink a{color:var(--bone);font-weight:600;text-decoration:underline;
  text-underline-offset:3px;text-decoration-color:rgba(199,49,46,.6)}
.ga-previewlink a:hover{text-decoration-color:var(--red)}


/* ── brand colour picker ──────────────────────────────────────────────────
   Eight presets and a custom well. Presets first because most people want a
   sensible colour rather than a colour-wheel decision, and the swatch they
   pick has to be legible on the dark card it sits on. */
.ga-brandrow{display:flex;flex-wrap:wrap;gap:9px;align-items:center;margin:2px 0 8px}
.ga-sw{width:30px;height:30px;border-radius:9px;cursor:pointer;padding:0;
  background:var(--sw);border:2px solid transparent;box-shadow:inset 0 0 0 1px rgba(255,255,255,.16);
  transition:transform .16s var(--ease),border-color .16s var(--ease)}
.ga-sw:hover{transform:translateY(-2px)}
.ga-sw.on{border-color:var(--bone)}
.ga-sw:focus-visible{outline:2px solid var(--bone);outline-offset:2px}
.ga-sw-custom{width:30px;height:30px;border-radius:9px;overflow:hidden;position:relative;
  border:1px dashed var(--hairline);display:grid;place-items:center;cursor:pointer}
.ga-sw-custom input{position:absolute;inset:-6px;width:150%;height:150%;border:0;
  padding:0;background:none;cursor:pointer}
.ga-brandnote{font-size:.8rem;color:var(--muted);margin:0 0 4px;line-height:1.5}


/* ── the mock takes the visitor's brand colour ────────────────────────────
   One custom property set on each frame, so everything accented moves together
   instead of the mock being permanently Auraz red while the person is buying a
   green app. --b-soft/--b-line are the same hue at low alpha, which is what a
   real theme does rather than introducing a second colour. */
.sim-phone,.sim-web{--b:#C7312E;--b-soft:#C7312E29;--b-line:#C7312E66}
.sim-cats b{background:var(--b-soft);border-color:var(--b-line);color:var(--bone)}
.sim-add,.sim-fab,.sim-w-cta,.sim-slots i.on{background:var(--b)}
.sim-slots i.on{border-color:var(--b)}
.sim-track-line i{background:var(--b)}
.sim-cartbar{background:var(--b-soft);border-color:var(--b-line)}
.sim-cartbar em{background:var(--b)}
.sim-block-accent{background:var(--b-soft);border-color:var(--b-line)}
.sim-block-accent svg,.sim-w-panel svg{color:var(--b)}
.sim-w-hero{background:linear-gradient(120deg,var(--b-soft),rgba(255,255,255,.03))}
.sim-fab{box-shadow:0 8px 20px -6px var(--b-line)}

/* the logo, sized by its own proportions inside a fixed height */
.sim-logo{width:auto;max-width:120px;object-fit:contain;display:block}

/* ── the phone's tabs are real controls ───────────────────────────────── */
.sim-tab{appearance:none;background:none;border:0;padding:0;cursor:pointer;font:inherit;
  display:flex;flex-direction:column;align-items:center;gap:3px;color:var(--muted);
  transition:color .16s var(--ease),transform .16s var(--ease)}
.sim-tab:hover{color:var(--bone);transform:translateY(-1px)}
.sim-tab.on{color:var(--b)}
.sim-tab u{text-decoration:none;font-size:8px;letter-spacing:.02em}
.sim-tab:focus-visible{outline:2px solid var(--b);outline-offset:3px;border-radius:6px}

/* ── list screens (orders, rewards, bookings, account) ────────────────── */
.sim-lines{display:flex;flex-direction:column;gap:7px}
.sim-line{display:flex;align-items:baseline;gap:8px;padding:9px 11px;border-radius:10px;
  border:1px solid var(--hairline);background:rgba(255,255,255,.025)}
.sim-line b{font-size:11px;color:var(--bone)}
.sim-line span{font-size:9.5px;color:var(--muted)}
.sim-line em{font-style:normal;font-size:10px;color:var(--muted);margin-left:auto}


/* ── primary / secondary colour, as named choices ─────────────────────────
   A dropdown of names beats a colour wheel here: the person is describing a
   brand, and "Emerald" is what they will say back to you. The dot is the only
   swatch needed — it shows the choice without turning the control into a
   palette the eye has to scan. */
.ga-colrow{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:4px 0 10px}
@media(max-width:520px){ .ga-colrow{grid-template-columns:1fr} }
.ga-colfield{display:flex;flex-direction:column;gap:6px}
.ga-colfield>span{font-size:11.5px;color:var(--bone);font-weight:600}
.ga-colfield em{font-style:normal;font-size:11px;color:var(--muted);line-height:1.45}
.ga-colwrap{position:relative;display:flex;align-items:center}
.ga-coldot{position:absolute;left:11px;width:15px;height:15px;border-radius:5px;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.22);pointer-events:none}
.ga-colwrap select{width:100%;min-height:44px;padding:10px 12px 10px 34px;border-radius:11px;
  background:rgba(5,5,5,.4);border:1.5px solid var(--hairline);color:var(--bone);
  font:inherit;font-size:13.5px;cursor:pointer;appearance:none}
.ga-colwrap select:hover{border-color:rgba(255,255,255,.24)}
.ga-colwrap select:focus-visible{outline:2px solid var(--red);outline-offset:2px}
.ga-colwrap::after{content:'';position:absolute;right:14px;width:7px;height:7px;
  border-right:1.5px solid var(--muted);border-bottom:1.5px solid var(--muted);
  transform:translateY(-2px) rotate(45deg);pointer-events:none}

/* ── the doorway to the preview, inside the quote ─────────────────────────
   It belongs to the quote, not to the feature list: it is what you do once you
   have decided, so it sits under the summary of what you decided. */
.ga-previewlink{display:flex;align-items:center;gap:12px;margin:14px 0 4px;
  padding:13px 14px;border-radius:13px;text-decoration:none;
  border:1px solid var(--hairline);background:rgba(255,255,255,.03);
  transition:border-color .18s var(--ease),background .18s var(--ease)}
.ga-previewlink:hover{border-color:var(--red);background:rgba(199,49,46,.09)}
.ga-previewlink:focus-visible{outline:2px solid var(--red);outline-offset:2px}
.ga-pv-ico{display:grid;place-items:center;width:36px;height:36px;flex:none;
  border-radius:10px;border:1px solid var(--hairline);color:var(--red-soft)}
.ga-pv-ico svg{width:19px;height:19px}
.ga-pv-t{display:flex;flex-direction:column;gap:2px;min-width:0}
.ga-pv-t b{font-size:.92rem;color:var(--bone);font-weight:600}
.ga-pv-t em{font-style:normal;font-size:11.5px;color:var(--muted);line-height:1.4}
.ga-pv-go{margin-left:auto;color:var(--red-soft);font-size:17px;flex:none}

/* -- template picker ------------------------------------------------------
   Three looks of the same app. 44px+ targets, one active state, and no layout
   shift on press: the frames below are what should move, not the control. */
.sim-tpl{display:flex;gap:9px;flex-wrap:wrap;margin:0 0 18px}
.sim-tplbtn{appearance:none;cursor:pointer;font:inherit;text-align:left;
  min-height:44px;padding:9px 15px;border-radius:12px;
  border:1px solid var(--hairline);background:rgba(255,255,255,.03);
  display:flex;flex-direction:column;gap:1px;
  transition:border-color .18s var(--ease),background .18s var(--ease)}
.sim-tplbtn b{font-size:.88rem;color:var(--bone);font-weight:600}
.sim-tplbtn span{font-size:11px;color:var(--muted)}
.sim-tplbtn:hover{border-color:rgba(255,255,255,.24)}
.sim-tplbtn.on{border-color:var(--red);background:rgba(199,49,46,.10)}
.sim-tplbtn:focus-visible{outline:2px solid var(--red);outline-offset:2px}

/* -- the website, with the parts a website has -------------------------- */
.sim-w-hero{display:grid;grid-template-columns:1.35fr .65fr;gap:16px;align-items:center;
  margin:14px 0;padding:20px;border-radius:14px;
  background:linear-gradient(120deg,var(--b-soft),rgba(255,255,255,.03))}
.sim-w-kicker{display:inline-block;font-family:var(--font-mono,'JetBrains Mono',monospace);
  font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:var(--b);margin-bottom:7px}
.sim-w-hero b{display:block;font-family:var(--font-display,'Cabinet Grotesk',sans-serif);
  font-size:1.5rem;line-height:1.05;color:var(--bone);letter-spacing:-.02em}
.sim-w-lede{display:block;font-size:11.5px;color:var(--muted);margin:7px 0 12px;line-height:1.55}
.sim-w-ctas{display:flex;gap:8px}
.sim-w-cta,.sim-w-cta2{font-style:normal;display:inline-block;font-size:11px;
  padding:7px 15px;border-radius:999px}
.sim-w-cta{background:var(--b);color:#fff}
.sim-w-cta2{border:1px solid var(--hairline);color:var(--bone)}
.sim-w-hero-art img{width:100%;height:96px;object-fit:contain}
.sim-w-strip{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin-bottom:14px}
.sim-w-strip span{padding:9px 11px;border-radius:10px;background:var(--b2-soft);
  border:1px solid var(--hairline)}
.sim-w-strip b{display:block;font-size:10.5px;color:var(--bone)}
.sim-w-strip i{font-style:normal;font-size:9px;color:var(--muted)}
.sim-w-secthead{display:flex;align-items:baseline;justify-content:space-between;margin:0 0 9px}
.sim-w-secthead b{font-size:.95rem;color:var(--bone)}
.sim-w-secthead i{font-style:normal;font-size:10.5px;color:var(--b)}
.sim-w-foot{display:grid;grid-template-columns:1.4fr 1fr 1fr;gap:14px;margin-top:16px;
  padding-top:14px;border-top:1px solid var(--hairline)}
.sim-w-foot b{display:block;font-size:11px;color:var(--bone)}
.sim-w-foot span{font-size:9.5px;color:var(--muted)}
.sim-w-foot i{display:block;font-style:normal;font-size:10px;color:var(--muted);margin-bottom:4px}

/* -- three templates ------------------------------------------------------
   Same content, three compositions. Classic is roomy and photo-led; Bold is
   large type and high contrast with the picture doing the talking; Compact is
   dense and list-first, for someone who values speed over air. */
.tpl-bold .sim-w-hero{grid-template-columns:1fr;text-align:center;padding:30px 22px}
.tpl-bold .sim-w-hero b{font-size:2.15rem;letter-spacing:-.035em}
.tpl-bold .sim-w-ctas{justify-content:center}
.tpl-bold .sim-w-hero-art{display:none}
.tpl-bold .sim-w-grid{grid-template-columns:repeat(2,1fr)}
.tpl-bold .sim-w-card img{height:104px}
.tpl-bold .sim-w-nav b{font-size:1.12rem}
.tpl-bold .sim-cats b,.tpl-bold .sim-w-cta{border-radius:8px}
.tpl-bold .sim-card,.tpl-bold .sim-w-card{border-radius:8px}

.tpl-compact .sim-w-hero{padding:13px 15px;gap:11px}
.tpl-compact .sim-w-hero b{font-size:1.12rem}
.tpl-compact .sim-w-lede{display:none}
.tpl-compact .sim-w-hero-art img{height:56px}
.tpl-compact .sim-w-grid{grid-template-columns:repeat(6,1fr);gap:7px}
.tpl-compact .sim-w-card{padding:6px;border-radius:8px}
.tpl-compact .sim-w-card img{height:38px}
.tpl-compact .sim-grid{grid-template-columns:repeat(3,1fr);gap:6px}
.tpl-compact .sim-card img{height:32px}
.tpl-compact .sim-card i{font-size:8.5px}
.tpl-compact .sim-w-strip{margin-bottom:9px}
.tpl-compact .sim-body{gap:6px}

@media(max-width:640px){
  .tpl-compact .sim-w-grid{grid-template-columns:repeat(3,1fr)}
  .sim-w-hero,.sim-w-foot{grid-template-columns:1fr}
  .sim-w-strip{grid-template-columns:1fr}
}


/* -- clear all ------------------------------------------------------------
   Sits at the end of the category row, quiet until wanted. Ghost rather than
   solid: it is a way out, not the thing to do next. */
.ga-clearall{margin-left:auto;appearance:none;cursor:pointer;font:inherit;
  min-height:36px;padding:7px 15px;border-radius:999px;font-size:12.5px;
  color:var(--muted);background:none;border:1px solid var(--hairline);
  transition:color .18s var(--ease),border-color .18s var(--ease)}
.ga-clearall:hover{color:var(--bone);border-color:var(--red)}
.ga-clearall:focus-visible{outline:2px solid var(--red);outline-offset:2px}

/* -- the feature you arrived for ----------------------------------------- */
.ga-feat-landed{border-color:var(--red) !important;
  box-shadow:0 0 0 3px rgba(199,49,46,.18)}
@media (prefers-reduced-motion:no-preference){
  .ga-feat-landed{animation:gaLanded 2.4s var(--ease)}
  @keyframes gaLanded{0%{box-shadow:0 0 0 0 rgba(199,49,46,.45)}
                      60%{box-shadow:0 0 0 6px rgba(199,49,46,.10)}
                      100%{box-shadow:0 0 0 3px rgba(199,49,46,.18)}}
}

/* .field input sets min-height:44px and padding for TEXT inputs, and the
   agreement wrapper carries .field -- so the checkbox inherited a 44px box
   with 14px of side padding and came out 30x44 instead of square. Checkboxes
   are not text fields; exempt them once, for every field on the page. */
.field input[type=checkbox],.field input[type=radio]{min-height:0;padding:0}
.ga-agree{display:flex;align-items:flex-start;gap:11px;cursor:pointer;padding:4px 0}
.ga-agree span{font-size:.88rem;line-height:1.6;color:var(--muted)}

/* -- colour listbox -------------------------------------------------------
   Replaces a native <select>, whose popup the OS draws and no stylesheet can
   reach. 44px trigger, themed list, visible focus, keyboard-closable. */
.ga-cdd{position:relative}
.ga-cdd-btn{display:flex;align-items:center;gap:10px;width:100%;min-height:44px;
  padding:10px 14px;border-radius:11px;cursor:pointer;font:inherit;font-size:13.5px;
  color:var(--bone);background:rgba(5,5,5,.4);border:1.5px solid var(--hairline);
  transition:border-color .18s var(--ease)}
.ga-cdd-btn:hover{border-color:rgba(255,255,255,.24)}
.ga-cdd-btn:focus-visible{outline:2px solid var(--red);outline-offset:2px}
.ga-cdd.is-open .ga-cdd-btn{border-color:var(--red)}
.ga-cdd-dot{width:16px;height:16px;border-radius:5px;flex:none;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.22)}
.ga-cdd-caret{margin-left:auto;width:7px;height:7px;flex:none;
  border-right:1.5px solid var(--muted);border-bottom:1.5px solid var(--muted);
  transform:translateY(-2px) rotate(45deg)}
.ga-cdd-list{position:absolute;z-index:60;left:0;right:0;top:calc(100% + 6px);
  max-height:260px;overflow:auto;padding:6px;border-radius:12px;
  background:#0d0f13;border:1px solid var(--hairline);
  box-shadow:0 28px 60px -24px rgba(0,0,0,.9);overscroll-behavior:contain}
.ga-cdd-opt{display:flex;align-items:center;gap:10px;width:100%;min-height:38px;
  padding:8px 10px;border:0;border-radius:8px;cursor:pointer;font:inherit;
  font-size:13px;color:var(--bone);background:none;text-align:left}
.ga-cdd-opt:hover{background:rgba(255,255,255,.06)}
.ga-cdd-opt.on{background:rgba(199,49,46,.16)}
/* The hex, pushed to the trailing edge so every code lines up in a column and the eye
   can run down it. Monospaced and tabular so #0E9F6E and #111827 occupy the same width;
   quieter than the name, because the name is the label and this is its reference. */
.ga-cdd-nm{flex:1 1 auto;min-width:0}
.ga-cdd-hex{
  margin-inline-start:auto;flex:none;
  font-family:var(--font-mono,'JetBrains Mono',monospace);
  font-size:11px;letter-spacing:.02em;font-variant-numeric:tabular-nums;
  color:var(--muted);
}
.ga-cdd-opt.on .ga-cdd-hex{color:var(--bone)}
/* On the closed button the caret already owns the trailing edge, so the hex sits just
   before it rather than pushing it off. */
.ga-cdd-btn .ga-cdd-hex{margin-inline-start:auto;margin-inline-end:2px}
@media (max-width:22rem){
  /* Below ~350px the name and the code start to crowd; the code is the droppable one. */
  .ga-cdd-btn .ga-cdd-hex{display:none}
}
.ga-cdd-opt:focus-visible{outline:2px solid var(--red);outline-offset:-2px}

/* -- the agreement checkbox, stated once and explicitly ------------------
   Sized here rather than inherited, because it sits inside a .field whose
   input rules are written for text boxes. 20px so it reads at the weight of
   the sentence beside it; the LABEL carries the 44px target. */
.ga-agree{display:flex;align-items:flex-start;gap:11px;cursor:pointer;
  padding:6px 0;min-height:44px}
.ga-agree input[type=checkbox]{appearance:none;-webkit-appearance:none;
  flex:0 0 auto;width:20px;height:20px;min-height:20px;min-width:20px;
  margin:2px 0 0;padding:0;border-radius:6px;cursor:pointer;
  border:1.5px solid var(--hairline);background:rgba(5,5,5,.4);
  display:grid;place-content:center;transition:background .16s var(--ease),
  border-color .16s var(--ease)}
.ga-agree input[type=checkbox]::after{content:'';width:10px;height:6px;
  border-left:2px solid #fff;border-bottom:2px solid #fff;
  transform:rotate(-45deg) scale(0);transition:transform .16s var(--ease)}
.ga-agree input[type=checkbox]:checked{background:var(--red);border-color:var(--red)}
.ga-agree input[type=checkbox]:checked::after{transform:rotate(-45deg) scale(1)}
.ga-agree input[type=checkbox]:focus-visible{outline:2px solid var(--red);outline-offset:2px}
.ga-agree span{font-size:.88rem;line-height:1.6;color:var(--muted)}


/* ── Toast ─────────────────────────────────────────────────────
   Used when a click cannot go where it promised (a workspace that is not serving).
   Sits under the bar rather than over it, so the nav stays reachable while it shows. */
.az-toasts{position:fixed;top:calc(var(--nav-h,74px) + 12px);left:50%;transform:translateX(-50%);
  z-index:1200;display:flex;flex-direction:column;gap:10px;width:min(30rem,calc(100vw - 2rem));
  pointer-events:none}
/* The RESTING state is visible, and the entrance is decoration laid on top. Gating
   visibility behind a transition means a tab that never composites — hidden, prerendered,
   throttled — leaves the notice at opacity 0 forever, telling the visitor nothing at all.
   An animation that never runs simply leaves the base style showing, which is correct. */
.az-toast{pointer-events:auto;display:flex;align-items:flex-start;gap:12px;padding:14px 14px 14px 16px;
  border-radius:14px;border:1px solid rgba(255,255,255,.10);background:rgba(20,14,14,.92);
  backdrop-filter:blur(14px);box-shadow:0 18px 44px rgba(0,0,0,.5);color:var(--bone);
  opacity:1;transform:none}
/* Opt IN to the entrance, never out of it. A CSS animation sits frozen at its first
   keyframe in a tab that is not compositing, so an unconditional "fade in from 0" is a
   toast nobody ever sees. auth.js adds this class only when the page is actually visible;
   with no class the base style — visible — is what shows. */
@media (prefers-reduced-motion:no-preference){
  .az-toast.enter{animation:azToastIn .22s ease}
}
@keyframes azToastIn{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
.az-toast.out{opacity:0;transform:translateY(-8px);transition:opacity .2s ease,transform .2s ease}
.az-toast.is-warn{border-left:3px solid var(--red)}
.az-toast-msg{margin:0;font-size:.94rem;line-height:1.55;flex:1}
.az-toast-x{flex:none;background:none;border:0;color:var(--muted);font-size:20px;line-height:1;
  cursor:pointer;padding:0 2px;border-radius:6px}
.az-toast-x:hover{color:var(--bone)}
.az-toast-x:focus-visible{outline:2px solid var(--red);outline-offset:2px}
@media (prefers-reduced-motion:reduce){.az-toast,.az-toast.out{transition:none;animation:none}}

/* ── The agreement checkbox, settled ──────────────────────────────────────
   This control has been restyled three times and kept coming back wrong, because
   four rule sets were arguing over it: a shared block that styles six controls at
   18px with an absolutely-positioned tick, a later .ga-agree block at 20px with a
   grid-centred one, a legacy 17px native rule, and a global touch-target
   transform:scale(1.15) that rendered a 20px box at 23px and — with
   transform-origin:left center — moved the paint without moving the layout.

   So this is one authoritative block, last in the file, and it does not rely on
   ::after at all. The tick is a background-image: it cannot be repositioned by a
   stray `position` inherited from another rule set, cannot be scaled to nothing by
   a competing transform, and needs no pseudo-element to exist. Everything the box
   needs is declared here, so nothing above can leave it half-styled. */
.ga-agree input[type="checkbox"]{
  -webkit-appearance:none;appearance:none;
  flex:0 0 auto;box-sizing:border-box;
  width:20px;height:20px;min-width:20px;min-height:20px;max-width:20px;max-height:20px;
  margin:1px 0 0;padding:0;transform:none;position:relative;
  border:1.5px solid rgba(255,255,255,.28);border-radius:6px;
  background-color:rgba(5,5,5,.45);
  background-image:none;background-repeat:no-repeat;background-position:center;
  background-size:14px 14px;
  cursor:pointer;display:inline-block;vertical-align:top;
  transition:background-color .16s ease,border-color .16s ease;
}
.ga-agree input[type="checkbox"]::after,
.ga-agree input[type="checkbox"]::before{content:none;display:none}
.ga-agree input[type="checkbox"]:hover{border-color:var(--red-soft,#E2574E)}
.ga-agree input[type="checkbox"]:checked{
  background-color:#C7312E;border-color:#C7312E;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23fff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round' d='M3.5 8.5l3 3 6-6'/%3E%3C/svg%3E");
}
.ga-agree input[type="checkbox"]:focus-visible{
  outline:2px solid #E2574E;outline-offset:2px}
/* the sentence sits beside the box, not under it */
.ga-agree{display:flex;align-items:flex-start;gap:11px}
@media (prefers-reduced-motion:reduce){
  .ga-agree input[type="checkbox"]{transition:none}
}

/* The tracker link on the request-received panel. Below the reference, not beside
   the tick: the confirmation is the message, this is the next step after it. */
.ga-done-track{margin-top:16px;display:inline-flex;align-items:center;gap:8px}

/* ══ My app requests — the floating tracker button ══════════════════════════════
   Bottom-right, on every marketing page except the tracker itself. A circle that
   grows a label on hover and on keyboard focus, so it reads as a destination
   rather than a mystery glyph — and it announces itself either way through the
   aria-label, which is what a screen reader gets.

   The label expansion animates max-width, not width: the button has no fixed
   width to animate FROM, and animating width from auto does nothing at all. */
.az-rq-fab{
  position:fixed; right:22px; bottom:22px; z-index:9990;
  display:inline-flex; align-items:center; gap:0;
  height:56px; padding:0 16px; border-radius:999px;
  background:var(--red); color:#fff; text-decoration:none;
  box-shadow:0 14px 34px -12px rgba(199,49,46,.75), 0 2px 8px rgba(0,0,0,.25);
  /* opacity + visibility join the list so the reveal fades rather than snaps; the
     visibility delay lets the fade finish before it leaves the a11y tree. */
  transition:gap .22s ease, transform .22s ease, box-shadow .22s ease, bottom .22s ease,
             opacity .28s ease, visibility 0s linear .28s;
}
/* Hidden until the hero is behind you — see mountRequestsFab in site.js. Kept out of
   the tab order and off the a11y tree while hidden, so it is not a button a keyboard
   or a screen reader can reach but a sighted user cannot see. */
.az-rq-fab{opacity:0; transform:translateY(10px) scale(.94); pointer-events:none; visibility:hidden}
.az-rq-fab.az-rq-show{opacity:1; transform:none; pointer-events:auto; visibility:visible;
  transition-delay:0s}
.az-rq-fab svg{flex:none; display:block}
.az-rq-fab-l{
  max-width:0; overflow:hidden; white-space:nowrap;
  font-family:var(--font-sans,inherit); font-size:14px; font-weight:700; letter-spacing:.01em;
  transition:max-width .26s cubic-bezier(.2,.7,.3,1);
}
.az-rq-fab:hover,.az-rq-fab:focus-visible{
  gap:10px; transform:translateY(-2px);
  box-shadow:0 20px 42px -14px rgba(199,49,46,.85), 0 3px 10px rgba(0,0,0,.3);
}
.az-rq-fab:hover .az-rq-fab-l,.az-rq-fab:focus-visible .az-rq-fab-l{max-width:190px}
.az-rq-fab:focus-visible{outline:2px solid #fff; outline-offset:3px}
/* Clearing the consent bar is site.js's job: it measures the banner and sets `bottom`
   on the element, because the banner's height changes as it wraps and no constant here
   could follow it. This rule keeps `bottom` transitionable so the move is not a jump. */
@media (max-width:48rem){ .az-rq-fab{right:16px; bottom:16px} }
@media (prefers-reduced-motion:reduce){
  .az-rq-fab,.az-rq-fab-l{transition:none}
  .az-rq-fab:hover,.az-rq-fab:focus-visible{transform:none}
}
