/* =====================================================================
   SANO × Podium-structure site — shared design system
   Podium's layout & flow, wearing SANO's locked brand (Electric Blue / Near-Black / Warm Vanilla).
   SANO's own content. Loaded by every page. shared.js injects nav+footer.
   ===================================================================== */
:root{
  /* LOCKED SANO brand (brand-kit D-0034) */
  --ink:#09090B;            /* Near-Black */
  --ink-soft:#3A3A40;
  --ink-mut:#63636B;
  --blue:#0070F3;           /* Electric Blue - primary accent */
  --blue-d:#0050C8;         /* gradient/hover */
  --blue-t:#E8F1FE;         /* blue tint */
  --white:#FFFFFF;
  --paper:#f5f0e8;          /* Warm Vanilla */
  --paper-2:#EDE6DA;
  --line:#E3DCD0;
  --dark:#09090B;
  --dark-2:#131317;
  --amber:#F5A623;
  --radius:16px; --radius-sm:10px; --radius-lg:24px;
  --shadow:0 10px 40px rgba(9,9,11,.08);
  --shadow-lg:0 24px 70px rgba(9,9,11,.14);
  --wrap:1180px; --wrap-narrow:920px;
  --sans:"Space Grotesk","Space Grotesk Fallback",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  --disp:"Space Grotesk","Space Grotesk Fallback",sans-serif;
}
/* 2026-10-15 (B023): until Space Grotesk arrives, text is set in Arial scaled to Space Grotesk's width and
   vertical metrics (measured on the site's own article copy: regular 1.085x, bold 1.015x; Space Grotesk
   ascent .984 / descent .292 of the em), so lines break in the same places and nothing jumps when it swaps in. */
@font-face{font-family:"Space Grotesk Fallback";src:local("Arial"),local("ArialMT");font-weight:100 500;
  size-adjust:108.5%;ascent-override:90.7%;descent-override:26.9%;line-gap-override:0%}
@font-face{font-family:"Space Grotesk Fallback";src:local("Arial Bold"),local("Arial-BoldMT");font-weight:600 900;
  size-adjust:101.5%;ascent-override:96.9%;descent-override:28.8%;line-gap-override:0%}
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
[hidden]{display:none!important}
html{scroll-behavior:smooth;-webkit-font-smoothing:antialiased;scroll-padding-top:86px}
#site-nav{display:contents}
body{font-family:var(--sans);color:var(--ink);background:var(--white);line-height:1.6;overflow-x:hidden}
a{color:inherit;text-decoration:none}
img{max-width:100%;display:block}
.wrap{max-width:var(--wrap);margin:0 auto;padding:0 24px}
.wrap-narrow{max-width:var(--wrap-narrow);margin:0 auto;padding:0 24px}
h1,h2,h3,h4{font-family:var(--disp);letter-spacing:-.02em;line-height:1.1;color:var(--ink)}

