/*
   ══ demo-dashboard ══════════════════════════════════════════════════════════════════════════════════

   demo-dashboard.html's own CSS, lifted verbatim out of its inline <style> block. ADR-0063 / CODE-01.
   Rule order is byte-for-byte what it was inline.
   Rules shared by all 24 marketing pages are in glance-base.css, linked immediately before
   this file. Both sit exactly where the <style> block used to, so glance-motion.css and
   glance-identity.css still come after and still win.
*/

:root{
    --bg:#17140f; --panel:#211d16; --panel2:#2a251c; --text:#f2ede2; --muted:#a89e8c;
    --line:#38322a; --accent:#c5311d; --teal:#c08a2e; --good:#5fcf9a; --bad:#ff7b7b;
    --shadow:0 10px 40px rgba(0,0,0,.45);
  }
  @media (prefers-color-scheme: light){
    :root:not([data-theme]){--bg:#f5f2ea;--panel:#fffdf8;--panel2:#ece5d7;--text:#191712;--muted:#5f5a50;
      --line:#ddd6c8;--shadow:0 10px 40px rgba(20,40,90,.10);}
  }

  body{margin:0;font:15px/1.55 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
    background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;
    font-variant-numeric:tabular-nums}
  .ribbon{background:linear-gradient(90deg,var(--accent),var(--teal));color:#04121c;
    text-align:center;font-size:12px;font-weight:600;letter-spacing:.03em;padding:6px}
  .ribbon a{color:#04121c;font-weight:700}

  header{display:flex;align-items:center;gap:13px;padding:16px 22px;
    border-bottom:1px solid var(--line);background:var(--panel)}
  header .client{font-weight:700;font-size:19px;letter-spacing:-.02em}
  header .tag{font-size:12px;color:var(--muted);border:1px solid var(--line);
    border-radius:20px;padding:3px 10px}
  @media(max-width:560px){header .tag{display:none}}
  header .live{margin-left:auto;display:inline-flex;align-items:center;gap:8px;
    font-size:13px;color:var(--muted)}
  header .live .dot{width:9px;height:9px;border-radius:50%;background:var(--teal);
    box-shadow:0 0 0 4px rgba(192,138,46,.20)}
  @media (prefers-reduced-motion: no-preference){
    header .live .dot{animation:pulse 2.4s ease-in-out infinite}
    @keyframes pulse{0%,100%{box-shadow:0 0 0 4px rgba(192,138,46,.20)}50%{box-shadow:0 0 0 7px rgba(192,138,46,.05)}}
  }

  /* audience switcher */
  .switchbar{display:flex;justify-content:center;padding:20px 22px 0}
  .seg{display:flex;gap:6px;background:var(--panel);border:1px solid var(--line);
    border-radius:12px;padding:5px}
  .seg button{appearance:none;border:0;background:transparent;color:var(--muted);
    font:inherit;font-size:13px;font-weight:600;padding:8px 16px;border-radius:8px;cursor:pointer}
  .seg button.on{background:linear-gradient(135deg,#c5311d,#a8321f);color:#fff}
  .seg button:hover:not(.on){color:var(--text)}

  /* Three demo sequences — Mia, Sam, Elena — replacing what used to be an instant, static
     swap of the same board with different numbers. Each opens differently (a forwarded export,
     a POS drop, sources already streaming in) and ends in a shape that fits ITS decision: a
     ranked category list, a flagged weekday, a branch table with a change indicator. */
  .seqsec{max-width:1080px;margin:18px auto 0;padding:0 22px}
  .seqcard{margin-bottom:0}
  .seqwho{margin:0 0 12px;font-size:14.5px;line-height:1.55;color:var(--muted)}
  .seqwho b{color:var(--text)}
  .rd-barrow{display:flex;align-items:flex-end;gap:8px}
  .rd-barrow .rd-bars{flex:1}
  .rd-barlabel{flex:0 0 64px;font-size:10.5px;color:var(--muted);padding-bottom:4px}
  .rd-daylabels{display:flex;gap:5px;margin:2px 0 0 72px}
  .rd-daylabels span{flex:1;text-align:center;font-size:9.5px;color:var(--muted)}
  @media(max-width:480px){.rd-barlabel{flex-basis:52px;font-size:9.5px}.rd-daylabels{margin-left:60px}}

  main{max-width:1080px;margin:0 auto;padding:20px 22px 60px;display:flex;flex-direction:column;gap:22px}
  .row{display:grid;gap:14px}
  .kpis{grid-template-columns:repeat(4,1fr)}
  @media(max-width:720px){.kpis{grid-template-columns:repeat(2,1fr)}}
  .charts{grid-template-columns:1.6fr 1fr}
  @media(max-width:820px){.charts{grid-template-columns:1fr}}

  .card{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:18px;box-shadow:var(--shadow)}
  .kpi .l{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}
  .kpi .v{font-size:26px;font-weight:700;margin-top:6px;letter-spacing:-.02em}
  .kpi .d{font-size:12px;margin-top:4px;display:inline-flex;align-items:center;gap:4px;color:var(--muted)}
  .kpi .d.up{color:var(--good)} .kpi .d.down{color:var(--bad)}

  .card h3{margin:0 0 2px;font-size:15px;letter-spacing:-.01em}
  .card .sub{margin:0 0 14px;font-size:12px;color:var(--muted)}

  /* line chart */
  .chart{position:relative}
  svg.line{display:block;width:100%;height:auto;overflow:visible;touch-action:none}
  .grid line{stroke:var(--line)} .axis-l{fill:var(--muted);font-size:11px}
  .tt{position:absolute;pointer-events:none;background:var(--panel2);border:1px solid var(--line);
    border-radius:9px;padding:7px 10px;font-size:12px;transform:translate(-50%,-115%);
    white-space:nowrap;opacity:0;transition:opacity .1s;box-shadow:var(--shadow)}
  .tt b{font-size:14px}

  /* breakdown bars */
  .chan{display:flex;flex-direction:column;gap:12px;margin-top:4px}
  .chan .r{display:grid;grid-template-columns:92px 1fr auto;align-items:center;gap:10px;font-size:13px}
  .chan .track{height:9px;border-radius:6px;background:var(--panel2);overflow:hidden}
  .chan .fill{height:100%;border-radius:6px;background:linear-gradient(90deg,var(--accent),var(--teal))}
  .chan .pct{color:var(--muted);font-size:12px;min-width:34px;text-align:right}

  .lists{grid-template-columns:1fr 1fr}
  @media(max-width:720px){.lists{grid-template-columns:1fr}}
  .li{display:flex;justify-content:space-between;padding:9px 0;border-bottom:1px solid var(--line);font-size:14px}
  .li:last-child{border-bottom:0}
  .li .m{color:var(--muted)}

  footer{padding:26px 22px;text-align:start;font-size:12px;color:var(--muted);border-top:1px solid var(--line)}
  footer a{color:var(--ink-accent);text-decoration:none;font-weight:600}

  /* ---- responsive pass: phones & tablets ---- */
  @media(max-width:900px){
    .nav{padding:12px 16px}
    .wrap{padding:0 16px}
    section{padding:36px 0}
  }
  @media(max-width:640px){
    /* The nav collapses to brand + Log in; the footer carries the full sitemap. */
    .nav-links{gap:10px}
    header{padding:36px 0 40px}
    h1{font-size:clamp(28px,8vw,38px)}
    .sub{font-size:17px}
    .cta-row{flex-direction:column;align-items:stretch}
    .cta-row .btn{text-align:center;width:100%}
    .cards>*{flex-basis:100%;max-width:100%}
    .kpis{grid-template-columns:repeat(2,1fr)}
    .tiers,.plans,.jobs,.cmp-grid{grid-template-columns:1fr}
    table{font-size:14px}
    .mock{padding:14px}
  }
  @media(max-width:400px){
    .kpis{grid-template-columns:1fr}
  }

  /* Text-only ink. The brand mint (#c08a2e) measures 1.7:1 on white and the blue
     3.2:1 — both fail as text. Buttons keep the bright brand colours; text uses these. */

  @media (prefers-color-scheme: light){
    :root{--ink-accent:#c5311d;--ink-accent2:#a8321f;--muted:#4d566a}
  }
  .eyebrow{color:var(--ink-accent2)}

  /* Explicit theme choice beats the system preference. */
  :root[data-theme="light"]{--bg:#f5f2ea;--panel:#fffdf8;--panel2:#ece5d7;--text:#191712;
    --muted:#4d566a;--line:#ddd6c8;--shadow:0 10px 40px rgba(20,40,90,.10);
    --ink-accent:#c5311d;--ink-accent2:#a8321f}
  :root[data-theme="dark"]{--ink-accent:#d9705e;--ink-accent2:#c08a2e;--good:#5fcf9a;
    --bg:#17140f;--panel:#211d16;--panel2:#2a251c;--text:#f2ede2;
    --muted:#a89e8c;--line:#38322a;--shadow:0 10px 40px rgba(0,0,0,.45);
    --ink-accent:#c5311d;--ink-accent2:#c08a2e}

  /* Phone tap targets. A link 16px tall is a miss waiting to happen — Apple and Google both
     say ~44px. The text stays the same size; the TAPPABLE BOX grows. */

  /* Tap targets on a phone (WCAG 2.5.5). Vertical padding on a link grows the TAPPABLE BOX
     without moving anything: on an inline link it doesn't change the line height at all, and
     on a standalone one it lifts a 28px target to a thumb-sized 44px. Buttons already have
     their own padding and are excluded. */

  /* "Log in" in the nav was 33px — one pixel under the threshold, and it's the single most
     important link on the page for a returning user. */

  /* Tablets show the FULL nav (a phone collapses it to brand + Log in), so those links need
     tap targets too — and the phone-only breakpoint never reached them. Touch is touch,
     whether the screen is 390px or 834px. */

  h1.client{font-size:16px;font-weight:700;margin:0;letter-spacing:-.01em;display:inline}
  /* ── Footer ──────────────────────────────────────────────────────────────
     It listed six links and left out Iris, Compare, Reviews and the release notes — half the
     site. A footer is where people go when the page they're on didn't answer them; it should be
     the map, not a formality. */

  /* The column headers were the same muted grey as the links beneath them, so the footer read as
     one undifferentiated list of sixteen things. A header has to look like a header. */

  /* Spans the full footer width — it was capped at 78ch and stopped short of the
     columns above it, which made it read as a stray note pinned to the side rather
     than part of the footer. */

  /* Phones. The footer had collapsed to ONE centred column: sixteen links stacked down the screen
     with 32px of air between them, so the last thing anyone saw before leaving was a minute of
     scrolling. Most people are on a phone, so this is the layout that matters most.

     Two columns, left-aligned, tight. A footer is a map you scan, not prose you read — and you
     cannot scan a centred single column, because your eye has no edge to run down. Tap targets
     stay at 44px; the spacing comes out of the padding around the text, not the text itself. */

  /* ── Language switcher ───────────────────────────────────────────────────
     Same place and weight as the theme toggle, because that's what it is: a preference you flip. */

  /* Arabic mirrors the document; these are the few things that were hard-coded to the left. */

  /* ── Headings ─────────────────────────────────────────────────────────────
     Appended last, so it wins on every page regardless of what that page declared. */
  h2{font-size:clamp(27px,4.4vw,40px)!important;font-weight:800!important;line-height:1.15;
     letter-spacing:-.025em}
  h3{font-weight:700;letter-spacing:-.015em}
  section{padding-top:58px}
  .eyebrow{font-size:12px;font-weight:750;letter-spacing:.1em;text-transform:uppercase;
     color:var(--ink-accent2)}
  @media (max-width:600px){
    h2{font-size:clamp(24px,7vw,30px)!important}
    section{padding-top:44px}
  }
  /* The footer has its own surface, so its links need their own green — the page's accent drops to
     4.23:1 against it. Contrast is a relationship, not a property of a colour. */
  /* NOT the CTA — it's a filled blue button, and colouring its label green put mint text on blue
     at 3.26:1. A rule that says "every link in the footer" also means the one that isn't a link. */
  footer a:not(.ftcta){color:var(--good)}
  footer .ftmail{color:var(--good)}
  html[data-theme="dark"] footer a:not(.ftcta){color:#c08a2e}
  html[data-theme="dark"] footer .ftmail{color:#c08a2e}
  footer .ftcta{color:#fff}
  footer .ftcol a{color:var(--muted)}
  footer .ftcol a:hover{color:var(--text)}
  footer .ftbase a{color:var(--muted)}
  /* The nav CTA — the one thing we want a stranger to do, and it had no button anywhere. */
  .nav-cta{background:var(--gc-brand,#c5311d);color:#fff!important;border-radius:10px;
    padding:9px 15px;font-weight:650;text-decoration:none;min-height:44px;
    display:inline-flex;align-items:center}
  .nav-cta:hover{filter:brightness(1.08)}

  @media (max-width:900px){
    .nav-cta{padding:8px 12px}
  }
  /* ── Nav dropdowns ────────────────────────────────────────────────────────
     Fourteen flat links made everything equally unimportant; five hid pages people want. Three
     groups, each holding what belongs together, and the descriptions do the work a bare word can't:
     "Iris" means nothing until it says "she reads your bill and builds the dashboard". */
  .navdrop{position:relative}
  .navtop{display:inline-flex;align-items:center;gap:5px;border:0;background:none;cursor:pointer;font-weight:650;
    color:inherit;font:inherit;font-size:15px;padding:8px 2px;min-height:44px}

  .navtop i{width:6px;height:6px;border-right:1.8px solid currentColor;border-bottom:1.8px solid currentColor;
    transform:rotate(45deg) translateY(-1px);transition:transform .18s ease;opacity:.6}
  .navdrop[data-open="1"] .navtop i{transform:rotate(-135deg) translateY(-1px)}
  .navtop:focus-visible{outline:2px solid var(--gc-brand,#c5311d);outline-offset:2px;border-radius:6px}

  .navmenu{position:absolute;z-index:70;top:calc(100% + 10px);inset-inline-start:0;width:308px;
    background:var(--gc-card,var(--panel));border:1px solid var(--line);border-radius:14px;
    padding:7px;box-shadow:0 20px 54px rgba(8,12,20,.20);
    opacity:0;visibility:hidden;transform:translateY(-6px);
    /* visibility is NOT transitioned. If it fades in over 160ms, the links inside are not
       focusable at the instant the browser computes tab order — so a keyboard user pressing Tab
       sails straight past the menu and lands somewhere else entirely, and the menu shuts behind
       them. It flips instantly; only the opacity and the movement are animated. */
    transition:opacity .16s ease,transform .16s ease}
  .navdrop[data-open="1"] .navmenu{opacity:1;visibility:visible;transform:none}
  .navmenu a{display:block;padding:10px 12px;border-radius:10px;text-decoration:none;min-height:44px}
  .navmenu a:hover{background:var(--bg)}
  .navmenu a:focus-visible{outline:2px solid var(--gc-brand,#c5311d);outline-offset:-2px}
  .navmenu b{display:block;font-size:14.5px;color:var(--text);font-weight:650}
  .navmenu span{display:block;font-size:12.5px;color:var(--muted);line-height:1.45;margin-top:2px}

  /* On a phone the menu is already a stack — a dropdown inside a drawer is a maze. Everything
     shows, indented, and you scroll. */
  .navburger{display:none;background:var(--panel2);border:1px solid var(--line);color:var(--text);
    width:34px;height:34px;border-radius:10px;cursor:pointer;flex:0 0 34px;
    align-items:center;justify-content:center}
  .navburger:hover{border-color:var(--ink-accent)}
  .navburger svg{display:block}
  .navburger .x{display:none}
  .nav[data-mobopen="1"] .navburger .bars{display:none}
  .nav[data-mobopen="1"] .navburger .x{display:block}
  @media (max-width:900px){
    .nav{flex-wrap:wrap;row-gap:10px}
    .navburger{display:inline-flex}
    .nav-links{order:9;flex-basis:100%;flex-direction:column;align-items:stretch;gap:2px;
      display:none}
    .nav[data-mobopen="1"] .nav-links{display:flex}
    .nav-links .nav-login{margin-top:8px}
    .navdrop{width:100%}
    /* Product / Solutions / More stay collapsed and match the real site map — the same
       click-toggle in glance-nav.js that opens the desktop dropdown opens these, just reshaped
       from a floating panel into an inline accordion row. */
    .navtop{display:flex;width:100%;justify-content:space-between;padding:11px 0}
    .navmenu{position:static;width:100%;transform:none;box-shadow:none;border:0;padding:0;
      background:none;max-height:0;overflow:hidden;transition:max-height .25s ease}
    .navdrop[data-open="1"] .navmenu{max-height:600px}
    .navmenu span{display:none}
    .navmenu a{padding:10px 0 10px 14px;min-height:0}
    .nav-links>a:not(.nav-login):not(.nav-cta){color:var(--text);font-weight:650;
      font-size:14.5px;padding:11px 0}
    /* Language + theme aren't menu items — they're page controls. Off the collapsed top bar,
       and only into view at the bottom of the open panel, not stacked in with the links. */
    .langwrap,.themebtn{display:none;order:10;margin-top:8px}
    .nav[data-mobopen="1"] .langwrap{display:block;border-top:1px solid var(--line);
      padding-top:12px;width:100%}
    .nav[data-mobopen="1"] .themebtn{display:inline-grid}
    /* A right-anchored 240px dropdown hanging off a left-hand button runs straight off the left
       edge of a phone — it was opening at left:-166px, so most of the languages couldn't be
       reached at all. At this width it isn't a dropdown; it's a list. */
    .langmenu{position:static;width:100%;box-shadow:none;margin-top:8px}
  }

  /* ── Build one from your rows ── */
  .builder{max-width:960px;margin:6px auto 0;padding:0 22px}
  .bwrap{border:1px solid var(--line);border-radius:16px;background:var(--panel);padding:20px}
  .builder h2{margin:0 0 6px;font-size:clamp(19px,3vw,24px)!important}
  .blead{margin:0 0 14px;color:var(--muted);font-size:14.5px;line-height:1.6}
  .bchips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:10px}
  .bchips button{border:1px solid var(--line);background:var(--bg);color:var(--text);border-radius:999px;
    padding:9px 15px;font:inherit;font-size:13.5px;font-weight:600;cursor:pointer;min-height:44px}
  .bchips button:hover,.bchips button.on{border-color:var(--accent);color:var(--accent)}
  .builder textarea{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:12px;
    background:var(--bg);color:var(--text);font:12.5px/1.6 ui-monospace,monospace;padding:12px;resize:vertical}
  .builder textarea:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
  .bacts{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-top:12px}
  .bacts .btn{cursor:pointer;border:0;font:inherit}
  .bnote{color:var(--muted);font-size:13.5px}
  .bnote.err{color:#e5484d}
  @media (max-width:600px){.builder{padding:0 14px}.bwrap{padding:14px}.bacts .btn{width:100%;text-align:center}}

  /* utilities — one-off inline styles moved here (lint: no-inline-styles) */
  .u-m0a{margin:0 auto}
  .u-mxa{margin-left:auto;margin-right:auto}.u-mt12{margin-top:12px}.u-mt22{margin-top:22px}
  .u-mt44{margin-top:44px}
  .u-mt26a{margin:26px auto 0}.u-mhead30{margin:0 auto 30px}.u-mhead18{margin:0 auto 18px}
  .u-max62{max-width:62ch}

  .u-grid240{display:flex;flex-wrap:wrap;justify-content:center;gap:16px}
