/* Tapcentive — shared design system.
   Brand red is --orange (fixed); --accent is set per page on <body> for
   per-product theming (eyebrows, hero badge, step numbers, list markers). */

/* Self-hosted fonts (latin subsets, SIL OFL). Montserrat is a variable font —
   one file covers weights 400–800. */
@font-face{font-family:'Montserrat';font-style:normal;font-weight:400 800;font-display:swap;src:url('fonts/montserrat-var.woff2') format('woff2')}
@font-face{font-family:'Lato';font-style:normal;font-weight:400;font-display:swap;src:url('fonts/lato-400.woff2') format('woff2')}
@font-face{font-family:'Lato';font-style:normal;font-weight:700;font-display:swap;src:url('fonts/lato-700.woff2') format('woff2')}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:500;font-display:swap;src:url('fonts/ibm-plex-mono-500.woff2') format('woff2')}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:600;font-display:swap;src:url('fonts/ibm-plex-mono-600.woff2') format('woff2')}
:root{
  --orange:#EC5341; --orange-d:#d8402f;
  --ink:#20242A; --ink2:#2a2f37;
  --paper:#ffffff; --mist:#f6f6f9; --line:#e7e7ee;
  --muted:#6b6b7e; --muted-l:#6e6e84;
  --live:#17a24a; --launch:#e0871a; --built:#2d6cdf; --proto:#7a5af8;
  --accent:var(--orange);
  --mono:'IBM Plex Mono',ui-monospace,monospace;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:'Lato',system-ui,sans-serif;color:var(--ink);background:var(--paper);line-height:1.6;-webkit-font-smoothing:antialiased}
.wrap{max-width:1120px;margin:0 auto;padding:0 28px}
a{color:inherit;text-decoration:none}
h1,h2,h3{line-height:1.15;margin:0;font-family:'Montserrat',system-ui,sans-serif}
p{margin:0}
img{max-width:100%;height:auto}
:focus-visible{outline:2px solid var(--orange);outline-offset:2px;border-radius:2px}

.tm{font-size:.45em;vertical-align:super;line-height:0;letter-spacing:0}

.eyebrow{font-size:12.5px;letter-spacing:.16em;text-transform:uppercase;font-weight:700;color:var(--accent);font-family:'Montserrat',system-ui,sans-serif}
.kicker{font-size:11.5px;font-weight:600;letter-spacing:.13em;text-transform:uppercase;color:var(--muted-l);margin-bottom:6px;font-family:var(--mono)}