/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-weight:600;font-size:0.9375rem;border-radius:999px;padding:13px 24px;transition:.18s ease;cursor:pointer;border:1.5px solid transparent;white-space:nowrap}
.btn-blue{background:var(--blue);color:#fff}
.btn-blue:hover{background:var(--blue-d);transform:translateY(-1px)}
.btn-ghost{background:#fff;color:var(--ink);border-color:var(--line)}
.btn-ghost:hover{border-color:var(--ink)}
.btn-onblue{background:#fff;color:var(--blue-d)}
.btn-onblue:hover{background:var(--blue-t)}
.btn-lg{padding:16px 30px;font-size:1rem}

/* ---------- top ribbon (legacy, unused) ---------- */
.ribbon{background:var(--ink);color:#fff;text-align:center;font-size:0.8125rem;padding:8px 16px;font-weight:500}
.ribbon b{color:var(--blue)}

/* ---------- nav ---------- */
header{position:sticky;top:0;z-index:60;background:rgba(255,255,255,.92);backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}
.nav{display:flex;align-items:center;justify-content:space-between;height:70px}
.brand{display:flex;align-items:center;gap:10px;white-space:nowrap;font-family:var(--disp);font-weight:700;font-size:20px;color:var(--ink)}
.brand img{width:30px;height:30px;border-radius:7px}
.nav-links{display:flex;align-items:center;gap:6px;list-style:none}
.nav-links>li{position:relative}
.nav-links>li>a{display:inline-flex;align-items:center;gap:5px;font-size:15px;font-weight:500;color:var(--ink-soft);padding:10px 14px;border-radius:8px}
.nav-links>li>a:hover{color:var(--ink);background:var(--paper)}
.nav-links>li.active>a{color:var(--ink)}
.nav-links .caret{width:9px;height:9px}
.dropdown{position:absolute;top:calc(100% + 6px);left:50%;transform:translateX(-50%) translateY(6px);min-width:300px;background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-lg);padding:8px;opacity:0;visibility:hidden;transition:.18s;display:grid;gap:2px}
.nav-links>li:hover .dropdown,.nav-links>li:focus-within .dropdown{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0)}
.dropdown a{display:flex;flex-direction:column;gap:2px;padding:10px 14px;border-radius:8px}
.dropdown a:hover{background:var(--blue-t)}
.dropdown a b{font-size:0.875rem;font-weight:600;color:var(--ink)}
.dropdown a span{font-size:0.8125rem;color:var(--ink-mut)}
.nav-right{display:flex;align-items:center;gap:14px}
.nav-phone{font-size:15px;font-weight:600;color:var(--ink)}
/* the phone and the Spanish line stack, so surfacing "Se habla Español" in the
   header costs vertical space inside the 70px bar, not horizontal room */
.nav-contact{display:flex;flex-direction:column;align-items:flex-end;gap:1px;line-height:1.2}
.nav-es{font-size:13px;font-weight:600;color:var(--blue-d);white-space:nowrap}
.nav-es:hover{text-decoration:underline}
.nav-burger{display:none;background:none;border:none;cursor:pointer;padding:11px;min-width:44px;min-height:44px}
.nav-burger span{display:block;width:22px;height:2px;background:var(--ink);margin:4px 0;transition:.2s}
/* mobile menu is hidden at ALL widths by default; only the overlay behaviour is responsive */
.mobile-menu{display:none}
@media(max-width:1140px){
  .nav-links,.nav-phone,.nav-contact{display:none}
  .nav-burger{display:block}
  .mobile-menu{position:fixed;top:0;left:0;right:0;bottom:0;background:#fff;z-index:80;padding:80px 24px 24px;overflow:auto}
  .mobile-menu.open{display:block}
  .mobile-menu a{display:block;font-size:1.125rem;font-weight:600;padding:14px 6px;border-bottom:1px solid var(--line);color:var(--ink)}
  .mobile-menu .btn{margin-top:20px;width:100%}
}

/* ---------- hero (home split) ---------- */
.hero{padding:76px 0 44px}
.hero-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:56px;align-items:center}
.hero-grid>*{min-width:0}
.eyebrow{display:inline-flex;align-items:center;flex-wrap:wrap;gap:8px;font-size:0.8125rem;font-weight:600;color:var(--blue-d);background:var(--blue-t);padding:7px 14px;border-radius:999px;margin-bottom:22px}
.hero h1{font-size:clamp(2.5rem,5.4vw,3.875rem);font-weight:700}
.hero p.sub{font-size:1.25rem;color:var(--ink-soft);margin-top:22px;max-width:34ch}
.hero-cta{display:flex;gap:14px;margin-top:32px;flex-wrap:wrap}
.hero-trust{margin-top:26px;font-size:0.875rem;color:var(--ink-mut);display:flex;align-items:center;gap:4px 14px;flex-wrap:wrap}
.hero-trust>span{white-space:nowrap}
@media(max-width:480px){.hero-trust>.t{white-space:normal}}
@media(max-width:960px){.hero-grid{grid-template-columns:1fr;gap:36px}.hero p.sub{max-width:none}}

/* ---------- page hero (centered, inner pages) ---------- */
.page-hero{padding:70px 0 30px;text-align:center}
.page-hero.tint{background:var(--paper)}
.page-hero h1{font-size:clamp(2.25rem,5vw,3.5rem);font-weight:700;max-width:16ch;margin:14px auto 0}
.page-hero p.sub{font-size:1.1875rem;color:var(--ink-soft);margin:20px auto 0;max-width:60ch}
.page-hero .hero-cta{justify-content:center}

/* ---------- product CSS mockups ---------- */
.visual{position:relative}
.v-card{background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-lg);padding:18px}
.v-head{display:flex;align-items:center;gap:9px;padding-bottom:14px;border-bottom:1px solid var(--line);margin-bottom:14px}
.v-dot{width:10px;height:10px;border-radius:50%}
.v-title{font-weight:600;font-size:0.875rem;color:var(--ink);margin-left:6px}
.msg{display:flex;gap:10px;margin:12px 0;align-items:flex-start}
.msg .av{width:34px;height:34px;border-radius:50%;flex:none;display:grid;place-items:center;font-size:0.8125rem;font-weight:700;color:#fff}
.msg .bubble{background:var(--paper);padding:10px 14px;border-radius:12px;font-size:0.875rem;color:var(--ink-soft);max-width:80%}
.msg.out{flex-direction:row-reverse}
.msg.out .bubble{background:var(--blue);color:#fff}
.msg.out .av{background:var(--ink)}
.msg .av.cust{background:#6B7885}
.v-badge{position:absolute;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);padding:12px 16px;display:flex;align-items:center;gap:10px}
.v-badge .ic{width:34px;height:34px;border-radius:9px;background:var(--blue-t);color:var(--blue-d);display:grid;place-items:center;font-weight:700}
.v-badge b{font-family:var(--disp);font-size:1.125rem;display:block;line-height:1;color:var(--ink)}
.v-badge span{font-size:0.8125rem;color:var(--ink-mut)}
.b-top{top:-22px;right:-14px}.b-bot{bottom:-24px;left:-20px}

/* dashboard mockup */
.dash{background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-lg);padding:20px}
.dash-row{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:14px}
.dash-stat{background:var(--paper);border-radius:10px;padding:14px}
.dash-stat b{font-family:var(--disp);font-size:1.375rem;display:block;color:var(--ink)}
.dash-stat span{font-size:0.8125rem;color:#5A5A62}
.dash-bars{display:flex;align-items:flex-end;gap:8px;height:90px;padding-top:10px}
.dash-bars i{flex:1;background:var(--blue-t);border-radius:6px 6px 0 0}
.dash-bars i.on{background:var(--blue)}


/* ---------- section head ---------- */
section.band{padding:84px 0}
.band.paper{background:var(--paper)}
.sec-head{text-align:center;max-width:730px;margin:0 auto 52px}
.sec-head .kick{font-size:0.875rem;font-weight:600;color:var(--blue-d);text-transform:uppercase;letter-spacing:.08em}
.sec-head h2{font-size:clamp(1.875rem,4vw,2.75rem);font-weight:700;margin-top:12px}
.sec-head p{font-size:1.125rem;color:var(--ink-soft);margin-top:16px}

/* ---------- feature callouts ---------- */
.feat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:24px}
.feat-grid.four{grid-template-columns:repeat(4,1fr)}
.feat{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:32px 28px;transition:box-shadow .2s,transform .2s}
.feat:hover{box-shadow:var(--shadow);transform:translateY(-3px)}
.feat .ic{width:48px;height:48px;border-radius:12px;background:var(--blue-t);color:var(--blue-d);display:grid;place-items:center;font-size:1.375rem;margin-bottom:18px}
.feat h3{font-size:1.25rem;font-weight:600}
.feat p{margin-top:10px;color:var(--ink-soft);font-size:0.9375rem}
@media(max-width:1080px){.feat-grid.four{grid-template-columns:1fr 1fr}}
@media(max-width:900px){.feat-grid{grid-template-columns:1fr 1fr}}
@media(max-width:620px){.feat-grid,.feat-grid.four{grid-template-columns:1fr}}

/* ---------- alternating feature rows ---------- */
.frow{display:grid;grid-template-columns:1fr 1fr;gap:64px;align-items:center;padding:40px 0}
.frow.flip .fcopy{order:2}
.fcopy .kick{font-size:0.8125rem;font-weight:600;color:var(--blue-d);text-transform:uppercase;letter-spacing:.07em}
.fcopy h2,.fcopy h3{font-size:clamp(1.625rem,3.2vw,2.125rem);font-weight:700;margin-top:12px;letter-spacing:-.02em;line-height:1.15}
.fcopy p{font-size:1.0625rem;color:var(--ink-soft);margin-top:16px}
.fcopy ul{list-style:none;margin-top:22px;display:grid;gap:12px}
.fcopy li{display:flex;gap:10px;font-size:0.9375rem;color:var(--ink-soft)}
.fcopy li svg{color:var(--blue-d);flex:none;margin-top:3px}
@media(max-width:820px){.frow,.frow.flip{grid-template-columns:1fr;gap:28px}.frow.flip .fcopy{order:0}}

/* ---------- industries ---------- */
.ind-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}
.ind{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:28px 24px;transition:border-color .2s,transform .2s,box-shadow .2s;display:block}
.ind:hover{box-shadow:var(--shadow);transform:translateY(-3px)}
.ind .em{font-size:1.875rem}
.ind h3{font-size:1.1875rem;font-weight:600;margin-top:14px}
.ind p{font-size:0.875rem;color:var(--ink-mut);margin-top:8px}
.ind .more{display:inline-flex;align-items:center;gap:6px;margin-top:16px;font-size:0.875rem;font-weight:600;color:var(--blue-d)}
@media(max-width:900px){.ind-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:480px){.ind-grid{grid-template-columns:1fr}}


/* ---------- stat band ---------- */
.statband{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;text-align:center}
.statband .s b{font-family:var(--disp);font-size:clamp(2.125rem,4vw,3rem);font-weight:700;color:var(--ink);display:block;letter-spacing:-.02em}
.statband .s span{font-size:0.875rem;color:var(--ink-mut)}
@media(max-width:720px){.statband{grid-template-columns:1fr 1fr;gap:28px}}

/* ---------- before/after dark band ---------- */
.dark-band{background:var(--dark);color:#fff;padding:88px 0}
.dark-band h2{color:#fff}
.dark-band .sec-head p{color:#9FB0BF}









/* ---------- steps ---------- */
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.step{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:30px 28px}
.step .n{font-family:var(--disp);font-size:0.875rem;font-weight:700;color:var(--blue-d);background:var(--blue-t);width:38px;height:38px;border-radius:10px;display:grid;place-items:center;margin-bottom:16px}
.step h3{font-size:1.1875rem;font-weight:600}
.step p{font-size:0.9375rem;color:var(--ink-soft);margin-top:10px}
@media(max-width:820px){.steps{grid-template-columns:1fr}}

/* ---------- pricing ---------- */
.price-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:18px;align-items:start}
.price{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:28px 24px;position:relative;display:flex;flex-direction:column}
.price.pop{border-color:var(--blue);box-shadow:var(--shadow)}
.price .tag{position:absolute;top:-11px;left:24px;background:var(--blue);color:#fff;font-size:0.6875rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:4px 11px;border-radius:999px}
.price h3{font-size:1.0625rem;font-weight:600}
.price .amt{font-family:var(--disp);font-size:2.125rem;font-weight:700;margin-top:8px;letter-spacing:-.02em;color:var(--ink)}
.price .amt small{font-size:0.9375rem;color:var(--ink-mut);font-weight:500}
.price .setup{font-size:0.8125rem;color:var(--ink-mut);margin-top:4px}
.price .desc{font-size:0.8125rem;color:var(--ink-mut);margin-top:12px}
.price .btn{width:100%;margin-top:16px}
.price ul{list-style:none;margin-top:auto;padding-top:18px;display:grid;gap:9px}
.price li{font-size:0.84375rem;color:var(--ink-soft);display:flex;gap:8px}
.price li.li-group{font-size:0.6875rem;font-weight:700;color:var(--blue-d);text-transform:uppercase;letter-spacing:.06em;margin-top:6px}
.price a.fn{color:inherit;text-decoration:none}
.gx,.price .g-more{display:none}
.price li svg{color:var(--blue-d);flex:none;margin-top:3px}
@media(max-width:1149px){.price-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:480px){.price-grid{grid-template-columns:1fr}.cap-count{min-height:3em}
  .price .g-xtra{display:none}
  .price .gx:checked ~ ul .g-xtra{display:flex}
  .price .g-more{display:flex}
  .price .gx:checked ~ ul .g-more{display:none}
  .price .g-more label{cursor:pointer;color:var(--blue-d);font-weight:600;font-size:0.84375rem}
}

/* ---------- FAQ ---------- */
.faq{max-width:820px;margin:0 auto;display:grid;gap:12px}
.faq details{background:#fff;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.faq summary{list-style:none;cursor:pointer;padding:20px 24px;font-weight:600;font-size:1rem;display:flex;justify-content:space-between;gap:16px;align-items:center}
.faq summary::-webkit-details-marker{display:none}
.faq summary .chev{transition:.25s;flex:none;color:var(--ink-mut)}
.faq details[open] summary .chev{transform:rotate(180deg)}
.faq .a{padding:0 24px 20px;color:var(--ink-soft);font-size:0.9375rem;line-height:1.7}

/* ---------- CTA ---------- */
.cta{padding:90px 0}
.cta-box{background:linear-gradient(135deg,var(--blue),#0050C8);border-radius:var(--radius-lg);padding:64px 40px;text-align:center;color:#fff}
.cta-box h2{color:#fff;font-size:clamp(1.75rem,3.6vw,2.625rem)}
.cta-box p{font-size:1.125rem;margin-top:14px;opacity:.95}
.cta-box .hero-cta{justify-content:center;margin-top:28px}

/* ---------- forms (demo page) ---------- */
.form-card{background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-lg);padding:32px}
.form-card h2{font-size:1.5rem}
.form-card .fsub{color:var(--ink-mut);font-size:0.875rem;margin-top:6px;margin-bottom:20px}
.frow2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.field{margin-bottom:14px}
.field label{display:block;font-size:0.8125rem;font-weight:600;margin-bottom:6px;color:var(--ink)}
.field input,.field select,.field textarea{width:100%;font-family:inherit;font-size:0.9375rem;padding:12px 14px;border:1.5px solid var(--line);border-radius:10px;background:#fff;color:var(--ink)}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--blue)}
.field textarea{min-height:90px;resize:vertical}
@media(max-width:520px){.frow2{grid-template-columns:1fr}}

/* ---------- resources ---------- */
.post-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.post{background:#fff;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;transition:border-color .2s,transform .2s,box-shadow .2s;display:flex;flex-direction:column}
.post:hover{box-shadow:var(--shadow);transform:translateY(-3px)}
.post .thumb{height:150px;background:linear-gradient(135deg,var(--blue-t),#DCEEF0);display:grid;place-items:center;font-size:2.5rem}
.post .body{padding:22px 22px 24px}
.post .cat{font-size:0.6875rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--blue-d)}
.post h3{font-size:1.125rem;font-weight:600;margin-top:10px;line-height:1.35}
.post p{font-size:0.875rem;color:var(--ink-mut);margin-top:10px}
@media(max-width:900px){.post-grid{grid-template-columns:1fr 1fr}}
@media(max-width:600px){.post-grid{grid-template-columns:1fr}}

/* ---------- footer ---------- */
footer{background:var(--dark);color:#B9C5CF;padding:66px 0 34px}
.foot-grid{display:grid;grid-template-columns:1.6fr repeat(4,1fr);gap:32px}
.foot-brand .brand{color:#fff}
.foot-brand p{font-size:0.875rem;margin-top:14px;max-width:26ch;color:#8A99A6}
.foot-brand a.c{display:block;margin-top:8px;color:#fff;font-weight:600;font-size:0.875rem;padding:3px 0}
.foot-col h4,.foot-col-h{font-family:var(--disp);color:#fff;font-size:0.8125rem;text-transform:uppercase;letter-spacing:.07em;margin-bottom:16px}
.foot-col a{display:block;font-size:0.875rem;padding:6px 0;color:#A8B2BC}
.foot-col a:hover{color:#fff}
.foot-col a.soc{display:flex;align-items:center;gap:10px}
.foot-col a.soc svg{width:16px;height:16px;flex:none;fill:currentColor}
.foot-base{border-top:1px solid rgba(255,255,255,.08);margin-top:44px;padding-top:22px;font-size:0.8125rem;color:#8A8A93;display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}
@media(max-width:820px){.foot-grid{grid-template-columns:1fr 1fr}.foot-brand{grid-column:1/-1}}

/* reveal */
.reveal{opacity:0;transform:translateY(16px);transition:.6s cubic-bezier(.16,1,.3,1)}
.reveal.in{opacity:1;transform:none}


/* =====================================================================
   INDUSTRY PICKER — the journey-builder entry point (the centerpiece)
   ===================================================================== */
.picker{padding:16px 0 8px}
.picker-head{text-align:center;max-width:640px;margin:0 auto 26px}
.picker-head .kick{font-size:0.8125rem;font-weight:600;color:var(--blue-d);text-transform:uppercase;letter-spacing:.09em}
.picker-head h2{font-size:clamp(1.5rem,3vw,2.125rem);font-weight:700;margin-top:10px}
.picker-head p{color:var(--ink-mut);font-size:1rem;margin-top:10px}

.pick-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.pick{background:#fff;border:1.5px solid var(--line);border-radius:var(--radius);padding:22px 18px;text-align:center;cursor:pointer;transition:border-color .2s ease,transform .2s ease,box-shadow .2s ease,background .2s ease;font-family:inherit;display:flex;flex-direction:column;align-items:center;gap:8px}
.pick:hover{border-color:var(--blue);transform:translateY(-4px);box-shadow:var(--shadow)}
.pick.on{border-color:var(--blue);background:var(--blue-t);box-shadow:var(--shadow)}
.pick .em{font-size:1.875rem;line-height:1}
.pick b{font-family:var(--disp);font-size:0.9375rem;font-weight:600;color:var(--ink)}
.pick span{font-size:0.8125rem;color:var(--ink-mut);line-height:1.4}
@media(max-width:1000px){.pick-grid{grid-template-columns:repeat(3,1fr)}}
@media(max-width:720px){.pick-grid{grid-template-columns:repeat(2,1fr)}}

/* the branched "journey" panel that opens under the picker */
.journey{margin-top:26px;border:1.5px solid var(--blue);border-radius:var(--radius-lg);background:#fff;box-shadow:var(--shadow-lg);overflow:hidden;display:none}
.journey.open{display:block;animation:jin .35s ease}
@keyframes jin{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.journey-top{background:var(--dark);color:#fff;padding:26px 32px;display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.journey-top .em{font-size:2.125rem}
.journey-top h3{color:#fff;font-size:clamp(1.25rem,2.4vw,1.625rem);font-weight:700;margin:0}
.journey-top p{color:#A9A9B2;font-size:0.875rem;margin-top:4px}
.journey-body{padding:30px 32px 32px}
.journey-grid{display:grid;grid-template-columns:1fr 1fr;gap:30px}
.j-col h4{font-family:var(--disp);font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-mut);margin-bottom:14px}
.j-list{list-style:none;display:grid;gap:11px}
.j-list li{display:flex;gap:10px;font-size:0.9375rem;color:var(--ink-soft);line-height:1.5}
.j-list li svg{flex:none;margin-top:3px}
.j-pain li svg{color:#C4462F}
.j-fix li svg{color:var(--blue)}
.journey-foot{margin-top:26px;padding-top:22px;border-top:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
.journey-foot .note{font-size:0.8125rem;color:var(--ink-mut);max-width:46ch}
@media(max-width:760px){.journey-grid{grid-template-columns:1fr;gap:24px}.journey-body{padding:24px 20px}.journey-top{padding:22px 20px}}

/* blueprint / snapshot callout */
.blueprint{display:inline-flex;align-items:center;gap:8px;background:var(--blue-t);color:var(--blue-d);border-radius:999px;padding:6px 14px;font-size:0.8125rem;font-weight:600}

/* researched-source footnote */
.sources{max-width:840px;margin:30px auto 0;text-align:center;font-size:0.8125rem;line-height:1.7;color:var(--ink-mut)}
.dark-band .sources{color:#8A8A93}

/* ---------- article pages ---------- */
.article{max-width:720px;margin:0 auto;padding:0 24px}
.article .meta{font-size:0.8125rem;color:var(--ink-mut);margin-bottom:10px}
.article .meta .cat{color:var(--blue-d);font-weight:600;text-transform:uppercase;letter-spacing:.06em}
.article h1{font-size:clamp(1.875rem,4.2vw,2.75rem);font-weight:700;line-height:1.12}
.article .lede{font-size:1.1875rem;color:var(--ink-soft);margin-top:18px;line-height:1.7}
.article h2{font-size:clamp(1.375rem,2.6vw,1.75rem);font-weight:700;margin-top:44px}
.article p{font-size:1.0625rem;line-height:1.75;color:var(--ink-soft);margin-top:16px}
.article ul{margin:16px 0 0 0;padding-left:20px}
.article li{font-size:1.0625rem;line-height:1.75;color:var(--ink-soft);margin-bottom:8px}
.article strong{color:var(--ink)}
.pull{border-left:3px solid var(--blue);background:var(--blue-t);padding:18px 22px;border-radius:0 var(--radius) var(--radius) 0;margin-top:28px}
.pull p{margin:0;color:var(--ink);font-weight:500}
.article .backlink{display:inline-block;margin-bottom:22px;font-weight:600;font-size:0.875rem}
.refs{margin-top:44px;padding-top:22px;border-top:1px solid var(--line);font-size:0.8125rem;color:var(--ink-mut);line-height:1.7}


/* respect reduced-motion */
@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
  .reveal{opacity:1;transform:none;transition:none}
}

/* picker card text needs room on small screens */
@media(max-width:420px){ .pick{padding:18px 12px} .pick b{font-size:0.875rem} .pick span{font-size:0.75rem} }

/* industry page helpers */
.blueprint-season{text-align:center;color:var(--ink-mut);font-size:0.9375rem;margin-top:34px;max-width:70ch;margin-inline:auto}
.feat-dark{background:var(--dark-2);border-color:rgba(255,255,255,.09)}
.feat-dark h3{color:#fff}
.feat-dark p{color:#9A9AA3}
.feat-dark .ic{background:rgba(0,112,243,.15);color:#4D9BFF}
.owner-note{max-width:820px;margin:34px auto 0;text-align:center;font-size:0.9375rem;color:#8A8A93;line-height:1.7}
.owner-note strong{color:#fff;font-weight:600}

/* accessible form errors (not colour-only) */
.field-err{font-size:0.8125rem;color:#C4462F;margin-top:6px;display:flex;gap:6px;align-items:flex-start}
.field-err::before{content:"⚠";font-size:0.75rem}
.field input.is-invalid,.field select.is-invalid,.field textarea.is-invalid{border-color:#C4462F;background:#FFF7F5}
.form-err-global{color:#C4462F;font-size:0.875rem;margin-bottom:10px;font-weight:500}

/* tier honesty hints */
.tier-note{font-size:0.8125rem;color:var(--blue-d);font-weight:600;margin-top:8px}
.tier-hint-block{margin-top:12px;font-size:0.875rem;color:var(--ink-mut);background:var(--paper);border-left:3px solid var(--blue);padding:10px 14px;border-radius:0 8px 8px 0}

/* skip link */
.skip{position:absolute;left:-9999px;top:0;z-index:200;background:var(--ink);color:#fff;padding:12px 18px;border-radius:0 0 8px 0;font-weight:600}
.skip:focus{left:0}
/* visible keyboard focus everywhere (inputs previously had outline:none only) */
:focus-visible{outline:3px solid var(--blue);outline-offset:2px}
.field input:focus-visible,.field select:focus-visible,.field textarea:focus-visible{outline:3px solid var(--blue);outline-offset:1px}
/* mobile menu close button */
.mm-close{position:absolute;top:16px;right:14px;background:none;border:none;font-size:30px;line-height:1;cursor:pointer;color:var(--ink);min-width:44px;min-height:44px}
.mm-home{display:flex;align-items:center;gap:10px;font-family:var(--disp);font-weight:700;font-size:1.1875rem;padding-bottom:8px}
/* small-screen fixes */
@media(max-width:560px){
  .journey-foot .btn{white-space:normal;width:100%;text-align:center}
  .journey-foot span{width:100%}
  .cta-box{padding:44px 22px}
  .dash-row{grid-template-columns:1fr;gap:10px}
}
@media(max-width:1120px){
  .v-badge{display:flex;position:static;margin:12px 0 0;box-shadow:none;border-color:var(--line)}
  .visual{padding-bottom:0}
}

/* no-JS chrome fallback */
.ns-nav{padding:14px 24px;background:var(--paper);border-bottom:1px solid var(--line);font-size:0.875rem;text-align:center}
.ns-nav a{color:var(--blue-d);font-weight:600}
.j-h{font-family:var(--disp);font-size:0.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-mut);margin-bottom:14px}
.mock-tag{margin-left:auto;font-size:0.65625rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-mut);border:1px solid var(--line);border-radius:999px;padding:2px 8px}
/* 4-column comparison */


.nav-call{display:none;color:var(--ink);padding:13px}
@media(max-width:1140px){.nav-call{display:inline-flex;align-items:center}}

/* ---------- comparison table (semantic) ---------- */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
table.cmp{max-width:940px;margin:0 auto;width:100%;border-collapse:collapse;background:var(--dark-2);border:1px solid rgba(255,255,255,.09);border-radius:var(--radius);overflow:hidden}
table.cmp th,table.cmp td{padding:16px 20px;text-align:left;vertical-align:top;font-size:0.9375rem;border-bottom:1px solid rgba(255,255,255,.07)}
table.cmp thead th{background:rgba(255,255,255,.03);font-family:var(--disp);font-size:0.78125rem;text-transform:uppercase;letter-spacing:.06em;font-weight:600}
table.cmp .col-b{color:#8A8A93}
table.cmp .col-a{color:#4D9BFF}
table.cmp tbody th.lab{font-weight:600;color:#fff;width:22%}
table.cmp td.before{color:#8A8A93}
table.cmp td.after{color:#fff;font-weight:600}
table.cmp .x{color:#E06B5A}
table.cmp .c{color:var(--blue)}
table.cmp .p{color:#9A8A63;font-weight:700}
table.cmp tbody tr:last-child th,table.cmp tbody tr:last-child td{border-bottom:none}
@media(max-width:860px){
  table.cmp,table.cmp tbody,table.cmp tr,table.cmp th,table.cmp td{display:block;width:auto}
  table.cmp thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
  table.cmp tbody tr{border-bottom:1px solid rgba(255,255,255,.09);padding:14px 18px}
  table.cmp tbody tr:last-child{border-bottom:none}
  table.cmp tbody th.lab{width:auto;padding:0 0 8px;font-size:0.75rem;text-transform:uppercase;letter-spacing:.06em;color:#8A8A93;border:none}
  table.cmp td{padding:5px 0;border:none}
  table.cmp td::before{content:attr(data-col) ": ";font-weight:600;color:#9A9AA3}
  table.cmp td.after::before{color:#4D9BFF}
}
.dash-head{display:flex;justify-content:flex-end;margin-bottom:8px}
.price-strip{max-width:70ch;margin:22px auto 0;text-align:center;font-size:0.9375rem;color:var(--ink-soft);background:var(--paper);border-radius:var(--radius);padding:14px 18px}
.price-strip a{color:var(--blue-d);font-weight:600}

/* active nav item needs more than a colour shift */
.nav-links>li.active>a{color:var(--ink);box-shadow:inset 0 -2px 0 var(--blue)}
/* journey panel close */
.journey-close{position:absolute;top:14px;right:16px;background:rgba(255,255,255,.12);border:none;color:#fff;font-size:1.5rem;line-height:1;cursor:pointer;border-radius:8px;padding:2px 10px}
.journey{position:relative}
.journey-close:hover{background:rgba(255,255,255,.22)}
/* static fallback picker cards should look like the buttons they become */
a.pick{text-decoration:none}
/* keep all four pricing CTAs on one line */

.statband--words .s b{font-size:clamp(1.25rem,2.2vw,1.625rem);letter-spacing:-.01em}
.cta-phone{margin-top:16px;font-size:0.875rem;color:rgba(255,255,255,.9)}
.cta-phone a{color:#fff;font-weight:700;text-decoration:underline}
.read-next{margin-top:44px;padding-top:24px;border-top:1px solid var(--line)}
.read-next h2{font-size:0.9375rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-mut);margin-bottom:12px}
.read-next ul{list-style:none;padding:0;display:grid;gap:10px}
.read-next a{color:var(--blue-d);font-weight:600;font-size:1rem;display:inline-block;padding:5px 0}
.mobile-menu .mm-on{color:var(--blue);box-shadow:inset 3px 0 0 var(--blue);padding-left:12px}
.ns-fallback{max-width:var(--wrap);margin:16px auto;padding:14px 18px;background:#FFF7F5;border:1px solid #E8C4BC;border-radius:var(--radius);font-size:0.875rem}
.field-check label{display:flex;gap:10px;align-items:flex-start;font-size:0.8125rem;font-weight:400;color:var(--ink-soft);line-height:1.5}
.field-check label>span{flex:1}
.field-check a{color:var(--blue-d);font-weight:600}
.field-check input{margin-top:3px;width:18px;height:18px;flex:none}
.cta-phone em{opacity:.75;font-style:normal;font-size:0.78125rem}
.plan-echo{font-size:0.8125rem;color:var(--blue-d);background:var(--blue-t);border-radius:8px;padding:10px 12px;margin-bottom:10px}
.badge-built,.badge-mapped{display:inline-block;margin-top:12px;font-size:0.6875rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:3px 10px;border-radius:999px}
.badge-built{background:var(--blue-t);color:var(--blue-d)}
.badge-mapped{background:#F3EFE6;color:#655534}

/* in-page prose links need AA on cream */
.band a:not(.btn):not(.ind):not(.post):not(.pick):not(.backlink):not(.more){color:var(--blue-d)}
.dark-band a:not(.btn){color:#4D9BFF}
.foot-base a{color:#A8B2BC;text-decoration:underline}
@media(max-width:1100px){.hero .hero-grid{align-items:start}}
/* the demo page's two columns are a pitch beside a form — they read as one
   block only when their tops line up, at every width, not just under 1100px */
.demo-hero .hero-grid{align-items:start}
.risk-strip{max-width:820px;margin:0 auto 26px;text-align:center;font-size:0.9375rem;color:var(--ink-soft);background:var(--blue-t);border-radius:var(--radius);padding:14px 18px}
.cta-guarantee{margin-top:14px;font-size:0.875rem;color:rgba(255,255,255,.95)}
/* the disclosure must not be the least legible thing on the page */
.tier-inline{font-size:0.875rem;color:var(--ink-soft);background:var(--paper);border-left:3px solid var(--blue);padding:10px 14px;border-radius:0 8px 8px 0;margin:-2px 0 14px}
.tier-hint{display:block;margin-top:6px;font-size:0.84375rem;color:var(--ink-soft);font-weight:500}
.src-note{font-size:0.8125rem;color:var(--ink-mut);line-height:1.6;display:inline-block;max-width:70ch}

/* --- phone nav must fit the phone --- */
@media(max-width:560px){
  .nav-call{display:none}                 /* number is in the menu and the footer */
  .nav-right{gap:8px}
  .nav-right .btn{padding:11px 15px;font-size:14px}
  .brand{font-size:17px}
  .brand img{width:26px;height:26px}
}
@media(max-width:360px){
  .nav-right .btn{padding:10px 12px;font-size:13px}
  .brand{font-size:15px}
}
/* 3. closing-CTA text must clear AA on the blue gradient */
.cta-phone{color:#fff}
.cta-phone em{opacity:1;color:rgba(255,255,255,.9);font-size:0.8125rem}
.cta-guarantee{color:#fff}
.cta-box{background:linear-gradient(135deg,#0060DC,#0043A8)}
/* 5. ribbon accent on near-black */
.ribbon b{color:#4D9BFF}
/* 9. journey close must not sit on the chip, and must be tappable */
.journey-top{padding-right:64px}
.journey-close{min-width:44px;min-height:44px;display:grid;place-items:center;top:10px;right:10px}
/* 10. animating visibility made held-Tab skip the whole submenu */
.dropdown{transition:opacity .18s,transform .18s}
/* 12. secondary CTA needs to read as secondary on the blue box */
.cta-box .btn-ghost{background:transparent;color:#fff;border-color:rgba(255,255,255,.9)}
.cta-box .btn-ghost:hover{background:rgba(255,255,255,.12);border-color:#fff}
/* 15. focus ring should not fade in */
.btn{transition:background .18s ease,transform .18s ease,border-color .18s ease}
.foot-base a{padding:4px 0;display:inline-block}
.cta-phone a{padding:3px 0;display:inline}
.feat-line{font-size:1.0625rem;font-weight:600;color:var(--ink);line-height:1.35}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* blueprint as an actual ordered list */
.bp-list{max-width:760px;margin:0 auto;padding:0;list-style:none;counter-reset:bp;display:grid;gap:12px}
.bp-list li{counter-increment:bp;position:relative;background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px 18px 62px;font-size:1.0625rem;font-weight:600;color:var(--ink);line-height:1.35}
.bp-list li::before{content:counter(bp);position:absolute;left:18px;top:16px;width:28px;height:28px;border-radius:8px;background:var(--blue-t);color:var(--blue-d);display:grid;place-items:center;font-size:0.875rem;font-weight:700}
.dark-band .owner-note{padding-left:24px;padding-right:24px}

.more,.backlink{display:inline-block;padding:8px 0}

.bp-more{text-align:center;margin-top:18px;font-size:0.9375rem;color:var(--ink-soft)}
.bp-more a{color:var(--blue-d);font-weight:600}
.ind .badge-built,.ind .badge-mapped{margin-bottom:8px}


/* ============ round 19: UX grader punch list ============ */
/* 1. the wordmark was shrinking under the CTA button at 320-390px */
.nav{gap:10px}
.brand{min-width:0;flex:0 1 auto;overflow:hidden}
.nav-right{flex:none}
@media(max-width:400px){.nav-right .btn{padding:10px 12px;font-size:13px}}
/* the full "SANO Systems" wordmark stays on every phone — the brand shrinks a
   step and the nav CTA shortens to "Demo" instead, which is the cheaper word to
   lose. Both links keep their full accessible names (brand aria-label on the
   anchor, aria-label="Request a demo" on the CTA). */
@media(max-width:400px){
  .brand{font-size:15px;letter-spacing:-.01em;gap:8px}
  .brand img{width:24px;height:24px}
  .nav-right .btn.nav-cta{font-size:0;padding:11px 16px}
  .nav-right .btn.nav-cta::after{content:'Demo';font-size:14px;font-weight:600}
}
@media(max-width:340px){
  .brand{font-size:13.5px}
  .brand img{width:22px;height:22px}
  .nav-right .btn.nav-cta{padding:10px 13px}
}
/* 2. badge and card CTA were butting into each other with zero gap */
.ind .more{display:flex;width:fit-content}
.ind .badge-built,.ind .badge-mapped{margin-top:14px}
/* 3. Escape has to beat :focus-within, which a class can and aria alone cannot */
.nav-links>li.dismissed .dropdown{opacity:0;visibility:hidden;pointer-events:none}
/* 4./5. every link must look like a link, in the form card and on the industry heroes */
.form-card a:not(.btn){color:var(--blue-d);font-weight:600}
.backlink{color:var(--blue-d);font-weight:600;font-size:0.875rem}
.page-hero .backlink{display:block;text-align:left;margin-bottom:14px}
/* 11. the check marks were separating from the words they belong to */
.hero-trust>.t{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
/* 13. small-tap targets on the standalone section links */
.sec-link{display:inline-block;padding:6px 0;min-height:24px}
@media(max-width:400px){.cta-box .btn-lg{width:100%}}

.pick-legend{max-width:70ch;margin:-10px auto 22px;text-align:center;font-size:0.84375rem;color:var(--ink-soft);line-height:1.6}
.pick-legend strong{color:var(--ink)}
@media(max-width:900px){.demo-hero .hero-grid .form-card{order:-1}}
.sms-alt{text-align:center;font-size:0.875rem;margin-top:14px;color:var(--ink-soft)}
.sms-alt a{color:var(--blue-d);font-weight:600;display:inline-block;padding:6px 0}


/* ---------- line icons ----------
   brand-kit.md forbids clip-art icons; emoji were doing that job in 95 places.
   One stroke weight, one grid, inherits colour from whatever holds it. */
.ico{display:inline-block;width:24px;height:24px;stroke-width:1.75;overflow:visible;flex:none}
.pick .em,.ind .em{display:grid;place-items:center;width:30px;height:30px;color:var(--blue-d);font-size:0}
.feat .ic{padding:12px}

.v-badge .ic{padding:8px}
.post .thumb{font-size:0}
.post .thumb .ico{width:48px;height:48px;color:var(--blue-d);opacity:.85}
.feat-dark .ic{background:rgba(255,255,255,.08);color:#8FC2FF}
.page-hero .eyebrow .ico,.eyebrow .ico{width:14px;height:14px;display:inline-block;vertical-align:-2px}
.rib-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:#4D9BFF;vertical-align:1px;margin-right:4px}

/* an .ico inside running text is an inline glyph, not a tile icon */

.form-reassure{font-size:0.875rem;color:var(--blue-d);background:var(--blue-t);border-radius:8px;padding:9px 12px;margin:0 0 12px;text-align:center}
table.cmp .gl{display:inline-block;width:15px;height:15px;vertical-align:-2px;margin-right:2px}

/* icons only fill a container that has an explicit size */
.pick .em .ico,.ind .em .ico,.feat .ic .ico,.v-badge .ic .ico{display:block;width:100%;height:100%}
.bubble .ico,p > .ico,li > .ico{width:15px;height:15px;vertical-align:-2px}

/* on a phone the form leads, so its reason-to-complete has to travel with it */
.vp-mobile{list-style:none;margin:0 0 14px;padding:0;display:grid;gap:8px;font-size:0.875rem;color:var(--ink-soft)}
.vp-mobile li{position:relative;padding-left:22px;line-height:1.5}
.vp-mobile li::before{content:'';position:absolute;left:0;top:6px;width:12px;height:7px;border-left:2.5px solid var(--blue);border-bottom:2.5px solid var(--blue);transform:rotate(-45deg)}
@media(min-width:901px){.vp-mobile{display:none}}
@media(max-width:900px){.demo-hero .hero-grid > .reveal > ul{display:none!important}}

/* the demo form must fit a 320px phone; the send button may wrap there */
@media(max-width:400px){
  .form-card{padding:22px 18px}
  .form-card .btn-lg{white-space:normal}
}

/* customer-comprehension round: reassurance bands on industry pages */
.mapped-reassure{max-width:60ch;margin:18px auto 0;font-size:0.96875rem;line-height:1.6;color:var(--ink-soft);background:var(--blue-t);border-radius:12px;padding:14px 18px}
.privacy-band{max-width:60ch;margin:14px auto 0;font-size:0.9375rem;line-height:1.6;color:var(--ink-soft);background:var(--paper-2);border-left:3px solid var(--blue);border-radius:0 10px 10px 0;padding:12px 16px;text-align:left}
.bp-gloss{max-width:70ch;margin:0 auto 6px;color:var(--ink-mut);font-size:0.9375rem}
.how-it-sounds{max-width:70ch;margin:22px auto 0;font-size:0.96875rem;line-height:1.65;color:var(--ink-soft);background:var(--paper);border-radius:12px;padding:14px 18px}

.setup-note{font-size:0.8125rem;color:var(--ink-mut);margin-top:6px;line-height:1.5}
.minutes-note{max-width:70ch;margin:16px auto 0;font-size:0.90625rem;line-height:1.6;color:var(--ink-soft);background:var(--paper);border-radius:10px;padding:12px 16px}

/* ============ THE DOORWAY (homepage = industry picker, one screen, no scroll) ============ */
.doorway{display:flex;align-items:center;min-height:calc(100dvh - 104px);padding:20px 0}
.door-wrap{width:100%}
.door-head{text-align:center;margin-bottom:26px}
.door-head h1{font-size:clamp(1.5625rem,3.8vw,2.75rem);line-height:1.08}
.door-head p{font-size:clamp(0.9375rem,1.7vw,1.125rem);color:var(--ink-soft);margin-top:12px;max-width:64ch;margin-inline:auto;line-height:1.55}
.door-head p b{color:var(--ink)}
.door-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;max-width:1000px;margin:0 auto}
.door-tile{display:flex;flex-direction:column;align-items:flex-start;gap:9px;background:#fff;border:1px solid var(--line);border-radius:16px;padding:22px 20px;transition:border-color .18s,box-shadow .18s,transform .18s}
.door-tile:hover{border-color:var(--blue);box-shadow:var(--shadow);transform:translateY(-3px)}
.door-tile:focus-visible{outline:3px solid var(--blue);outline-offset:2px}
.dt-ico{width:38px;height:38px;color:var(--blue-d);display:grid;place-items:center;background:var(--blue-t);border-radius:11px;padding:8px}
.dt-ico .ico{width:100%;height:100%}
.door-tile b{font-size:1rem;color:var(--ink);line-height:1.2}
.dt-tag{font-size:0.8125rem;color:var(--ink-mut);line-height:1.4}
.door-foot{text-align:center;margin-top:24px;color:var(--ink-mut);font-size:0.875rem}
.door-foot a{color:var(--blue-d);font-weight:600}
@media(max-width:900px){
  .door-grid{grid-template-columns:repeat(2,1fr);gap:9px;max-width:460px}
  .doorway{min-height:auto;padding:10px 0 16px}
  .door-head{margin-bottom:11px}
  .door-head h1{font-size:clamp(1.375rem,6vw,1.8125rem)}
  .door-head p{font-size:0.875rem;margin-top:8px}
  .door-tile{padding:12px 12px;gap:7px;border-radius:13px;align-items:center;text-align:center}
  .dt-ico{width:34px;height:34px;padding:7px}
  .door-tile b{font-size:0.90625rem}
  .dt-tag{display:none}                 /* icon + name carry it on a phone */
  .door-foot{margin-top:14px;font-size:0.8125rem}
}
/* the disclaimer ribbon must not steal the phone's first screen */
@media(max-width:900px){.ribbon{font-size:0.6875rem;padding:5px 12px;line-height:1.35}}
/* very small phones: shave so the orientation line + all 8 tiles still fit one screen */
@media(max-width:560px){
  .door-head p{font-size:0.8125rem;line-height:1.45;margin-top:8px}
  .door-head h1{font-size:clamp(1.3125rem,6vw,1.6875rem)}
  .door-head{margin-bottom:9px}
  .door-tile{padding:11px 10px}
  .door-grid{gap:8px}
}
/* NARROW or SHORT phones, where the shave above still left the last row below
   the fold. Two triggers, because two different things cause it: at <=344px the
   columns get narrow enough that half the tile labels wrap to two lines, and at
   <=620px tall there simply isn't the room. A height-only gate left 320x640
   broken. Both are scoped clear of every viewport already certified for the
   no-scroll doorway (360x640, 375x667, 390x844, 1280, 1440), which is untouched. */
@media(max-width:344px), (max-width:900px) and (max-height:620px){
  .doorway{padding:6px 0 10px}
  .door-head{margin-bottom:7px}
  .door-head h1{font-size:1.25rem;line-height:1.1}
  .door-head p{font-size:0.78125rem;line-height:1.4;margin-top:6px}
  .door-tile{padding:8px 8px;gap:5px;border-radius:11px}
  .dt-ico{width:27px;height:27px;padding:6px;border-radius:9px}
  .door-tile b{font-size:0.84375rem}
  .door-grid{gap:7px}
  .door-foot{margin-top:9px;font-size:0.78125rem}
}

/* industry-page hook section (the trade-specific promise, now below the brand hero) */
#hook{padding-top:44px;padding-bottom:8px}
#hook h2{font-size:clamp(1.5rem,3.2vw,2.125rem)}
.hook-sub{font-size:1.1875rem;color:var(--ink-soft);line-height:1.6;margin:16px auto 0;max-width:60ch}
#hook .mapped-reassure,#hook .privacy-band{margin-left:auto;margin-right:auto}

/* ============ industry page: intentional pass (aesthetics reconciliation) ============ */
/* 2-column hero with a chat visual, left-aligned, overriding the centered .page-hero */
.ind-hero-sec{padding:56px 0 60px;text-align:left}
.ind-hero-sec .backlink{display:inline-block;margin-bottom:20px}
.ind-hero{align-items:center}
.hero-tags{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin-bottom:18px}
.hero-tags .eyebrow{margin-bottom:0}
.ready-tag{font-size:0.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:5px 11px;border-radius:999px;white-space:nowrap}
/* someone landing here straight from search never saw the doorway, so the badge
   has to say what it means on its own line rather than assume the picker */
.ready-note{flex-basis:100%;font-size:0.8125rem;line-height:1.45;color:var(--ink-mut);max-width:52ch}
.ind-hero h1{max-width:none;margin:0;font-size:clamp(2.125rem,4.4vw,3.25rem);text-wrap:balance}
.ind-hero .sub{max-width:44ch;margin-top:20px}
.ind-hero .hero-cta{justify-content:flex-start}
.ind-hero .visual{margin-top:0}
@media(max-width:960px){
  .ind-hero-sec{text-align:center;padding:40px 0 44px}
  .hero-tags{justify-content:center}
  .ready-note{margin-inline:auto;text-align:center}
  .ind-hero .sub{max-width:none;margin-inline:auto}
  .ind-hero .hero-cta{justify-content:center}
  .ind-hero .visual{margin-top:8px}
}

/* #hook is now a real section (kick + trade headline + emotional line), not filler */
#hook .kick{margin-bottom:10px}
#hook h2{font-size:clamp(1.5625rem,3.4vw,2.25rem)}
.hook-sub{font-size:1.1875rem;color:var(--ink-soft);line-height:1.65;margin:16px auto 0;max-width:60ch}

/* blueprint intro reads as prose, not placeholder italics */
.bp-gloss{font-size:0.96875rem;color:var(--ink-mut);max-width:70ch;margin:0 auto 8px;line-height:1.6}
.bp-gloss em{font-style:normal}

/* ONE callout system for the two supporting notes; price is the distinct money callout */
.how-it-sounds,.minutes-note{background:#fff;border:1px solid var(--line);border-radius:12px;padding:16px 20px;font-size:0.9375rem;line-height:1.6;text-align:left;margin:20px auto 0;max-width:760px}
.price-strip{background:var(--blue-t);border:1px solid rgba(0,112,243,.25);border-radius:12px;padding:16px 20px;font-size:0.9375rem;line-height:1.6;text-align:left;margin:20px auto 0;max-width:760px;color:var(--ink-soft)}
.blueprint-season{max-width:760px;margin:18px auto 0;text-align:left;font-size:0.9375rem;color:var(--ink-mut)}

/* numbered blueprint rows must not look like the FAQ accordion (no border, clearly static) */
.bp-list li{background:#fff;border:none;box-shadow:0 1px 3px rgba(9,9,11,.06)}

/* industry / 'other blueprints' cards line up across a row regardless of copy length */
.ind{display:flex;flex-direction:column}
.ind .badge-built,.ind .badge-mapped{margin-top:auto}
.ind .more{margin-top:14px}

/* 'We build yours' badge should read with the same confidence as the blue one */
.badge-mapped{background:#F3EFE6;color:#4A3D22}

/* CTA fine-print shouldn't be a full-width gray wall under the buttons */
.cta-guarantee{max-width:62ch;margin-left:auto;margin-right:auto}

/* corner radius matches the doorway's 16px across the card system */

/* industries 'same bones' = 6 cards in a clean 3+3 (was ragged 4+2) */
.feat-grid-3{grid-template-columns:repeat(3,1fr)}
@media(max-width:820px){.feat-grid-3{grid-template-columns:repeat(2,1fr)}}
@media(max-width:520px){.feat-grid-3{grid-template-columns:1fr}}
/* resources: tighten the space before the closing CTA so the page doesn't read half-built */
.res-tail{padding-bottom:20px}

/* sample-blueprint: numbered sections get structure instead of reading like a Word doc */
.article h2.sb-h{margin-top:40px;padding-top:26px;border-top:1px solid var(--line)}
.article h2.sb-h:first-of-type{border-top:none;padding-top:0;margin-top:24px}

/* ============ THE DEPARTMENT BOARD (industry pages) ============
   The trade pages used to show a 5-line blueprint, which read like one small
   product. This band shows the whole catalogue at once and ties every card to
   the level it starts at. It runs on a dark ground for two reasons: it is the
   centrepiece of the page, and "dimmed" only reads as LOCKED against dark —
   on paper it just reads as broken.
   The tier switch is real radio inputs + :has(), so it works with no JS at
   all. Where :has() is unsupported the grid simply renders fully lit with
   every tier chip visible, which is still true and still legible. */
.cap-band .sec-head p{color:#9FB0BF;max-width:64ch;margin-inline:auto}

/* --- the level switch. Four tabs on one hairline, not four filled pills: a
   solid-blue pill reads as a primary button, and with the drawer under it that
   put two "click me" objects between the heading and the phone that actually
   sells. Type carries the state instead — white label over a blue underline —
   so the only saturated blue left in the band belongs to the app. --- */
.tier-switch{border:0;padding:0;margin:30px auto 0;max-width:680px}
.tier-radio{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.tier-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border-bottom:1px solid rgba(255,255,255,.13)}
.tier-tab{display:flex;flex-direction:column;align-items:center;gap:2px;cursor:pointer;
  padding:10px 6px 13px;margin-bottom:-1px;border-bottom:2px solid transparent;
  color:#9FB0BF;font-family:var(--disp);transition:color .16s,border-color .16s}
.tier-tab b{font-size:0.9375rem;font-weight:600}
.tier-tab i{font-style:normal;font-size:0.78125rem;color:#7E90A1}
.tier-tab:hover{color:#E8F1F8}
.tier-radio:checked + .tier-tab{color:#fff;border-bottom-color:var(--blue)}
.tier-radio:checked + .tier-tab i{color:#9EC9FF}
.tier-radio:focus-visible + .tier-tab{outline:3px solid #4D9BFF;outline-offset:-2px}
@media(max-width:430px){ .tier-tab b{font-size:0.84375rem} .tier-tab i{font-size:0.71875rem} }

/* --- the running count --- */
.cap-count{text-align:center;margin-top:16px;font-size:0.96875rem;color:#9FB0BF;min-height:1.5em}
.cap-count b{color:#fff;font-weight:700}
.cap-count .cc{display:none}
.cap-count .cc-growth{display:inline}
.cap-band:has(#t-starter:checked) .cc-growth,
.cap-band:has(#t-scale:checked) .cc-growth,
.cap-band:has(#t-total:checked) .cc-growth{display:none}
.cap-band:has(#t-starter:checked) .cc-starter,
.cap-band:has(#t-growth:checked) .cc-growth,
.cap-band:has(#t-scale:checked) .cc-scale,
.cap-band:has(#t-total:checked) .cc-total{display:inline}

/* --- the grid: a QUICK VIEW you can take in at a glance, not a wall of prose.
       16 compact tiles fit on one phone screen-and-a-bit; the full explanation
       lives in a sheet that opens on tap. --- */
.cap-radio{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.cap-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:26px}
.cap{position:relative;display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;
  background:var(--dark-2);border:1px solid rgba(255,255,255,.1);border-radius:14px;
  padding:16px 10px 13px;cursor:pointer;transition:opacity .22s,border-color .18s,transform .18s,background .18s}
.cap:hover{border-color:rgba(77,155,255,.55);background:#181820;transform:translateY(-2px)}
.cap-radio:focus-visible + .cap{outline:3px solid #4D9BFF;outline-offset:3px}
.cap-ic{width:32px;height:32px;border-radius:9px;background:rgba(0,112,243,.18);color:#4D9BFF;
  display:grid;place-items:center;padding:7px;flex:none}
.cap-ic .ico{width:100%;height:100%}
.cap b{font-family:var(--disp);font-size:0.84375rem;color:#fff;line-height:1.25;font-weight:600}
.cap-tier{display:inline-block;font-size:0.625rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;
  padding:2px 8px;border-radius:999px;background:rgba(0,112,243,.2);color:#7DB8FF;white-space:nowrap}
.cap-more{margin-top:auto;font-size:0.71875rem;font-weight:600;color:#6E8296}
.cap:hover .cap-more{color:#4D9BFF}
.cap-hint{text-align:center;margin-top:14px;font-size:0.84375rem;color:#7E90A1}

/* --- the drawer. The 23 tiles were 950px of spec sheet sitting between the tier
   switch and the app demo, so the app — the thing that actually sells — did not
   appear until ~2,175px on a phone. They now collapse behind one control. It is
   a LINE OF TEXT, not a bar: the tier tabs above it and the app below are the
   two objects that matter, and a third bordered box between them was the reason
   the area felt bolted on. The live count above carries the scale, so the
   breadth is still stated while the list is shut. No JS: a checkbox plus :has(),
   same as the tier switch. --- */
.caps-chk{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.drawer{margin-top:12px;text-align:center}
.drw-link{display:inline-flex;align-items:center;gap:8px;cursor:pointer;
  color:#8FC2FF;font-family:var(--disp);font-weight:600;font-size:0.90625rem;
  border-bottom:1px solid rgba(143,194,255,.35);padding-bottom:2px;
  transition:color .16s,border-color .16s;text-align:center;max-width:100%}
/* in the prototype's narrower rail the label wraps, and an inline-flex child
   left-aligns its own wrapped lines while the chevron floats beside them */
.drw-link > span{text-align:center}
.drw-link:hover{color:#BBDBFF;border-bottom-color:#8FC2FF}
.drw-shut{display:none}
.drw-cv{flex:none;color:currentColor;transition:transform .2s}
.caps-chk:focus-visible + .drawer .drw-link{outline:3px solid #4D9BFF;outline-offset:3px}
.cap-band .cap-grid{display:none}
.cap-band:has(.caps-chk:checked) .cap-grid{display:grid;margin-top:16px}
.cap-band:has(.caps-chk:checked) .drw-cv{transform:rotate(180deg)}
.cap-band:has(.caps-chk:checked) .drw-open{display:none}
.cap-band:has(.caps-chk:checked) .drw-shut{display:block}
/* Without :has() the drawer cannot work, so the board renders open and the bar is
   removed — the same honest-degrade the tier switch already relies on. */
@supports not (selector(:has(*))){
  .cap-band .cap-grid{display:grid}
  .drawer{display:none}
}

/* --- the sheet: bottom sheet on a phone, centred panel on a desktop --- */
.cap-sheet{position:fixed;inset:0;z-index:120;display:none;align-items:center;justify-content:center;padding:20px}
.cap-radio:checked + .cap + .cap-sheet{display:flex}
.cs-scrim{position:absolute;inset:0;background:rgba(4,6,10,.72);backdrop-filter:blur(3px);cursor:pointer}
.cs-panel{position:relative;width:100%;max-width:520px;max-height:82vh;overflow:auto;
  background:#14141A;border:1px solid rgba(255,255,255,.14);border-radius:18px;padding:26px 26px 24px;
  box-shadow:0 30px 80px rgba(0,0,0,.6);animation:capin .18s ease}
@keyframes capin{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
/* superseded: the close is a focusable <label for="co-none" tabindex="0"> now (B041), styled below */
.cs-x:hover{background:rgba(255,255,255,.08);color:#fff}
.cs-head{display:flex;align-items:center;gap:13px;padding-right:40px}
.cs-head .cap-ic{width:44px;height:44px;border-radius:12px;padding:9px}
.cs-head b{display:block;font-family:var(--disp);font-size:1.1875rem;color:#fff;line-height:1.2;margin-bottom:6px}
.cs-line{margin-top:18px;font-size:1.03125rem;line-height:1.6;color:#E4EBF1}
.cs-general{margin-top:12px;font-size:0.9375rem;line-height:1.6;color:#9FB0BF}
.cs-more{margin-top:14px;font-size:0.9375rem;line-height:1.65;color:#B8C7D4}
.cs-foot{margin-top:18px;padding-top:14px;border-top:1px solid rgba(255,255,255,.12);font-size:0.875rem;color:#8FA3B4}
.cs-foot strong{color:#fff}
@media(max-width:640px){
  .cap-sheet{align-items:flex-end;padding:0}
  .cs-panel{max-width:none;max-height:86vh;border-radius:20px 20px 0 0;padding:24px 20px 28px;
    animation:capup .2s ease}
  @keyframes capup{from{transform:translateY(100%)}to{transform:none}}
}
@media(prefers-reduced-motion:reduce){.cs-panel{animation:none}}

/* --- locked: above the selected level. Visible on purpose — seeing the rungs
       above you is the point of the band. --- */
.cap-band:has(#t-starter:checked) .cap-growth,
.cap-band:has(#t-starter:checked) .cap-scale,
.cap-band:has(#t-starter:checked) .cap-total,
.cap-band:has(#t-growth:checked) .cap-scale,
.cap-band:has(#t-growth:checked) .cap-total,
.cap-band:has(#t-scale:checked) .cap-total{border-color:rgba(255,255,255,.06);background:#0F0F14;box-shadow:none}
.cap-band:has(#t-starter:checked) .cap-growth .cap-ic,
.cap-band:has(#t-starter:checked) .cap-scale .cap-ic,
.cap-band:has(#t-starter:checked) .cap-total .cap-ic,
.cap-band:has(#t-growth:checked) .cap-scale .cap-ic,
.cap-band:has(#t-growth:checked) .cap-total .cap-ic,
.cap-band:has(#t-scale:checked) .cap-total .cap-ic{background:rgba(255,255,255,.07);color:#8FA3B4}
.cap-band:has(#t-starter:checked) .cap-growth .cap-tier,
.cap-band:has(#t-starter:checked) .cap-scale .cap-tier,
.cap-band:has(#t-starter:checked) .cap-total .cap-tier,
.cap-band:has(#t-growth:checked) .cap-scale .cap-tier,
.cap-band:has(#t-growth:checked) .cap-total .cap-tier,
.cap-band:has(#t-scale:checked) .cap-total .cap-tier{background:rgba(255,255,255,.08);color:#9FB0BF}
.cap-band:has(#t-starter:checked) .cap-growth .cap-tier::before,
.cap-band:has(#t-starter:checked) .cap-scale .cap-tier::before,
.cap-band:has(#t-starter:checked) .cap-total .cap-tier::before,
.cap-band:has(#t-growth:checked) .cap-scale .cap-tier::before,
.cap-band:has(#t-growth:checked) .cap-total .cap-tier::before,
.cap-band:has(#t-scale:checked) .cap-total .cap-tier::before{content:'Unlocks at '}
/* Spanish pages: the same prefix in Spanish (W8 lawn, 10/19: it read "UNLOCKS AT GROWTH" in English); pending Sebastian */
:lang(es) .cap-band:has(#t-starter:checked) .cap-growth .cap-tier::before,
:lang(es) .cap-band:has(#t-starter:checked) .cap-scale .cap-tier::before,
:lang(es) .cap-band:has(#t-starter:checked) .cap-total .cap-tier::before,
:lang(es) .cap-band:has(#t-growth:checked) .cap-scale .cap-tier::before,
:lang(es) .cap-band:has(#t-growth:checked) .cap-total .cap-tier::before,
:lang(es) .cap-band:has(#t-scale:checked) .cap-total .cap-tier::before{content:'Desde '}

.cap-foot{max-width:780px;margin:30px auto 0;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);border-radius:12px;padding:16px 20px;font-size:0.9375rem;line-height:1.6;color:#B8C7D4;text-align:left}
.cap-foot strong{color:#fff}
/* The all-in line used to be frozen on Growth's numbers while the switch above it
   changed level — so a visitor who picked Starter read "$2,497 to build it" when
   theirs is $997, and Total read 6x low. SANO_TIERS already carries the real
   setup and minimum per level (its own comment warns they are not uniform), so
   the line now follows the pick, the same way the prototype already did it. */
.cap-foot .mn{display:none}
.cap-band:has(#t-starter:checked) .mn-starter,
.cap-band:has(#t-growth:checked)  .mn-growth,
.cap-band:has(#t-scale:checked)   .mn-scale,
.cap-band:has(#t-total:checked)   .mn-total{display:block}
/* without :has() the switch cannot drive anything, so show all four rather than
   collapse the price to nothing — the same honest-degrade the board already uses */
@supports not (selector(:has(*))){ .cap-foot .mn{display:block} .cap-foot .mn + .mn{margin-top:10px} }

/* The app guide chip, same per-level treatment and for the same reason: it read
   "Runs on every level" in ALL FOUR states while pricing.html sells the app from
   Growth up and the app's own footnote says Starter gets a report. There are five
   of these chips (one per app screen), so the wrong string was on screen 40 times
   per trade page. Degrades to the Growth line — that is the recommended tier and
   the one the switch defaults to, so it is the true statement for most readers. */
.pk .pkl{display:none}
.cap-band:has(#t-starter:checked) .pkl-starter,
.cap-band:has(#t-growth:checked)  .pkl-growth,
.cap-band:has(#t-scale:checked)   .pkl-scale,
.cap-band:has(#t-total:checked)   .pkl-total{display:inline}
@supports not (selector(:has(*))){ .pk .pkl{display:none} .pk .pkl-growth{display:inline} }

@media(max-width:1100px){ .cap-grid{grid-template-columns:repeat(3,minmax(0,1fr))} }
@media(max-width:820px){
  .cap-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:11px}
  .cap{padding:16px 15px}
  .tier-tab{padding:9px 4px 11px}
}
@media(max-width:480px){
  .cap-grid{gap:9px}
  .cap{padding:14px 13px;border-radius:13px}
  .cap-ic{width:32px;height:32px;margin-bottom:10px;border-radius:9px}
  .cap b{font-size:0.90625rem}
  .cap p{font-size:0.8125rem}
  .cap-foot{padding:14px 16px;font-size:0.90625rem}
  .cap-count{font-size:0.90625rem}
}
@media(prefers-reduced-motion:reduce){ .cap{transition:none} }

/* ================= APP DEMO (namespaced sample-app styles) ================= */
.appdemo{--blue:#0B63CE;--blue2:#3B87F0;--sky:#E8F1FE;--ink:#101828;--mid:#344054;--muted:#667085;--line:#EAECF0;--bg:#F7F9FC;
--green:#12A55F;--mint:#E7F7EF;--amber:#E08A25;--cream:#FDF3E5;--star:#F5A623;--red:#D92D20;
--sf:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;--brand:'Space Grotesk',system-ui,sans-serif}.appdemo{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}.appdemo, .appdemo{height:100%;overflow:hidden}.appdemo{background:#E9EEF5;font-family:var(--brand);color:var(--ink);-webkit-font-smoothing:antialiased;line-height:1.45;
  display:flex;flex-direction:column;align-items:center;padding:10px 10px 12px}.appdemo svg.i{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}.appdemo .intro{flex-shrink:0;text-align:center;max-width:400px;padding:2px 0 9px}.appdemo .intro h1{font-size:16.5px;font-weight:600;letter-spacing:-.01em;line-height:1.25}.appdemo .intro h1 b{color:var(--blue)}.appdemo .intro p{font-size:12px;color:var(--muted);margin-top:3px}
@media(max-height:620px){.appdemo .intro p{display:none}.appdemo .intro h1{font-size:15px}}.appdemo .phone{flex:1;min-height:0;width:100%;max-width:400px;max-height:860px;background:#fff;border-radius:20px;overflow:hidden;
  box-shadow:0 8px 44px rgba(16,24,40,.16);font-family:var(--sf);display:flex;flex-direction:column}.appdemo .top{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--line);flex-shrink:0}.appdemo .ava{width:36px;height:36px;border-radius:50%;background:var(--blue);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;flex-shrink:0}.appdemo .who{flex:1;min-width:0}.appdemo .who .n{font-weight:700;font-size:15px;display:flex;align-items:center;gap:4px;letter-spacing:-.01em}.appdemo .who .n svg{width:14px;height:14px;color:var(--muted)}.appdemo .who .l{font-size:11.5px;color:var(--muted)}.appdemo .tico{display:flex;gap:14px;color:var(--mid)}.appdemo .tico .wrapb{position:relative;display:flex}.appdemo .tico .bdot{position:absolute;top:-2px;right:-2px;width:7px;height:7px;background:var(--red);border-radius:50%;border:1.5px solid #fff}.appdemo .scr{display:none;padding:14px;background:var(--bg);flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch}.appdemo .scr.on{display:block}.appdemo .h2{font-size:16px;font-weight:700;letter-spacing:-.01em;display:flex;align-items:center;justify-content:space-between;margin-bottom:11px}.appdemo .h2 svg{width:17px;height:17px;color:var(--muted)}.appdemo .sgrid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.appdemo .sc{background:#fff;border:1px solid var(--line);border-radius:13px;padding:13px}.appdemo .sc .r{display:flex;justify-content:space-between;align-items:flex-start}.appdemo .sc .lab{font-size:11.5px;color:var(--muted);line-height:1.3;max-width:74%}.appdemo .ic{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}.appdemo .ic svg{width:15px;height:15px}.appdemo .ic.g{background:var(--mint);color:var(--green)}.appdemo .ic.b{background:var(--sky);color:var(--blue)}.appdemo .ic.a{background:var(--cream);color:var(--amber)}.appdemo .sc .v{font-size:26px;font-weight:700;letter-spacing:-.02em;margin-top:9px}.appdemo .sec{margin-top:18px}.appdemo .sec .t{font-size:13.5px;font-weight:700;margin-bottom:9px;display:flex;justify-content:space-between;align-items:center}.appdemo .sec .t span{font-size:11.5px;color:var(--blue);font-weight:600}.appdemo .pins{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;text-align:center}.appdemo .pin .c{width:46px;height:46px;border-radius:50%;border:1.4px solid var(--line);background:#fff;display:flex;align-items:center;justify-content:center;margin:0 auto;color:var(--mid)}.appdemo .pin .c svg{width:19px;height:19px}.appdemo .pin .l{font-size:10.5px;color:var(--mid);margin-top:5px;line-height:1.2}.appdemo .qa{background:#fff;border:1px solid var(--line);border-radius:13px;padding:6px 13px}.appdemo .qrow{display:flex;align-items:center;gap:11px;padding:11px 0;border-bottom:1px solid var(--line);font-size:14px;color:var(--mid)}.appdemo .qrow:last-child{border-bottom:none}.appdemo .qrow svg{width:17px;height:17px;color:var(--blue)}.appdemo .qrow .ch{margin-left:auto;color:#C6CBD4}.appdemo .rev{background:#fff;border:1px solid var(--line);border-radius:13px;padding:14px}.appdemo .bars{display:flex;align-items:flex-end;gap:8px;height:96px;margin-top:12px}.appdemo .bc{flex:1;display:flex;flex-direction:column;justify-content:flex-end;height:100%;text-align:center}.appdemo .bc .b{width:100%;background:linear-gradient(180deg,var(--blue2),var(--blue));border-radius:4px 4px 0 0;transition:height .7s cubic-bezier(.16,1,.3,1);height:0}.appdemo .bc .l{font-size:10px;color:var(--muted);margin-top:5px}.appdemo .search{background:#fff;border:1px solid var(--line);border-radius:10px;padding:10px 12px;display:flex;align-items:center;gap:9px;color:var(--muted);font-size:13.5px}.appdemo .itabs{display:flex;gap:18px;border-bottom:1px solid var(--line);margin:13px 0 11px}.appdemo .itab{font-size:13.5px;color:var(--muted);padding-bottom:9px;border-bottom:2px solid transparent;font-weight:500}.appdemo .itab.on{color:var(--blue);border-color:var(--blue);font-weight:600}.appdemo .chips{display:flex;gap:7px;overflow:auto;padding-bottom:3px;margin-bottom:11px}.appdemo .cp{border:1px solid var(--line);background:#fff;border-radius:999px;padding:5px 11px;font-size:12px;color:var(--mid);white-space:nowrap}.appdemo .cp.on{background:var(--sky);border-color:var(--blue);color:var(--blue);font-weight:600}.appdemo .thr, .appdemo .cc{background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px;margin-bottom:8px;display:flex;gap:11px;align-items:center}.appdemo .tapme{cursor:pointer;border-color:#BBD4F5;box-shadow:0 0 0 2px rgba(11,99,206,.07)}.appdemo .tapme:active{background:#F2F7FE}.appdemo .thr .av, .appdemo .cc .av{width:38px;height:38px;border-radius:50%;background:var(--sky);color:var(--blue);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:12.5px;position:relative;flex-shrink:0}.appdemo .thr .av .ba{position:absolute;bottom:-2px;right:-3px;width:17px;height:17px;border-radius:50%;background:#fff;border:1px solid var(--line);display:flex;align-items:center;justify-content:center;color:var(--blue)}.appdemo .thr .av .ba svg{width:9px;height:9px}.appdemo .bd{flex:1;min-width:0}.appdemo .nm{font-weight:600;font-size:14px}.appdemo .pv, .appdemo .sb{font-size:12.5px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:1px}.appdemo .rt{text-align:right;flex-shrink:0}.appdemo .tm{font-size:11px;color:var(--muted)}.appdemo .un{background:var(--green);color:#fff;font-size:10.5px;font-weight:700;border-radius:999px;min-width:19px;height:19px;display:inline-flex;align-items:center;justify-content:center;padding:0 5px;margin-top:4px}.appdemo .tapx{color:var(--blue);flex-shrink:0;display:flex;align-items:center;gap:2px;font-size:10.5px;font-weight:700}.appdemo .tapx svg{width:17px;height:17px}.appdemo .back{display:inline-flex;align-items:center;gap:7px;font-size:14px;color:var(--blue);font-weight:600;margin-bottom:11px;cursor:pointer;padding:6px 10px 6px 4px;border-radius:8px}.appdemo .back:active{background:#E8F1FE}.appdemo .back svg{width:16px;height:16px}.appdemo .miss{background:#FEF3F2;color:var(--red);font-size:11.5px;text-align:center;padding:7px;border-radius:8px;margin-bottom:11px}.appdemo .bub{max-width:82%;padding:9px 12px;border-radius:15px;font-size:13.5px;margin-bottom:8px;opacity:0;transform:translateY(8px);transition:.4s}.appdemo .bub.show{opacity:1;transform:none}.appdemo .bub.them{background:#fff;border:1px solid var(--line);border-bottom-left-radius:5px}.appdemo .bub.us{background:var(--blue);color:#fff;margin-left:auto;border-bottom-right-radius:5px}
.appdemo .bub.note{max-width:92%;margin:2px auto 10px;background:#ECFDF3;color:#067647;border:1px solid #ABEFC6;border-radius:10px;font-size:12px;text-align:center}.appdemo .bub .w{font-size:9.5px;opacity:.8;display:block;margin-bottom:2px;text-transform:uppercase;letter-spacing:.04em}.appdemo .auto{text-align:center;font-size:11.5px;color:var(--muted);margin:12px 0 4px}
.appdemo .auto.auto-wait{font-size:10.5px;margin:2px 0 4px}.appdemo .crow{display:flex;justify-content:space-between;align-items:center;margin-bottom:11px}.appdemo .mv{display:flex;align-items:center;gap:7px;font-size:14px;font-weight:600}.appdemo .todaypill{border:1px solid var(--line);background:#fff;border-radius:999px;padding:5px 13px;font-size:12.5px;font-weight:600;color:var(--mid)}.appdemo .cal{background:#fff;border:1px solid var(--line);border-radius:13px;padding:13px}.appdemo .cnav{display:flex;justify-content:space-between;align-items:center;font-size:14px;font-weight:600;margin-bottom:11px}.appdemo .cnav svg{width:16px;height:16px;color:var(--muted)}.appdemo .dow, .appdemo .days{display:grid;grid-template-columns:repeat(7,1fr);text-align:center}.appdemo .dow div{font-size:10.5px;color:var(--muted);padding-bottom:6px}.appdemo .days div{padding:7px 0;font-size:13px;position:relative}.appdemo .days .dot{width:4px;height:4px;background:var(--blue);border-radius:50%;position:absolute;bottom:2px;left:50%;transform:translateX(-50%)}.appdemo .days .sel{background:var(--blue);color:#fff;border-radius:50%;width:29px;height:29px;display:flex;align-items:center;justify-content:center;margin:0 auto}.appdemo .days .mut{color:#C6CBD4}.appdemo .agd{font-size:12px;font-weight:700;color:var(--mid);margin:14px 0 8px}.appdemo .ev{background:#fff;border:1px solid var(--line);border-left:3px solid var(--blue);border-radius:10px;padding:11px 12px;margin-bottom:8px}.appdemo .ev .t{font-weight:600;font-size:14px}.appdemo .ev .s{font-size:12.5px;color:var(--muted);margin-top:2px}.appdemo .rec{background:#fff;border:1px solid var(--line);border-radius:13px;padding:15px}.appdemo .rectabs{display:flex;gap:16px;border-bottom:1px solid var(--line);margin:13px 0;overflow:auto}.appdemo .rectabs div{font-size:13px;color:var(--muted);padding-bottom:8px;white-space:nowrap}.appdemo .rectabs div.on{color:var(--blue);border-bottom:2px solid var(--blue);font-weight:600}.appdemo .fld{display:flex;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid var(--line);font-size:13.5px}.appdemo .fld:last-of-type{border-bottom:none}.appdemo .fld .k{color:var(--muted);flex-shrink:0}.appdemo .fld .v{font-weight:600;text-align:right}.appdemo .cfnote{font-size:11.5px;color:var(--blue);background:var(--sky);border-radius:8px;padding:9px 11px;margin-top:11px;line-height:1.4}.appdemo .mets{display:flex;gap:9px;overflow:auto;padding-bottom:4px}.appdemo .met{background:#fff;border:1px solid var(--line);border-radius:12px;padding:13px;min-width:126px;flex-shrink:0}.appdemo .met .k{font-size:11.5px;color:var(--muted)}.appdemo .met .v{font-size:23px;font-weight:700;margin-top:6px;letter-spacing:-.02em}.appdemo .stars{color:var(--star);font-size:13px}.appdemo .rv{background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px;margin-bottom:8px}.appdemo .rv .hd{display:flex;align-items:center;gap:10px}.appdemo .rv .tx{font-size:13px;color:var(--mid);margin-top:8px}.appdemo .st{font-size:10.5px;font-weight:600;padding:3px 8px;border-radius:999px;margin-left:auto}.appdemo .st.sent{background:var(--sky);color:var(--blue)}.appdemo .st.done{background:var(--mint);color:var(--green)}.appdemo .tcard{background:#fff;border:1px solid #DFE5EE;border-radius:14px;padding:16px;font-family:var(--brand);margin-top:18px}.appdemo .tcard h3{font-size:16.5px;font-weight:700;letter-spacing:-.01em}.appdemo .tcard p{font-size:13px;color:var(--muted);margin-top:6px}.appdemo .ti{border:1px solid var(--line);border-radius:11px;padding:12px 13px;margin-top:10px}.appdemo .ti.now{background:#F4FBF7;border-color:#BFE7D2}.appdemo .ti .lb{font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:700;color:var(--green)}.appdemo .ti.later .lb{color:var(--blue)}.appdemo .ti .h{font-size:14px;font-weight:700;margin-top:4px}.appdemo .ti .d{font-size:12.5px;color:var(--muted);margin-top:4px}.appdemo .madeby{text-align:center;font-size:11px;color:var(--muted);font-family:var(--brand);margin:14px 0 4px}.appdemo .madeby b{color:var(--blue)}.appdemo .adnav{display:grid;grid-template-columns:repeat(5,1fr);border-top:1px solid var(--line);background:#fff;padding:7px 2px 9px;flex-shrink:0}.appdemo .nb{background:none;border:none;font-family:var(--sf);color:var(--muted);display:flex;flex-direction:column;align-items:center;gap:3px;font-size:10px;cursor:pointer;padding:4px 2px;border-radius:9px}.appdemo .nb svg{width:21px;height:21px}.appdemo .nb.on{color:var(--blue);font-weight:600}.appdemo .nb:active{background:#EEF4FD}.appdemo .phone > input.tabr{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.appdemo .scr{display:none}.appdemo #ad-t-home:checked ~ #ad-s-home, .appdemo #ad-t-conv:checked ~ #ad-s-conv, .appdemo #ad-t-cal:checked ~ #ad-s-cal, .appdemo #ad-t-cont:checked ~ #ad-s-cont, .appdemo #ad-t-rev:checked ~ #ad-s-rev{display:block}.appdemo #ad-t-home:checked ~ .adnav label[for=t-home], .appdemo #ad-t-conv:checked ~ .adnav label[for=t-conv], .appdemo #ad-t-cal:checked ~ .adnav label[for=t-cal], .appdemo #ad-t-cont:checked ~ .adnav label[for=t-cont], .appdemo #ad-t-rev:checked ~ .adnav label[for=t-rev]{color:var(--blue);font-weight:600}.appdemo input.drill{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.appdemo #ad-cont-rec{display:none}.appdemo #ad-cbCont:checked ~ #ad-cont-list{display:none}.appdemo #ad-cbCont:checked ~ #ad-cont-rec{display:block}.appdemo .bc .b{transform-origin:bottom;animation:grow .7s cubic-bezier(.16,1,.3,1) both}
@keyframes grow{from{transform:scaleY(0)}to{transform:scaleY(1)}}.appdemo .bc:nth-child(1) .b{animation-delay:.05s}.appdemo .bc:nth-child(2) .b{animation-delay:.14s}.appdemo .bc:nth-child(3) .b{animation-delay:.23s}.appdemo .bc:nth-child(4) .b{animation-delay:.32s}.appdemo .bc:nth-child(5) .b{animation-delay:.41s}.appdemo .bc:nth-child(6) .b{animation-delay:.50s}.appdemo .bub{animation:fadein .45s cubic-bezier(.16,1,.3,1) both}
@keyframes fadein{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:none}}.appdemo #ad-bubs .bub:nth-child(1){animation-delay:.15s}.appdemo #ad-bubs .bub:nth-child(2){animation-delay:.75s}.appdemo #ad-bubs .bub:nth-child(3){animation-delay:1.35s}.appdemo #ad-bubs .bub:nth-child(4){animation-delay:1.95s}.appdemo #ad-bubs .bub:nth-child(5){animation-delay:2.55s}.appdemo label.nb, .appdemo label.tapme, .appdemo label.back{cursor:pointer;-webkit-user-select:none;user-select:none}.appdemo label.sc, .appdemo label.pin{display:block}.appdemo label.sc, .appdemo label.pin, .appdemo label.qrow{cursor:pointer;-webkit-user-select:none;user-select:none;transition:.15s}.appdemo label.sc:hover{border-color:#BBD4F5;box-shadow:0 2px 10px rgba(11,99,206,.08)}.appdemo label.sc:active{background:#F2F7FE;transform:scale(.985)}.appdemo label.pin:hover .c{border-color:var(--blue);color:var(--blue)}.appdemo label.pin:active .c{background:#EEF4FD}.appdemo label.qrow:hover{background:#F7FAFF}.appdemo label.qrow:active{background:#EEF4FD}.appdemo .itab, .appdemo .cp, .appdemo .rectabs div, .appdemo .days div, .appdemo .ev, .appdemo .met, .appdemo .rv, .appdemo .search, .appdemo .todaypill, .appdemo .mv, .appdemo .cnav, .appdemo .thr:not(.tapme), .appdemo .cc:not(.tapme), .appdemo .tico, .appdemo .who{cursor:default}.appdemo #ad-conv-list, .appdemo #ad-conv-thread, .appdemo #ad-conv-q{display:none}.appdemo #ad-cv-list:checked ~ #ad-conv-list{display:block}.appdemo #ad-cv-ray:checked ~ #ad-conv-thread{display:block}.appdemo #ad-cv-q:checked ~ #ad-conv-q{display:block}.appdemo .qnote{background:var(--sky);color:var(--blue);font-size:11.5px;text-align:center;padding:7px;border-radius:8px;margin-bottom:11px;font-weight:600}.appdemo #ad-bubq .bub:nth-child(1){animation-delay:.15s}.appdemo #ad-bubq .bub:nth-child(2){animation-delay:.75s}.appdemo #ad-bubq .bub:nth-child(3){animation-delay:1.35s}.appdemo #ad-bubq .bub:nth-child(4){animation-delay:1.95s}.appdemo #ad-bubq .bub:nth-child(5){animation-delay:2.55s}.appdemo #ad-bubq .bub:nth-child(6){animation-delay:3.15s}.appdemo .wgrid{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin:14px 0 4px}.appdemo .tbx{background:#F4FBF7;border:1px solid #BFE7D2;border-radius:11px;padding:12px}.appdemo .tbx b{display:block;font-size:22px;font-weight:700;letter-spacing:-.02em;color:#0B6B3F}.appdemo .tbx span{font-size:11.5px;color:var(--muted);display:block;margin-top:3px;line-height:1.3}.appdemo .hint{font-size:12px;color:var(--muted);text-align:center;margin-top:12px;font-style:italic}.appdemo .guide{display:flex;gap:10px;align-items:flex-start;background:#EAF3FF;border:1px solid #CFE2FB;border-radius:12px;padding:11px 12px;margin-bottom:13px}.appdemo .guide .gi{width:26px;height:26px;border-radius:50%;background:var(--blue);color:#fff;display:flex;align-items:center;justify-content:center;flex-shrink:0}.appdemo .guide .gi svg{width:15px;height:15px}.appdemo .guide .gt{font-size:12.5px;color:var(--mid);line-height:1.45}.appdemo .guide .gt b{color:var(--ink)}.appdemo .guide .pk{display:block;width:max-content;max-width:100%;margin-top:7px;font-size:10px;font-weight:700;letter-spacing:.02em;color:#0B6B3F;background:#E7F7EF;border-radius:999px;padding:3px 9px}.appdemo .plainnote{border-top:1px solid var(--line);padding-top:14px;margin-top:16px}.appdemo .plainnote .t{font-size:13px;font-weight:700;margin-bottom:5px;display:flex;align-items:center;gap:7px}.appdemo .plainnote .t svg{width:15px;height:15px;color:var(--blue)}.appdemo .plainnote p{font-size:12.5px;color:var(--mid);line-height:1.5}.appdemo .plainnote b{color:var(--ink)}.appdemo #ad-introToggle{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.appdemo .introwrap{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:22px;
  background:rgba(12,22,40,.55);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.appdemo #ad-introToggle:checked ~ .introwrap{display:none}.appdemo .introcard{background:#fff;border-radius:18px;max-width:360px;width:100%;padding:24px 22px;box-shadow:0 20px 60px rgba(12,22,40,.4);font-family:var(--brand)}.appdemo .introcard .hi{font-size:20px;font-weight:700;letter-spacing:-.01em}.appdemo .introcard p{font-size:14px;color:var(--mid);line-height:1.55;margin-top:11px}.appdemo .introcard p b{color:var(--ink)}.appdemo .introcard .go{display:block;text-align:center;margin-top:18px;background:var(--blue);color:#fff;font-weight:600;font-size:15px;
  padding:13px;border-radius:11px;cursor:pointer;-webkit-user-select:none;user-select:none}.appdemo .introcard .go:active{background:#0A55B4}.appdemo .helpbtn{cursor:pointer}.appdemo .guide{padding:12px 13px}.appdemo .guide .gt{padding-top:1px}.appdemo .metafade{position:relative}.appdemo .mets::-webkit-scrollbar, .appdemo .chips::-webkit-scrollbar, .appdemo .rectabs::-webkit-scrollbar{display:none}.appdemo .mets, .appdemo .chips, .appdemo .rectabs{scrollbar-width:none}.appdemo .rectabs{position:relative}.appdemo #ad-s-rev .mets{-webkit-mask-image:linear-gradient(90deg,#000 88%,transparent);mask-image:linear-gradient(90deg,#000 88%,transparent)}.appdemo .rec .rectabs{-webkit-mask-image:linear-gradient(90deg,#000 90%,transparent);mask-image:linear-gradient(90deg,#000 90%,transparent)}.appdemo .nb{min-height:46px;justify-content:center}.appdemo label.thr, .appdemo label.cc{min-height:56px}.appdemo .sec{margin-top:20px}.appdemo .h2{margin-bottom:12px}.appdemo .tbx{padding:13px 12px}

/* embed overrides: the app was a full-viewport document, here it is a component */
.appdemo{height:auto;overflow:visible;background:transparent;padding:0;display:block;align-items:initial}
.appdemo .phone{height:812px;max-height:812px;margin:0 auto;flex:none}

/* ---- the app demo, embedded in the department band ---- */
.app-lead{max-width:64ch;margin:44px auto 0;text-align:center}
.app-lead h3{font-family:var(--disp);font-size:clamp(1.375rem,2.6vw,1.875rem);color:#fff;letter-spacing:-.02em}
.app-lead p{margin-top:10px;font-size:1rem;line-height:1.6;color:#9FB0BF}
.app-stage{margin:26px auto 0;display:flex;justify-content:center}
.appdemo{width:100%;max-width:400px}
/* crew 10/19: a trade's own sample app (trade-packs/<slug>/), same 812px phone as the shared app, scrolling inside */
.app-pack{width:100%;max-width:400px;display:flex;flex-direction:column;align-items:center}
.app-frame{width:100%;height:812px;height:clamp(440px,calc(100svh - 100px),812px);border-radius:20px;overflow:hidden;background:#fff;box-shadow:0 8px 44px rgba(0,0,0,.35)}
/* small phones: the whole phone fits the screen (its tab bar stays reachable) and it borrows the page gutters, so a
   320px phone still gives the app 304px (the contract's floor is 300) */
@media (max-width:440px){.app-pack{width:calc(100% + 32px);max-width:none;margin-inline:-16px}.app-frame{border-radius:14px}}
.app-frame iframe{display:block;width:100%;height:100%;border:0}
.app-full{margin-top:14px;padding:10px 14px;font-size:.9375rem;font-weight:600;color:#9FD0FF;text-decoration:underline;text-underline-offset:3px}
.app-full:hover{color:#fff}
#app-stage{scroll-margin-top:20px} /* 10/20: Chrome lands the jump ~16px short of the html scroll-padding; 20px keeps the frame clear of the header */
/* (no scroll-margin on #app-stage: the site's html scroll-padding-top already clears the sticky header; both together
   pushed the phone's tab bar off the screen after the jump link, 10/19) */
.app-band .app-lead{margin-top:0}
.app-band{padding-bottom:56px}
.hero-jump{margin-top:14px}
.hero-jump a{font-weight:700;text-decoration:underline;text-underline-offset:3px}
.app-doneforyou{max-width:760px;margin:40px auto 0;background:rgba(0,112,243,.12);border:1px solid rgba(0,112,243,.32);border-radius:16px;padding:24px 26px}
.app-doneforyou h3{font-family:var(--disp);font-size:clamp(1.25rem,2.3vw,1.625rem);color:#fff;letter-spacing:-.02em}
.app-doneforyou p{margin-top:11px;font-size:1rem;line-height:1.65;color:#C3D2DE}
.app-doneforyou strong{color:#fff}
.app-dfy-two{padding-top:13px;border-top:1px solid rgba(255,255,255,.14)}

/* tier-gating INSIDE the app: same radios that drive the cards above */
.applock{display:none;font-size:0.59375rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:#8A94A3;background:rgba(0,0,0,.06);border-radius:999px;padding:1px 6px;margin-top:3px}
.cap-band:has(#t-starter:checked) .app-growth,
.cap-band:has(#t-starter:checked) .app-scale,
.cap-band:has(#t-growth:checked) .app-scale{opacity:.34;filter:grayscale(1)}
.cap-band:has(#t-starter:checked) .app-growth .applock,
.cap-band:has(#t-starter:checked) .app-scale .applock,
.cap-band:has(#t-growth:checked) .app-scale .applock{display:inline-block}

@media(max-width:480px){
  .app-lead{margin-top:34px}
  .app-doneforyou{padding:20px 18px;margin-top:32px}
  .app-doneforyou p{font-size:0.9375rem}
}
@media(prefers-reduced-motion:reduce){.appdemo *{animation:none!important;transition:none!important}}

/* the two paragraphs pulled out of the trimmed blueprint band now live on dark */
.cap-band .how-it-sounds.on-dark,
.cap-band .minutes-note.on-dark{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);color:#B8C7D4;max-width:780px;margin-left:auto;margin-right:auto}
.cap-band .how-it-sounds.on-dark{margin-top:30px}
.cap-band .minutes-note.on-dark{margin-top:18px}
.cap-band .how-it-sounds.on-dark strong,.cap-band .minutes-note.on-dark strong{color:#fff}

/* compact-tile follow-ups */
.cap-band:has(#t-starter:checked) .cap-growth,
.cap-band:has(#t-starter:checked) .cap-scale,
.cap-band:has(#t-starter:checked) .cap-total,
.cap-band:has(#t-growth:checked) .cap-scale,
.cap-band:has(#t-growth:checked) .cap-total,
.cap-band:has(#t-scale:checked) .cap-total{transform:none}
.cap-sheet .cap-tier::before{content:none!important}

/* ---- industry hero after the mockup card was removed ----
   The chat card and its two floating badges (24/7 · Booked) are gone — the app
   demo below now does that job far better. So the hero is a single centred
   column instead of half a two-column grid with a hole in it. */
.ind-hero{grid-template-columns:1fr;text-align:center;gap:0;max-width:820px;margin:0 auto}
.ind-hero-sec{text-align:center;padding:52px 0 46px}
.ind-hero-sec .backlink{display:inline-block;margin-bottom:18px}
.hero-tags{justify-content:center}
.ready-note{margin-inline:auto;text-align:center}
.ind-hero h1{margin-inline:auto;max-width:18ch}
.ind-hero .sub{max-width:56ch;margin-inline:auto;margin-top:18px}
.ind-hero .hero-cta{justify-content:center;margin-top:26px}
@media(max-width:960px){
  .ind-hero{max-width:none}
  .ind-hero h1{max-width:none}
}

/* compact tiles: a true quick view — 16 of them visible in about a screen */
@media(max-width:820px){
  .cap-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
  .cap{padding:13px 6px 11px;gap:6px;border-radius:12px}
  .cap-ic{width:27px;height:27px;padding:6px;border-radius:8px}
  .cap b{font-size:0.75rem;line-height:1.2}
  .cap-tier{font-size:0.5625rem;padding:2px 6px;letter-spacing:.04em}
}
@media(max-width:360px){
  .cap b{font-size:0.6875rem}
  .cap{padding:11px 4px 9px}
}

/* get the board — and the app under it — up the phone screen faster */
@media(max-width:820px){
  .cap-band.dark-band{padding:52px 0 56px}
  .cap-band .sec-head h2{font-size:clamp(1.5rem,6.2vw,1.875rem)}
  .cap-band .sec-head p{font-size:0.90625rem;line-height:1.5;margin-top:9px}
  .tier-switch{margin-top:20px}
  .cap-count{margin-top:12px;font-size:0.875rem}
  .cap-grid{margin-top:18px}
  .app-lead{margin-top:30px}
  .app-lead p{font-size:0.9375rem}
  .ind-hero-sec{padding:34px 0 30px}
  .ind-hero .sub{margin-top:14px;font-size:1.03125rem}
  .ind-hero .hero-cta{margin-top:20px}
  /* 23 tiles in a 3-col grid ends on a clean two-tile row — no orphan hack needed */
}

/* ---- industry hero, cleaned ----
   The two buttons are gone (the board is the very next thing, and the sticky nav
   carries a permanent Request a demo), and the Ready-now gloss folded into the
   sub. What's left is: where am I · is it built · the line · what it is. */
.ind-hero-sec{padding:40px 0 34px}
.ind-hero-sec .backlink{margin-bottom:14px;font-size:0.84375rem;color:var(--ink-mut)}
.ind-hero-sec .backlink:hover{color:var(--blue-d)}
.ind-hero .hero-tags{margin-bottom:16px}
.ind-hero .sub{margin-top:16px}
@media(max-width:820px){
  .ind-hero-sec{padding:26px 0 24px}
  .ind-hero .hero-tags{margin-bottom:13px;gap:8px}
  .ind-hero .sub{margin-top:13px}
}

/* =================================================================
   AESTHETIC PASS — round 1: the defects all three reviewers agree on.
   Each of these was independently measured, not a matter of taste.
   ================================================================= */

/* 1. MY BUG, from the app transplant. I namespaced #id selectors and the
      markup's for="" attributes, but missed [for=] ATTRIBUTE selectors in the
      app's own CSS — so the five tab labels styled `label[for=t-home]` never
      matched the emitted `for="ad-t-home"`. Every tab rendered identical grey
      no matter which screen was open: tapping produced a screen change with no
      confirmation on the control you actually touched. */
.appdemo #ad-t-home:checked ~ .adnav label[for="ad-t-home"],
.appdemo #ad-t-conv:checked ~ .adnav label[for="ad-t-conv"],
.appdemo #ad-t-cal:checked  ~ .adnav label[for="ad-t-cal"],
.appdemo #ad-t-cont:checked ~ .adnav label[for="ad-t-cont"],
.appdemo #ad-t-rev:checked  ~ .adnav label[for="ad-t-rev"]{
  color:#0B63CE;font-weight:600;background:rgba(11,99,206,.09)}
.appdemo #ad-t-home:focus-visible ~ .adnav label[for="ad-t-home"],
.appdemo #ad-t-conv:focus-visible ~ .adnav label[for="ad-t-conv"],
.appdemo #ad-t-cal:focus-visible  ~ .adnav label[for="ad-t-cal"],
.appdemo #ad-t-cont:focus-visible ~ .adnav label[for="ad-t-cont"],
.appdemo #ad-t-rev:focus-visible  ~ .adnav label[for="ad-t-rev"]{
  outline:3px solid #0B63CE;outline-offset:-2px;border-radius:9px}

/* 2. "We build yours" was #F3EFE6 on a #F5F0E8 hero — measured 1.01:1, i.e.
      invisible on six of the eight trade pages. Amber is the brand's rare
      premium accent and "we build yours" is exactly the bespoke story. */
.badge-mapped{background:rgba(245,166,35,.14);color:#6E4A0C;
  box-shadow:inset 0 0 0 1px rgba(245,166,35,.40)}
.hero-tags .ready-tag.badge-mapped{color:#5E3F0A}

/* 3. A pill stretched to 218px reads as a rendering error. `.ind` is a flex
      column, whose default align-items:stretch was overriding inline-block. */
.ind .badge-built,.ind .badge-mapped{align-self:flex-start}

/* 4. #hook is the ONLY per-trade section on the page and it rendered as an
      unfinished draft: its kicker computed 16px/400/near-black while every
      other kicker is 14px/600/uppercase, and its h2 came out 36px against the
      generic blueprint h2's 44px — the hierarchy was inverted. */
.kick{font-size:0.875rem;font-weight:600;color:var(--blue-d);
  text-transform:uppercase;letter-spacing:.08em;margin-bottom:14px}
.dark-band .kick{color:#9FB0BF}
#hook{padding:84px 0}
#hook .kick{margin-bottom:14px}
#hook h2{font-size:clamp(1.75rem,4vw,2.75rem);text-wrap:balance}

/* 5. Three rules were dead code, each a single class losing to a two-token
      descendant selector. The worst: the CTA legal disclosure was authored at
      14px under a comment reading "the disclosure must not be the least
      legible thing on the page" — and rendered at 18px, LARGER than body copy. */
.cta-box p.cta-guarantee{font-size:0.90625rem;line-height:1.6;max-width:62ch;text-wrap:pretty}
.cta-box p.cta-phone{font-size:0.9375rem}
.cta-box p.cta-phone em{font-size:0.8125rem}
.sec-head p.bp-gloss{font-size:0.96875rem;line-height:1.6;color:var(--ink-mut)}

/* ============ AESTHETIC PASS — round 2: reconciled across the three lenses ============ */

/* A. LOCKED TILES. Both original proposals were impossible: opacity on a
      parent multiplies down, so a child chip can never out-contrast a .42
      parent. Dimming per-property instead keeps all four locked signals AND
      takes the only text that EXPLAINS the state from 2.20:1 to 6.77:1. */
.cap-band:has(#t-starter:checked) .cap-growth > b,
.cap-band:has(#t-starter:checked) .cap-scale > b,
.cap-band:has(#t-starter:checked) .cap-total > b,
.cap-band:has(#t-growth:checked) .cap-scale > b,
.cap-band:has(#t-growth:checked) .cap-total > b,
.cap-band:has(#t-scale:checked) .cap-total > b{color:#7E8794}
.cap-band:has(#t-starter:checked) .cap-growth .cap-tier,
.cap-band:has(#t-starter:checked) .cap-scale .cap-tier,
.cap-band:has(#t-starter:checked) .cap-total .cap-tier,
.cap-band:has(#t-growth:checked) .cap-scale .cap-tier,
.cap-band:has(#t-growth:checked) .cap-total .cap-tier,
.cap-band:has(#t-scale:checked) .cap-total .cap-tier{background:rgba(255,255,255,.08);color:#9FB0BF;opacity:1}

/* B. TILE AFFORDANCE. The border was never the load-bearing part — :active is.
      Touch has no :hover, so a finger press previously produced no feedback. */
.cap:active{transform:scale(.97);background:#1B1B24;border-color:#4D9BFF}
.cap-hint{margin:0 0 14px;color:#93A5B6}

/* C. The tier switch is a CONTROL, not a surface. As tabs it carries state in
      type rather than fill, so the old worry — three unselected pills dimmed to
      1.21:1 — is gone: an unselected label is #9FB0BF (>7:1) and its price
      #7E90A1 (6.0:1). What a tab loses is the pressed feel of a button, so keep
      an explicit active state and a hairline the tab row sits on. */
.tier-tab:active{color:#fff}
.tier-tab:active b{transform:translateY(1px)}
.tier-radio:checked + .tier-tab:active b{transform:none}

/* D. KEYBOARD (WCAG 2.4.7). The 16-tile grid was one tab stop landing on a
      1x1 radio with no visible partner, and the sheet close was a label —
      unfocusable, and Enter/Space do not activate one. */
.cap-band:has(#co-none:focus-visible) .cap-grid{outline:3px solid #4D9BFF;outline-offset:8px;border-radius:20px}
.cs-x{appearance:none;-webkit-appearance:none;border:0;background:none;position:absolute;top:8px;right:10px;width:44px;height:44px;border-radius:10px;cursor:pointer;margin:0}
.cs-x::before{content:"×";display:grid;place-items:center;height:100%;font-size:1.75rem;line-height:1;color:#C3D2DE}
.cs-x:hover{background:rgba(255,255,255,.08)}
.cs-x:hover::before{color:#fff}
.cs-x:focus-visible{outline:3px solid #4D9BFF;outline-offset:2px}

/* E. Scroll containment: an open sheet let the board slide under the scrim
      (measured scrollY 887 -> 1287), and the embedded app was a full-width
      scroll trap on a phone. */
.cap-sheet,.cs-panel{overscroll-behavior:contain}
.cs-scrim{touch-action:none}
.appdemo .scr{overscroll-behavior:contain}
@media(max-width:820px){.appdemo .phone{height:min(700px,78vh);max-height:700px;max-width:326px}}

/* F. The app's tab radios are 0x0, so the global focus ring painted on
      nothing and Chrome then outlined the whole 400x685 screen instead. */
.appdemo .scr:focus-visible{outline:2px solid var(--blue);outline-offset:-2px}

/* ============ AESTHETIC PASS — round 3: the reconciled set ============
   Where the three lenses disagreed, the winner and the reason:
   - .cap border: TYPOGRAPHY. The file already runs a two-tier convention —
     table.cmp/.feat-dark at .09 (static surface), controls at .16 (the tier
     switch ran at .16 until it became an underlined tab row and dropped its
     border entirely; .cap still carries the convention).
     .cap is a <label> that opens a modal, so it is a control. This also hands
     the interaction reviewer the affordance it wanted at no extra cost.
   - .cap-tier: both converged DOWN to 10px. 9px was under the legibility floor,
     11px could not hold "UNLOCKS AT SCALE" inside a tile.
   - hero pills: unanimous — keep the 999px pill, fix the real defect, which was
     two different heights (35 vs 29px) offset by 12px. 8px would have made an
     inert label read as an input field.
   - band padding: mobile step-down and desktop 96px are compatible. Brand's
     "collapse adjacent bands" rule is NOT shipped — traced against the actual
     sequence it fires 5 times, every one of them at a colour change. */

/* two micro sizes replacing seven (9/9.5/10/11/12/12.5/13) */
:root{--t-chip:0.625rem;--t-label:0.78125rem}
.cap-tier{font-size:var(--t-chip);line-height:1.2;letter-spacing:.05em}
@media(max-width:820px){.cap-tier{font-size:var(--t-chip);letter-spacing:.03em}}

/* border tiers: surface / control / overlay */
.cap-foot,.cap-band .how-it-sounds.on-dark,.cap-band .minutes-note.on-dark,
table.cmp,.feat-dark{border-color:rgba(255,255,255,.09)}
.cap{border-color:rgba(255,255,255,.16)}
.cs-panel{border-color:rgba(255,255,255,.14)}

/* hero pills: one geometry, one baseline, and not pretending to be controls */
.hero-tags .eyebrow,.hero-tags .ready-tag,
.hero-tags .badge-built,.hero-tags .badge-mapped{
  margin:0;min-height:34px;padding:0 15px;font-size:var(--t-label);
  line-height:1;display:inline-flex;align-items:center;border-radius:999px;cursor:default}
.hero-tags .eyebrow svg{width:16px;height:16px}
.ind-hero-sec .badge-mapped{background:rgba(245,166,35,.18);
  box-shadow:inset 0 0 0 1px rgba(180,120,20,.42)}

/* vertical rhythm: .band never stepped down on mobile — 168px between every
   section on a phone, while .dark-band and .page-hero both correctly compress */
section.band{padding:96px 0}
@media(max-width:820px){section.band{padding:56px 0}.cta{padding:60px 0}}
@media(max-width:520px){section.band{padding:44px 0}.cta{padding:48px 0}}
#hook{padding:96px 0}
@media(max-width:820px){#hook{padding:56px 0}}
@media(max-width:520px){#hook{padding:44px 0}}

/* measure: the dark note stack ran 78-82ch and sat on four different left edges.
   Three concentric measures now — 940 data, 730 head, 680 reading copy. */
.cap-grid{max-width:940px;margin-inline:auto}
.cap-band .how-it-sounds.on-dark,.cap-band .minutes-note.on-dark,
.cap-foot,.app-doneforyou{max-width:680px;padding:18px 20px}
.app-doneforyou p{font-size:0.9375rem}
.faq{max-width:720px}
.bp-list{max-width:640px}

/* the hint sits under the count now, so it must not compete with it */
.cap-hint{font-size:0.8125rem;margin:8px 0 14px;color:#93A5B6}

/* headings broke badly everywhere — balance was set on the hero h1 alone */
.sec-head h2,#hook h2,.cta-box h2,.app-lead h3,.app-doneforyou h3,
.ind h3,.step h3,.faq summary{text-wrap:balance}
.page-hero p.sub,.hook-sub,.cap-band .sec-head p,
.cta-guarantee,.bp-gloss,.step p{text-wrap:pretty}

/* leading was assigned by nothing: one 1.60 ratio served 10px chips and 19px leads */
.bp-list li{line-height:1.45}
.cap-tier,.badge-built,.badge-mapped,.ready-tag{line-height:1.2}
.faq .a,.cta-guarantee,.cap-band .how-it-sounds,.cap-band .minutes-note,.cap-foot{line-height:1.65}

/* 23 tiles in two columns below 560 leaves one orphan — let it own the last row */
@media(max-width:560px){
  .cap-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .cap b{font-size:0.84375rem}
  .cap-grid > label.cap:last-of-type{grid-column:1 / -1}
}
@media(max-width:430px){.ind-hero h1{font-size:1.8125rem}}

/* the comparison table asked readers to compare three columns set at three
   different measures (20ch vs 45ch) */
@media(min-width:861px){
  table.cmp{table-layout:fixed}
  table.cmp tbody th.lab{width:19%}
  table.cmp th:nth-child(2),table.cmp td:nth-child(2){width:25%}
  table.cmp th:nth-child(3),table.cmp td:nth-child(3){width:31%}
  table.cmp th:nth-child(4),table.cmp td:nth-child(4){width:25%}
}

/* ============ SWEEP ROUND 1 — defects found by three independent auditors ============ */

/* The reduced-motion block killed `.appdemo *` animations — but the chat bubbles'
   only opacity:1 came FROM that animation (base rule is opacity:0). So honouring an
   accessibility preference erased the page's central proof: five blank bubbles.
   Verified on the live pages, not just the prototype. */
@media(prefers-reduced-motion:reduce){
  .appdemo .bub{opacity:1!important;transform:none!important}
  .appdemo .bc .b{transform:scaleY(1)!important}
}

/* "$999/mo" on the SELECTED package measured 3.76:1 as a pill — primary chrome,
   not mockup. On the tab it is #9EC9FF on near-black (11.8:1); the rule stays so
   the selected price can never fall back to the muted unselected colour. */
.tier-radio:checked + .tier-tab i{color:#9EC9FF}

/* contrast inside the mockup: 1.4.3 applies to rendered text regardless of whether
   assistive tech is told to skip it */
.appdemo .st.done{color:#0A7A46}          /* was #12A55F on #E7F7EF = 2.88:1 */
.appdemo .stars{color:#B36F00}            /* was #F5A623 on #fff = 2.03:1 — it conveys the rating */
.appdemo .applock{color:#5C6473}          /* was #8A94A3 = 2.69:1 — this chip IS the tier signal */
.appdemo .miss{color:#B42318}             /* was 4.44:1, six hundredths short */

/* nav targets under 24x24 (WCAG 2.5.8), stacked so the spacing exception misses them */
.nav-phone,.nav-es{padding-block:4px}
/* the invented reviews are the most persuasive objects in the mockup — they must
   say so where they are, not two inches away in a header chip */
.appdemo .samplenote{font-size:11.5px;line-height:1.4;color:#6B7280;background:#F7F9FC;
  border:1px dashed #D6DCE5;border-radius:8px;padding:7px 9px;margin:8px 0 10px}
.appdemo .sec .t span{display:block;font-size:10.5px;font-weight:500;color:var(--muted);
  text-transform:none;letter-spacing:0;margin-top:2px}

/* ============ SWEEP ROUND 2 — live-site defects ============ */

/* The burger sat UNDER its own drawer, so it could never close the menu — and at
   <=344px its centre landed on the drawer's home link, so a real tap NAVIGATED AWAY
   and destroyed everything the visitor had explored.
   Raising header{z-index} alone did NOT work: #site-nav is display:contents and the
   header never appeared in the paint stack at that point. So lift the burger itself
   out of the header's flow while the drawer is open — it is the toggle, it must be
   the topmost thing at its own coordinates. */
header{z-index:90}
/* position:fixed on the burger does NOT escape: header carries backdrop-filter, which
   makes it a containing block, so the burger lands below the header's own box where the
   header does not paint. So instead: put the CLOSE control exactly where the thumb is
   already going (the burger's coordinates), and clear every interactive element out
   from under it. Tapping "the burger" now closes the menu, as expected, and the
   navigate-away hazard is gone. */
.mobile-menu{padding-top:132px;z-index:95}
/* The previous fix pinned .mm-close to a constant 68px, which only lined up with
   the burger because the LEGACY NOTE ribbon happens to push the header down. At
   768px it missed, and with the ribbon hidden (i.e. production chrome) it missed
   at every width. Instead: a fixed close TARGET covering the whole top-right
   corner, so it lands on the burger wherever the chrome puts it, with the glyph
   drawn where the burger actually is. */
.mm-close{position:fixed;top:0;right:0;width:74px;height:136px;z-index:5;
  display:flex;align-items:flex-end;justify-content:center;padding-bottom:16px;
  font-size:34px;line-height:1;color:var(--ink);background:none;border:none;cursor:pointer}
.mm-close:focus-visible{outline:3px solid var(--blue);outline-offset:-4px;border-radius:12px}

/* Locked app pins dimmed via opacity on the PARENT, which multiplies down onto the
   .applock chip that is the only explanation for the dimming — 1.38:1. Same defect
   class already fixed on the capability tiles; it was never applied here. */
.cap-band:has(#t-starter:checked) .app-growth,
.cap-band:has(#t-starter:checked) .app-scale,
.cap-band:has(#t-growth:checked) .app-scale{opacity:1;filter:none;pointer-events:none;cursor:default}
.cap-band:has(#t-starter:checked) .app-growth .c,
.cap-band:has(#t-starter:checked) .app-scale .c,
.cap-band:has(#t-growth:checked) .app-scale .c{opacity:.4;filter:grayscale(1)}
.cap-band:has(#t-starter:checked) .app-growth .l,
.cap-band:has(#t-starter:checked) .app-scale .l,
.cap-band:has(#t-growth:checked) .app-scale .l{color:#5F6672}
.appdemo .applock{opacity:1;color:#4E5666;background:#E9ECF1}

/* the four drill-down radios inside the app are 0x0 and focusable with no ring */
.appdemo .drill:focus-visible ~ div .tapme,
.appdemo .drill:focus-visible ~ div .back{outline:3px solid var(--blue);outline-offset:2px;border-radius:8px}

/* The guide caption's flex item defaulted to min-width:auto and refused to shrink,
   so it overflowed 37px and pushed the tier-disclosure pill outside the phone frame
   on every phone width — truncating "Runs on every level — greyed tiles are a rung up"
   to "Runs on every level", which is precisely the wrong half to keep. */
.appdemo .guide .gt{min-width:0}
.appdemo .guide{min-width:0}

/* (coach wrapping moved to proto.css — it loads after this file and was winning) */

/* .mobile-menu a{color:var(--ink)} out-specified .btn-blue, so the drawer's
   "Request a demo" rendered near-black on blue at 4.37:1 while the identical
   button in the header above it was white */
.mobile-menu a.btn-blue{color:#fff}
/* .brand{overflow:hidden} clipped the final "s" off SANO Systems at 320 and 412 */
/* Round 4 set .brand{overflow:visible} to stop the wordmark clipping — and in the
   same edit re-added the clip one level down on .bt, so it never actually fixed
   anything. At 412px (the modal Android width) it rendered "SANO Systen" with
   55px of empty space beside it, so it was never a space constraint either. */
.brand{overflow:visible;flex:0 0 auto}
.brand .bt{overflow:visible}

/* ============ SWEEP ROUND 5 ============ */
/* the phone's stat grid floored at min-content and clipped 37px at 320 CSS px */
.appdemo .sgrid{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
/* forced-colors drops gradient fills, so the whole chart rendered as an empty box
   and the unread badge went white-on-white */
@media (forced-colors: active){
  .appdemo .bc .b{forced-color-adjust:none;background:Highlight;border:1px solid CanvasText}
  .appdemo .un{forced-color-adjust:none;background:Highlight;color:HighlightText}
}
/* three literal AA misses inside the illustration */
.appdemo .days .mut{color:#6B7280}       /* was #C6CBD4 = 1.63:1 */
.appdemo .un{background:#0B7A46}          /* white on #12A55F was 3.19:1 at 10.5px/700 */
.appdemo .stars{color:#8A5600}            /* was #B36F00 = 4.05:1 */

/* .faq details{overflow:hidden} clipped the summary's focus ring entirely — the
   summary fills the box, so a 3px outline at +2px offset lands outside the clip.
   Measured 0 pixels changed on focus for three of the four accordions. */
.faq summary:focus-visible{outline-offset:-3px}
/* the close glyph was bottom-aligned in a 136px box, so with the ribbon hidden it
   sat ~60px below where the burger actually is */
.mm-close{align-items:center;padding-bottom:0}

/* ---------- print ---------- */
@media print{
  header,footer,.menu-btn,.hero-cta,.btn,.cta-box{display:none!important}
  body{background:#fff;color:#000}
  .dark-band,.cap-band{background:#fff!important;color:#000!important}
  .reveal{opacity:1!important;transform:none!important}
}

/* ---------- 2026-10-14: the language switch (lang.js points it at the page's twin) ----------
   Visible at every width: most Spanish-speaking visitors arrive on a phone, where the desktop
   contact block is hidden. 2026-10-15 (J1, Jasper): it names the language you switch TO as a FULL
   word at EVERY width ("Español" / "English") with a globe, so it reads as the button that changes
   language. The bare "ES"/"EN" pill read as "you are on Spanish" — backwards. Phones make room by
   tightening the header (see the header block at the end of this file), never by shortening the word. */
.nav-lang{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:40px;padding:8px 13px 8px 11px;border:1px solid var(--line);border-radius:999px;background:#fff;font-size:14px;font-weight:600;color:var(--blue-d);white-space:nowrap;line-height:1;flex:none}
.nav-lang:hover{border-color:var(--blue);background:var(--blue-t)}
.nav-lang .nl-globe{width:16px;height:16px;flex:none}
.nav-lang .nl-short{display:none}
.foot-brand .foot-city{margin-top:10px;font-size:0.8125rem;color:#8A99A6}
/* 2026-10-14: pricing — the "in every package" line and the Pay button (checkout, contract K2) */
.every-strip{text-align:center;max-width:62ch;margin:0 auto 26px;font-size:1rem;color:var(--ink-soft);background:var(--blue-t);border-radius:12px;padding:12px 16px}
.every-strip strong{color:var(--ink)}
.price .btn.pay-btn{margin-top:10px;background:var(--ink);border-color:var(--ink);color:#fff}
.price .btn.pay-btn:hover{background:#000}
/* the header must never wrap a nav label */
.nav-links>li>a{white-space:nowrap}
/* 2026-10-14: the header must fit every phone from 320 to 480 px, swept, not sampled.
   The CTA shortens up to 480 px (it was 400, which pushed the menu button off-screen at 401–444 px), the short word
   comes from data-short (Spanish pages translate it), and phones ≤380 px get a tighter header. */
@media(max-width:480px){
  .nav-right .btn.nav-cta{font-size:0;padding:11px 16px}
  .nav-right .btn.nav-cta::after{content:attr(data-short);font-size:14px;font-weight:600}
}
@media(max-width:380px){
  header .wrap.nav{padding-left:14px;padding-right:14px;gap:8px}
  .nav-right{gap:6px}
  .nav-lang{min-width:40px}
  .nav-right .btn.nav-cta{padding:10px 11px}
  .nav-burger{min-width:40px;padding:11px 9px}
}
@media(max-width:340px){.brand{gap:6px}}
/* 2026-10-15 (J1 + B051): the language button is now a full word at every width, so the phone header makes room
   step by step instead of shortening it: the call icon leaves at <=640px and the CTA reads "Demo" up to 560px; then
   tighter side padding, gaps and button padding; at <=420px the globe steps out (the bordered pill and the word still
   read as a button); at <=355px the header's "Demo" button steps out (the same button is in the menu and every page
   has its own call to action); <=300px shaves the last pixels. Spanish desktop keeps the phone number out of the bar
   up to 1300px (its labels are longer). Swept 260-1920px, English and Spanish: no overflow, no overlap, no wrap. */
@media(max-width:640px){.nav-call{display:none}}
@media(max-width:560px){
  .nav-right .btn.nav-cta{font-size:0;padding:11px 16px}
  .nav-right .btn.nav-cta::after{content:attr(data-short);font-size:14px;font-weight:600}
}
@media(min-width:1261px) and (max-width:1300px){html[lang^="es"] .nav-contact{display:none}}
@media(max-width:440px){
  header .wrap.nav{padding-left:16px;padding-right:16px;gap:8px}
  .nav-right{gap:6px}
  .nav-lang{padding:7px 11px 7px 9px;gap:5px;font-size:13.5px}
  .nav-lang .nl-globe{width:15px;height:15px}
  .nav-right .btn.nav-cta{padding:10px 13px}
  .nav-burger{min-width:40px;padding:11px 9px}
  .brand{font-size:16px}
}
@media(max-width:420px){
  .nav-lang{padding:7px 10px;font-size:13px}
  .nav-lang .nl-globe{display:none}
}
@media(max-width:400px){.brand{font-size:15px}}
@media(max-width:380px){
  header .wrap.nav{padding-left:12px;padding-right:12px}
  .brand{font-size:14px}
  .brand img{width:22px;height:22px}
  .nav-right .btn.nav-cta{padding:10px 10px}
  .nav-right .btn.nav-cta::after{font-size:13px}
}
@media(max-width:355px){
  .nav-right .btn.nav-cta{display:none}
}
@media(max-width:300px){
  header .wrap.nav{padding-left:10px;padding-right:10px;gap:6px}
  .nav-right{gap:4px}
  .brand{font-size:13px}
  .brand img{width:20px;height:20px}
}
/* 2026-10-14 problem-first band (trade pages whose data carries `problems`) */
.prob-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:18px;margin-top:8px}
.prob-card{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:20px 18px;display:flex;flex-direction:column;gap:10px}
.prob-q{font-size:1.125rem;font-weight:700;line-height:1.35;color:var(--ink)}
.prob-cost{font-size:0.90625rem;color:var(--ink-soft);line-height:1.55}
.prob-fix{font-size:0.9375rem;line-height:1.55;color:var(--ink);border-left:3px solid var(--blue);padding-left:10px}
.prob-fix b{color:var(--blue-d)}
.prob-sys{display:inline-flex;align-items:center;gap:6px;margin-top:auto;font-size:0.8125rem;font-weight:600;color:var(--blue-d);background:var(--blue-t);border-radius:999px;padding:5px 10px;width:fit-content}
.prob-sys .cap-ic svg{width:16px;height:16px}
/* 2026-10-14: longer Spanish button labels pushed the single price column past 320 px (grid 1fr = min-content) */
@media(max-width:480px){.price-grid{grid-template-columns:minmax(0,1fr)}}
.price .btn{white-space:normal;text-align:center}
/* 2026-10-14: longer Spanish CTA ("Pida una demo") pushed the desktop header past the edge at
   1142–1181 px. In that band the phone number steps out of the header (it stays in the menu, the footer and every CTA). */
@media(min-width:1141px) and (max-width:1260px){.nav-contact{display:none}}
.prob-sys .cap-ic{background:none;width:auto;height:auto;padding:0;border-radius:0}

/* =====================================================================
   BUG SWEEP 2026-10-15 — G1 (header, navigation, language switch, global styles)
   Each rule names the bug it fixes; every one was reproduced on staging and re-driven in Chrome.
   ===================================================================== */

/* B017: the site has one (light) design. Browser auto-dark (Chrome "darken websites", Samsung Internet)
   inverted the header and left the burger at 1.06:1 on its own background. */
:root{color-scheme:only light}

/* B055: buttons don't inherit the font by default, so the demo form's buttons rendered in Arial */
button{font-family:inherit}

/* B016: the header is injected by shared.js at the end of <body>; until then its mount reserves the bar's
   exact height (70px + 1px rule) and looks like it, so the page never drops 71px on arrival.
   :empty stops matching the moment the header is in. */
#site-nav:empty{display:block;height:71px;background:rgba(255,255,255,.92);border-bottom:1px solid var(--line)}

/* B019: reveal-on-scroll is shared.js's job; if shared.js never arrives, everything still appears after 4.5s
   (shared.js itself reveals everything at ~4.2s, so with JS this never fires). */
@keyframes revealFallback{to{opacity:1;transform:none}}
.reveal:not(.in){animation:revealFallback .6s ease 4.5s forwards}
/* the capability grid sits in a closed drawer (display:none), where the clock only starts when it opens */
.cap-band:has(.caps-chk:checked) .cap-grid.reveal:not(.in){animation-delay:0s}
@media (prefers-reduced-motion: reduce){.reveal:not(.in){animation:none}}

/* B002: an invisible bridge over the 6px gap between a menu word and its dropdown, so the pointer never
   leaves the item on its way down. On the item (not the dropdown) because the dropdown now scrolls (B006),
   which would clip a bridge hung off it. The held-Tab visibility fix (round "10.") is untouched. */
.nav-links>li:has(> .dropdown)::after{content:"";position:absolute;left:0;right:0;top:100%;height:12px}
/* B006: 12 industries were 822px (EN) / 905px (ES) tall under a sticky header, so the last ones were off a
   laptop screen with no way to reach them. Two columns, and a scrolling backstop for very short windows. */
.dropdown{max-height:calc(100vh - 84px);overflow-y:auto;overscroll-behavior:contain}
.dropdown.dd-ind{grid-template-columns:repeat(2,minmax(0,1fr));min-width:560px}

/* B009: the number never splits across lines */
.tel-nw{white-space:nowrap}

/* B010 + B013: long button labels (Spanish) wrap inside their pill on small phones instead of clipping or
   pushing the page sideways */
@media(max-width:400px){
  .cta-box .btn-lg{white-space:normal;text-align:center;padding-left:20px;padding-right:20px}
  .hero-cta .btn{white-space:normal;max-width:100%;text-align:center}
}

/* B011: sample-app stat tiles: the label takes the room left of the icon and wraps there (it ran under the
   icon and was cut: "Conversatio", "Cotizacione"); on narrow phones the icon sits above the label. */
.appdemo .sc .r{gap:6px}
.appdemo .sc .lab{flex:1 1 auto;min-width:0;max-width:none;overflow-wrap:break-word;-webkit-hyphens:auto;hyphens:auto}
@media(max-width:820px){
  .appdemo .sc .r{flex-direction:column-reverse;align-items:flex-start}
  .appdemo .sc .ic{width:26px;height:26px}
  .appdemo .sc .v{margin-top:6px}
}

/* B012: phone in landscape: the sample phone was 812px tall on a 390px screen, its tab bar off screen.
   Same cap the portrait phones already use. */
@media(max-height:500px) and (orientation:landscape){
  .appdemo .phone{height:min(700px,78vh);max-height:700px}
}

/* B003 + B015: the hidden radios behind the sample app's tabs/tiles and the capability tiles sat at the top of
   their blocks, so focusing them (every tap on their label does) scrolled the page up to them. Pinned to the
   viewport they are always "in view", so a tap changes the screen and the page does not move. (The keyboard
   path scrolls the visible control into view instead: shared.js.) */
.appdemo .phone > input.tabr,.appdemo input.drill,.cap-radio{position:fixed;top:0;left:0}

/* B049: the page no longer scrolls behind an open capability sheet on desktop */
html{scrollbar-gutter:stable}
html:has(.cap-radio:checked:not(#co-none)){overflow:hidden}

/* B014: the S is a 3:4 image; its boxes are square. Draw it in its own shape. */
.brand img,.mobile-menu .mm-home img{object-fit:contain}
.mobile-menu .mm-home img{width:26px;height:26px;flex:none}

/* B018: the drawer's demo button: centred label, button padding, no row rule under it */
@media(max-width:1140px){
  .mobile-menu a.btn{display:flex;justify-content:center;padding:16px 30px;border-bottom:0;margin-top:20px;width:100%}
}

/* B053: the drawer's top. The × now sits exactly over the burger it replaces, inside a white bar the height of
   the header, so rows that scroll up slide under a visible bar, never under an invisible tap target; and the
   logo sits inline with "SANO Systems". */
@media(max-width:1140px){
  .mobile-menu{padding-top:86px}
  .mobile-menu::before{content:"";position:fixed;top:0;left:0;right:0;height:71px;background:#fff;border-bottom:1px solid var(--line);z-index:4}
  .mm-close{top:13px;right:24px;width:44px;height:44px;padding:0;align-items:center;justify-content:center;border-radius:10px}
  .mobile-menu a.mm-home{display:flex;align-items:center;gap:10px}
}
@media(max-width:440px){.mm-close{right:16px;width:40px}}
@media(max-width:380px){.mm-close{right:12px}}
@media(max-width:300px){.mm-close{right:10px}}

/* B020: the focus ring is blue; inside the blue call-to-action box it was blue on blue */
.cta-box :focus-visible{outline-color:#fff}

/* B021: pricing on a phone: the "Show the five hiring & team systems" checkbox was display:none, so a keyboard
   could never reach it. Visually hidden but focusable, with the ring drawn on its label. */
@media(max-width:480px){
  .price .gx{display:block;position:absolute;left:24px;bottom:30px;width:1px;height:1px;margin:0;opacity:0;pointer-events:none}
  .price .gx:focus-visible ~ ul .g-more label{outline:3px solid #4D9BFF;outline-offset:3px;border-radius:4px}
}

/* B054: "Back to the form" lands on the name field; leave room for its label under the sticky header */
#demo-form input,#demo-form select,#demo-form textarea{scroll-margin-top:34px}

/* B056: links inside running text are told apart by more than colour */
main p a:not(.btn),main li a:not(.btn),.refs a,.sources a,.cap-foot a,.tier-hint-block a{text-decoration:underline;text-underline-offset:2px;text-decoration-thickness:1px}

/* B051: below ~312px three blocks floored at their min-content width and pushed the page sideways:
   the alternating feature rows (a long word in a grid column), the problem cards (minmax 260px) and the
   Spanish tier-tab prices. Let them shrink to the screen. */
.frow>*{min-width:0}
.prob-grid{grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr))}
@media(max-width:300px){
  .tier-tab i{white-space:normal;text-align:center}
  .fcopy h2,.fcopy h3,.prob-q{overflow-wrap:break-word;-webkit-hyphens:auto;hyphens:auto}
  .v-head{flex-wrap:wrap;row-gap:6px}
}

/* B052: text sizes are in rem (above), so the browser's own text-size setting reaches them; at the default 16px
   nothing changes. Kept in px on purpose: the 70px header bar (it must fit a phone at any setting; its links are
   also in the menu, which does scale) and the sample-phone illustration (a fixed-size picture of an app). */
@media(min-width:561px){.nav-right .btn{font-size:15px}}
/* ...and at very large text a single word can be wider than a phone: let it break rather than push the page
   sideways (no effect at normal sizes, where every word fits its line) */
h1,h2,h3,.foot-grid a,.foot-grid p,.dash-stat{overflow-wrap:break-word}
.foot-grid>*{min-width:0}
.dash-row{grid-template-columns:repeat(3,minmax(0,1fr))}
@media(max-width:560px){.dash-row{grid-template-columns:minmax(0,1fr)}}
.v-head{flex-wrap:wrap;row-gap:6px}
/* 10/20: "Choose <package>" under each trade page's level switch; only the picked level's button shows (Jasper:
   packages one click from any page) */
.tier-go{text-align:center;margin:16px auto 0}
.tier-go .tg{display:none}
.cap-band:has(#t-starter:checked) .tg-starter,.cap-band:has(#t-growth:checked) .tg-growth,
.cap-band:has(#t-scale:checked) .tg-scale,.cap-band:has(#t-total:checked) .tg-total{display:inline-flex}
.tier-go .tg-note{margin:10px 0 0;font-size:.875rem;color:#9FB0BF}
@media(max-width:400px){.tier-go .tg{width:100%}}