.btn{display:inline-block;padding:13px 22px;border-radius:9px;font-weight:700;font-size:15px;transition:.15s;cursor:pointer;border:1.5px solid transparent;font-family:'Montserrat',system-ui,sans-serif}
.btn-primary{background:var(--orange);color:#fff}
.btn-primary:hover{background:var(--orange-d)}
.btn-ghost{border-color:rgba(255,255,255,.28);color:#fff}
.btn-ghost:hover{border-color:#fff}
.btn-dark{border-color:var(--line);color:var(--ink)}
.btn-dark:hover{border-color:var(--ink);background:var(--mist)}

/* NAV */
nav{position:sticky;top:0;z-index:20;background:rgba(32,36,42,.9);backdrop-filter:blur(10px);border-bottom:1px solid rgba(255,255,255,.08)}
.nav-in{display:flex;align-items:center;justify-content:space-between;height:66px;position:relative}
.brand .logo{display:block;height:30px;width:auto}
.brand{display:flex;align-items:center;gap:9px}
.nav-links{display:flex;gap:24px;align-items:center;color:#c7c7d6;font-size:14.5px;font-weight:500}
.nav-links a:hover{color:#fff}
.nav-cta{background:var(--orange);color:#fff;padding:9px 16px;border-radius:8px;font-weight:600;font-family:'Montserrat',system-ui,sans-serif}
.nav-cta:hover{background:var(--orange-d)}
.nav-item{position:relative;display:flex;align-items:center;height:66px}
.nav-item > a{display:inline-flex;align-items:center}
.caret{font-size:25px;opacity:.8;margin-left:5px;line-height:1;position:relative;top:-3px}
.nav-sub{display:none;position:absolute;top:100%;left:50%;transform:translateX(-50%);padding-top:10px;z-index:30}
.nav-item:hover .nav-sub,.nav-item:focus-within .nav-sub{display:block}
.nav-sub-in{background:var(--ink);border:1px solid rgba(255,255,255,.12);border-radius:12px;padding:8px;min-width:225px;box-shadow:0 18px 44px rgba(0,0,0,.45)}
.nav-sub-in a{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:8px;font-size:14.5px;white-space:nowrap}
.nav-sub-in a:hover{background:rgba(255,255,255,.07);color:#fff}
.nav-sub .dot{width:7px;height:7px;border-radius:50%;flex:none}
.nav-toggle{display:none;background:none;border:none;cursor:pointer;padding:10px}
.nav-toggle span{display:block;width:22px;height:2px;background:#fff;margin:5px 0;border-radius:2px;transition:.2s}
@media(max-width:900px){
  .nav-toggle{display:block}
  .nav-links{display:none}
  .nav-open .nav-links{display:flex;flex-direction:column;align-items:flex-start;gap:4px;position:absolute;left:0;right:0;top:66px;background:var(--ink);padding:14px 28px 20px;border-bottom:1px solid rgba(255,255,255,.1)}
  .nav-open .nav-links a{padding:9px 0;font-size:16px}
  .nav-open .nav-links .nav-cta{margin-top:10px;padding:11px 18px}
  .nav-item{height:auto;flex-direction:column;align-items:flex-start}
  .nav-sub{display:block;position:static;transform:none;padding-top:0}
  .nav-sub-in{background:none;border:none;box-shadow:none;padding:0 0 2px 16px;min-width:0}
  .nav-sub-in a{padding:7px 0;font-size:15px}
  .nav-open .nav-toggle span:nth-child(1){transform:translateY(7px) rotate(45deg)}
  .nav-open .nav-toggle span:nth-child(2){opacity:0}
  .nav-open .nav-toggle span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
}
.crumb{color:var(--muted-l);font-size:13px;padding:14px 0}
.crumb a:hover{color:var(--ink)}

/* HERO (shared dark hero; home adds .hero-home) */
.hero{background:radial-gradient(1100px 560px at 80% -12%,color-mix(in srgb,var(--accent) 22%,transparent),transparent 60%),linear-gradient(180deg,var(--ink),var(--ink2));color:#fff;padding:56px 0 60px}
.hero-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:44px;align-items:center}
.hero-home .hero-grid{grid-template-columns:1.15fr .85fr}
@media(max-width:900px){.hero-grid,.hero-home .hero-grid{grid-template-columns:1fr;gap:26px}}
.hero h1{font-size:52px;font-weight:800;letter-spacing:-.02em;margin:18px 0 10px}
.hero-home h1{font-size:64px;margin:16px 0 20px}
.thesis{font-size:23px;line-height:1.45;color:#fff;font-weight:500;max-width:720px;margin-bottom:18px}
.thesis b{color:var(--orange);font-weight:700}
.hero .tag{font-size:20px;color:#fff;font-weight:600;font-family:'Montserrat',system-ui,sans-serif}
.hero .lede{font-size:17px;color:#d3d3e0;margin-top:16px;max-width:620px}
.hero .sub{font-size:19px;color:#d3d3e0;max-width:760px}
.spine{position:relative;margin-top:26px;padding-left:36px;font-size:19px;font-style:italic;color:#fff;max-width:680px}
.spine::before{content:"\201C";position:absolute;left:0;top:-8px;font-family:'Montserrat',system-ui,sans-serif;font-weight:800;font-size:46px;line-height:1;color:var(--orange);font-style:normal}
.spine::after{content:"\201D";display:inline-block;font-family:'Montserrat',system-ui,sans-serif;font-weight:800;font-size:46px;line-height:0;vertical-align:-0.52em;margin-left:7px;color:var(--orange);font-style:normal}
.hero-cta{display:flex;gap:14px;margin-top:30px;flex-wrap:wrap}
.hero-chip{text-align:center}
.hero-chip img{width:100%;max-width:400px;display:block;margin:0 auto;filter:drop-shadow(0 20px 50px rgba(0,0,0,.5))}
.hero-proof{display:inline-flex;align-items:center;gap:10px;margin-top:28px;font-size:15px;color:#d8dbe4}
.hero-proof::before{content:"";width:9px;height:9px;border-radius:50%;background:#2BC332;box-shadow:0 0 0 4px rgba(43,195,50,.20);flex:none}
.hero-proof b{color:#fff;font-weight:700}
.chip-cap{margin-top:16px;font-family:var(--mono);font-weight:600;font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--orange)}
@media(max-width:640px){.hero h1{font-size:38px}.hero-home h1{font-size:42px}.hero{padding:50px 0 48px}}

/* Hero product shot + video trigger */
.hero-shot{position:relative;cursor:pointer;border-radius:16px;overflow:hidden;border:1px solid rgba(255,255,255,.14);box-shadow:0 24px 60px rgba(0,0,0,.35)}
.hero-shot img{width:100%;display:block}
.hero-shot--float{cursor:default;border:none;box-shadow:none;border-radius:0;overflow:visible}
.hero-shot--float img{filter:drop-shadow(0 22px 46px rgba(0,0,0,.55))}
.hero-shot--float img.cab{max-width:400px;margin:0 auto;filter:drop-shadow(0 24px 50px rgba(0,0,0,.55))}
.playbtn{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:72px;height:72px;border-radius:50%;border:none;background:rgba(236,83,65,.94);color:#fff;font-size:22px;cursor:pointer;box-shadow:0 12px 34px rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;padding-left:4px}
.hero-shot:hover .playbtn{background:var(--orange)}
.watchlabel{position:absolute;left:0;right:0;bottom:14px;text-align:center;color:#fff;font-family:var(--mono);font-weight:600;font-size:12.5px;letter-spacing:.08em;text-shadow:0 2px 10px rgba(0,0,0,.7)}

/* Badges */
.badge{display:inline-flex;align-items:center;gap:7px;font-size:12px;font-weight:700;letter-spacing:.02em;padding:5px 11px;border-radius:100px;font-family:'Montserrat',system-ui,sans-serif}
.badge::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}
.b-live{color:var(--live);background:rgba(23,162,74,.1)}
.b-launch{color:var(--launch);background:rgba(224,135,26,.12)}
.b-built{color:var(--built);background:rgba(45,108,223,.1)}
.b-proto{color:var(--proto);background:rgba(122,90,248,.11)}
.badge-hero{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;font-weight:700;letter-spacing:.02em;padding:6px 13px;border-radius:100px;font-family:'Montserrat',system-ui,sans-serif;color:color-mix(in srgb,var(--accent) 35%,#fff);background:color-mix(in srgb,var(--accent) 18%,transparent);border:1px solid color-mix(in srgb,var(--accent) 48%,transparent)}
.badge-hero::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 25%,transparent)}

/* Sections */
section{padding:72px 0}
.sec-head{max-width:720px;margin-bottom:40px}
.sec-head h2{font-size:34px;font-weight:800;letter-spacing:-.015em}
.sec-head p{margin-top:13px;color:var(--muted);font-size:16.5px}
.mist{background:var(--mist);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
@media(max-width:640px){section{padding:54px 0}}

/* Market panels: two audiences, products as rows */
.markets{display:grid;grid-template-columns:1fr 1fr;gap:22px}
/* Two panels need ~1100px: below that each panel is narrower than a phone
   and the product rows inside it have nowhere to put the text — the longest
   name (Smart Chip Gaming) runs past the panel edge. */
@media(max-width:1100px){.markets{grid-template-columns:1fr}}
.market{background:#fff;border:1px solid var(--line);border-radius:16px;padding:26px 26px 14px;transition:.16s;display:grid;grid-template-rows:subgrid;grid-row:span 4;row-gap:0;align-content:start}
.market:hover{box-shadow:0 18px 44px rgba(32,36,42,.1);border-color:#d8d8e2}
.market .mk{font-family:var(--mono);font-size:13px;font-weight:600;letter-spacing:.13em;text-transform:uppercase;color:var(--orange)}
.market h3{font-size:21px;margin:8px 0 14px}
.market h3 em{font-style:normal;font-weight:400;font-size:19px}
/* Image is a share of the row, capped at its design size — a fixed 256px
   column starves the text on any narrow panel. minmax(0,1fr) lets the text
   column shrink instead of being forced wide by its own min-content. */
.prow{display:grid;grid-template-columns:clamp(104px,55%,256px) minmax(0,1fr) auto;align-items:center;gap:18px;padding:14px 12px;margin:0 -12px;border-radius:12px;transition:.15s}
.prow + .prow{border-top:1px solid var(--line)}
.prow:hover{background:var(--mist)}
.prow > img{width:100%;aspect-ratio:16/10;object-fit:cover;border-radius:10px}
@media(max-width:520px){.prow{grid-template-columns:clamp(88px,36%,150px) minmax(0,1fr) auto;gap:12px}}
.prow > img.thumb--dark{object-fit:contain;background:linear-gradient(180deg,#20242A,#2a2f37);padding:5px}
.pmeta{display:flex;flex-direction:column;align-items:flex-start;gap:4px;min-width:0;justify-self:center}
/* width:0 + min-width:100% keeps long names from widening the centered
   block, so overflow runs right over the arrow — never left into the image */
.pname{font-family:'Montserrat',system-ui,sans-serif;font-weight:700;font-size:19px;color:var(--ink);white-space:nowrap;width:0;min-width:100%}
/* On phones the block must fill its column exactly: centred sizing is
   max-content, so anything wider than the column spills BOTH ways — left
   over the image. Stretch keeps any overflow on the right. */
@media(max-width:520px){
  /* wraps at spaces only — never break a product name mid-word; an
     unbreakable one (SmartScratch) overflows right over the arrow instead */
  .pname{white-space:normal;width:auto;min-width:0;font-size:17px}
  .pmeta{justify-self:stretch}
}
.ptag{font-size:14.5px;color:var(--muted)}
.parrow{color:var(--orange);font-weight:700;font-size:19px}
.prow:hover .parrow{transform:translateX(3px)}
.parrow{transition:transform .15s}

/* Trust / why */
.trust{display:grid;grid-template-columns:repeat(2,1fr);gap:34px}
@media(max-width:720px){.trust{grid-template-columns:1fr}}
.trust .item h3{font-size:17px;margin-bottom:6px}
.trust .item p{color:var(--muted);font-size:15.5px}

/* Norm / difference */
.nd{display:grid;grid-template-columns:1fr 1fr;gap:34px}
@media(max-width:760px){.nd{grid-template-columns:1fr;gap:18px}}
.nd .norm{color:var(--muted);font-size:16px}
.nd .diff{font-size:17px}
.nd .diff b{color:var(--ink);font-weight:700}
.nda{display:inline-block;margin-top:14px;font-size:13px;color:var(--muted-l);font-style:italic}

/* Steps */
.steps{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}
.steps--3{grid-template-columns:repeat(3,1fr)}
@media(max-width:820px){.steps,.steps--3{grid-template-columns:repeat(2,1fr)}}
@media(max-width:460px){.steps,.steps--3{grid-template-columns:1fr}}
.step{background:#fff;border:1px solid var(--line);border-radius:14px;padding:22px}
.step .n{width:34px;height:34px;border-radius:9px;background:var(--accent);color:#fff;font-weight:800;display:flex;align-items:center;justify-content:center;font-size:16px;font-family:'Montserrat',system-ui,sans-serif}
.step h3{font-size:18px;margin:14px 0 6px}
.step p{font-size:14.5px;color:var(--muted)}

/* Feature cards */
.fgrid{display:grid;grid-template-columns:1fr 1fr;gap:26px}
@media(max-width:760px){.fgrid{grid-template-columns:1fr}}
.fcard{background:#fff;border:1px solid var(--line);border-radius:14px;padding:26px}
.fcard h3{font-size:19px;margin-bottom:8px}
.fcard ul{margin:10px 0 0;padding-left:0;list-style:none}
.fcard li{position:relative;padding-left:24px;margin:9px 0;color:var(--muted);font-size:15px}
.fcard li::before{content:"";position:absolute;left:0;top:9px;width:8px;height:8px;border-radius:2px;background:var(--accent)}
.fcard li b{color:var(--ink)}

/* Checklists & wins */
.why{display:grid;grid-template-columns:1fr 1fr;gap:12px 30px;list-style:none;padding:0;margin:0}
@media(max-width:640px){.why{grid-template-columns:1fr}}
.why li{position:relative;padding-left:26px;color:var(--ink);font-size:15.5px}
.why li::before{content:"";position:absolute;left:0;top:9px;width:9px;height:9px;border-radius:2px;background:var(--accent)}
.wins{display:grid;grid-template-columns:1fr 1fr;gap:44px}
@media(max-width:760px){.wins{grid-template-columns:1fr;gap:30px}}
.win h3{font-size:23px;font-weight:800;margin-bottom:4px}
.win .whofor{font-size:13px;color:var(--muted-l);font-weight:600;letter-spacing:.1em;text-transform:uppercase;font-family:var(--mono);margin-bottom:14px}
.win ul{list-style:none;padding:0;margin:0}
.win li{position:relative;padding-left:26px;margin:11px 0;color:var(--ink);font-size:15.5px}
.win li::before{content:"";position:absolute;left:0;top:9px;width:9px;height:9px;border-radius:2px;background:var(--accent)}

/* Imagery blocks */
.everywhere{max-width:1000px;margin:6px auto 0}
.everywhere img{width:100%;height:auto;display:block;border-radius:14px;box-shadow:0 20px 50px rgba(32,36,42,.16)}
.envcaption{margin-top:16px;text-align:center;font-family:var(--mono);font-weight:600;font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.showcase{display:grid;grid-template-columns:1.1fr .9fr;gap:48px;align-items:center}
@media(max-width:760px){.showcase{grid-template-columns:1fr;gap:26px}}
.showcase-img img{width:100%;max-width:480px;display:block;margin:0 auto}
.showcase h2{font-size:30px;font-weight:800}
.showcase-copy p{color:var(--muted);font-size:16.5px;margin-top:12px}

/* Verity status card */
.status{background:color-mix(in srgb,var(--accent) 6%,#fff);border:1px solid color-mix(in srgb,var(--accent) 22%,var(--line));border-radius:10px;padding:20px 22px;max-width:760px}
.status .k{font-size:11.5px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--accent);margin-bottom:6px;font-family:var(--mono)}
.status p{color:var(--ink);font-size:15.5px}

/* Tie-back strip */
.tieback{background:var(--mist);border-top:1px solid var(--line);padding:26px 0;font-size:14.5px;color:var(--muted)}
.tieback .wrap{display:flex;flex-wrap:wrap;gap:8px 22px;align-items:center}
.tieback b{color:var(--ink)}
.tieback a{color:var(--orange);font-weight:700}
.tieback a:hover{text-decoration:underline}

/* CTA band & contact */
.cta{background:linear-gradient(180deg,var(--ink2),var(--ink));color:#fff;padding:70px 0;text-align:center}
.cta h2{font-size:33px;font-weight:800;letter-spacing:-.02em}
.cta p{color:#cfcfe0;font-size:17px;max-width:580px;margin:14px auto 0}
.cta .btns{display:flex;gap:13px;justify-content:center;margin-top:26px;flex-wrap:wrap}
.cta .eyebrow{color:color-mix(in srgb,var(--accent) 45%,#fff)}
.contact{background:linear-gradient(180deg,var(--ink2),var(--ink));color:#fff;padding:80px 0}
.contact h2{font-size:38px;font-weight:800;letter-spacing:-.02em}
.contact p{color:#cfcfe0;font-size:18px;max-width:640px;margin-top:16px}
.contact-cta{display:flex;gap:14px;margin-top:30px;flex-wrap:wrap}
.who{margin-top:34px;color:#a7a7bd;font-size:15px}
.who b{color:#fff}

/* Legal pages */
.legal{max-width:820px;margin:0 auto;padding:56px 28px 72px}
.legal h1{font-size:36px;margin-bottom:8px}
.legal .updated{font-family:var(--mono);font-size:12.5px;color:var(--muted-l);margin-bottom:30px}
.legal h2{font-size:21px;margin:34px 0 10px}
.legal p,.legal li{color:var(--muted);font-size:15.5px;margin:12px 0}
.legal a{color:var(--orange)}
.legal a:hover{text-decoration:underline}

/* Footer */
footer{background:var(--ink);color:#8a8aa0;font-size:13.5px;padding:26px 0;border-top:1px solid rgba(255,255,255,.08)}
.foot-in{display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px}
.foot-in a:hover{color:#fff}
.compliance{color:#8b8ba1;font-size:12.5px;margin-top:14px;text-align:center}

/* Video modal */
.modal{position:fixed;inset:0;background:rgba(8,10,18,.86);display:none;align-items:center;justify-content:center;z-index:100;padding:26px}
.modal.open{display:flex}
.modal-inner{position:relative;width:min(940px,100%)}
.modal-inner video{width:100%;border-radius:12px;display:block;box-shadow:0 30px 80px rgba(0,0,0,.5)}
.modal-close{position:absolute;top:-46px;right:0;background:none;border:none;color:#fff;font-size:36px;line-height:1;cursor:pointer}

/* Signature moment: contactless tap-ripple behind the hero chip (echoes the
   arcs in the logo glyph). Plays three cycles on load, then rests. */
.hero-chip{position:relative}
.taps{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;pointer-events:none}
.taps span{position:absolute;width:300px;height:300px;border-radius:50%;border:1.5px solid rgba(236,83,65,.5);opacity:0;animation:tap 2.6s ease-out 3}
.taps span:nth-child(2){animation-delay:.4s}
.taps span:nth-child(3){animation-delay:.8s}
@keyframes tap{0%{transform:scale(.55);opacity:0}12%{opacity:.5}100%{transform:scale(1.55);opacity:0}}

/* Hero load stagger (home only) */
.hero-home .eyebrow,.hero-home h1,.hero-home .thesis,.hero-home .sub,.hero-home .spine,.hero-home .hero-cta,.hero-home .hero-proof{animation:rise .6s cubic-bezier(.2,.7,.3,1) both}
.hero-home h1{animation-delay:.06s}
.hero-home .thesis{animation-delay:.12s}
.hero-home .sub{animation-delay:.18s}
.hero-home .spine{animation-delay:.24s}
.hero-home .hero-cta{animation-delay:.3s}
.hero-home .hero-proof{animation-delay:.36s}
@keyframes rise{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}

/* Scroll reveals — hidden state only when JS runs and motion is allowed */
@media (prefers-reduced-motion: no-preference){
  .js .reveal{opacity:0;transform:translateY(16px);transition:opacity .55s ease,transform .55s cubic-bezier(.2,.7,.3,1)}
  .js .reveal.in{opacity:1;transform:none}
}

/* Market-panel spotlight hover */
.market{position:relative}
.market::after{content:"";position:absolute;inset:0;border-radius:16px;pointer-events:none;opacity:0;transition:opacity .25s;background:radial-gradient(340px circle at var(--mx,50%) var(--my,50%),rgba(236,83,65,.07),transparent 65%)}
.market:hover::after{opacity:1}

@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{transition:none!important;animation:none!important}
}
