/* Talk Society — the voice AI agency site (talksociety.ai). Served as a static asset by
   HarkWeb.Layouts :agency; the page is a dead controller page (HarkWeb.Business.AgencyController).
   Design language: warm off-white, near-black ink, one signal colour (lime) used only
   where something is live; light-weight grotesk display with a serif italic
   for emphasis; tactile grainy sphere instead of a flat "AI" orb; flat
   surfaces with hairlines instead of glass; pill buttons; lots of air. */

:root{
  --bg:#f6f4ef;
  --bg-2:#f0eee8;
  --surface:#ffffff;
  --surface-2:#fbfaf7;
  --ink:#111110;
  --ink-2:#44423d;
  --muted:#7a776f;
  --hair:rgba(17,17,16,.09);
  --hair-2:rgba(17,17,16,.16);
  --signal:#8fbf12;
  --signal-lit:#d8f35a;
  --signal-dim:rgba(143,191,18,.16);
  --teal:#5fd6bd;
  --on-ink:#f6f4ef;
  --ink-hover:#000000;
  --nav-bg:rgba(246,244,239,.78);
  --backdrop:rgba(17,17,16,.45);
  --glow:rgba(95,214,189,.28);
  --band-glow:rgba(95,214,189,.22);
  --display:"Inter Tight",Inter,system-ui,sans-serif;
  --body:Inter,system-ui,-apple-system,sans-serif;
  --serif:"Instrument Serif",Georgia,serif;
  --pad:clamp(20px,5vw,72px);
  --max:1360px;
  --ease:cubic-bezier(.2,.7,.2,1);
}

@font-face{font-family:"Inter Tight";src:url("/fonts/hark/inter-tight-variable-latin-239e3c121b9f93f650289374acbf6288.woff2?vsn=d") format("woff2");font-weight:300 500;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:Inter;src:url("/fonts/hark/inter-variable-latin-65850a373e258f1c897a2b3d75eb74de.woff2?vsn=d") format("woff2");font-weight:400 500;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Instrument Serif";src:url("/fonts/hark/instrument-serif-regular-latin-c008db4e8a972ad72dcbd4251a98ac63.woff2?vsn=d") format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"Instrument Serif";src:url("/fonts/hark/instrument-serif-italic-latin-26082c73a711d4530a40ee117c5d6cb5.woff2?vsn=d") format("woff2");font-weight:400;font-style:italic;font-display:swap}

*{box-sizing:border-box}
html{scroll-behavior:smooth;overflow-x:clip;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
body{margin:0;overflow-x:clip;background:var(--bg);color:var(--ink);font:400 16px/1.6 var(--body);font-feature-settings:"ss01","cv11"}
/* A landing link: hidden until agency_site.js has put the visitor on the demo section (see the
   inline script at the top of home.html.heex). The body background still paints the canvas. */
html.ts-landing body{visibility:hidden}
h1,h2,h3{margin:0;font-family:var(--display);font-weight:400;letter-spacing:-.035em;line-height:1}
p{margin:0}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
em{font-family:var(--serif);font-style:italic;font-weight:400;letter-spacing:-.01em}
code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.92em;color:var(--ink-2)}

/* ---------- the mark: four voice bars carrying a wave left to right (the logo in motion) ---------- */
.mark,.logo-mark{display:inline-flex;align-items:center;gap:2px;height:var(--mh,14px);flex:none;vertical-align:middle}
.mark i,.logo-mark i{display:block;width:max(2px,calc(var(--mh,14px)*.16));height:100%;border-radius:2px;background:currentColor;transform-origin:center;animation:wave var(--mt,1.7s) linear infinite}
/* negative delays = each bar runs ~1/6 cycle behind its left neighbour, so one smooth crest travels rightward */
.mark i:nth-child(1),.logo-mark i:nth-child(1){animation-delay:calc(var(--mt,1.7s) * -.54)}
.mark i:nth-child(2),.logo-mark i:nth-child(2){animation-delay:calc(var(--mt,1.7s) * -.36)}
.mark i:nth-child(3),.logo-mark i:nth-child(3){animation-delay:calc(var(--mt,1.7s) * -.18)}
.mark i:nth-child(4),.logo-mark i:nth-child(4){animation-delay:0s}
@keyframes wave{0%{transform:scaleY(0.300)}5%{transform:scaleY(0.317)}10%{transform:scaleY(0.367)}15%{transform:scaleY(0.444)}20%{transform:scaleY(0.542)}25%{transform:scaleY(0.650)}30%{transform:scaleY(0.758)}35%{transform:scaleY(0.856)}40%{transform:scaleY(0.933)}45%{transform:scaleY(0.983)}50%{transform:scaleY(1.000)}55%{transform:scaleY(0.983)}60%{transform:scaleY(0.933)}65%{transform:scaleY(0.856)}70%{transform:scaleY(0.758)}75%{transform:scaleY(0.650)}80%{transform:scaleY(0.542)}85%{transform:scaleY(0.444)}90%{transform:scaleY(0.367)}95%{transform:scaleY(0.317)}100%{transform:scaleY(0.300)}}
/* at rest (reduced motion, or the idle modal) the bars settle into the logo's own shape */
.mark.still i,.voice-orb:not(.active) .voice-bars .mark i{animation:none}
.mark.still i:nth-child(1),.voice-orb:not(.active) .voice-bars .mark i:nth-child(1){height:44%}
.mark.still i:nth-child(2),.voice-orb:not(.active) .voice-bars .mark i:nth-child(2){height:100%}
.mark.still i:nth-child(3),.voice-orb:not(.active) .voice-bars .mark i:nth-child(3){height:69%}
.mark.still i:nth-child(4),.voice-orb:not(.active) .voice-bars .mark i:nth-child(4){height:31%}
.logo-mark{--mh:16px}
.logo-mark i{animation:none}
.logo-mark i:nth-child(1){height:44%}.logo-mark i:nth-child(2){height:100%}.logo-mark i:nth-child(3){height:69%}.logo-mark i:nth-child(4){height:31%}
.primary .mark{--mh:14px}
.giant-mic .mark{--mh:16px}
.tel .mark{--mh:18px}
.eyebrow .mark{--mh:10px;gap:1.5px;color:var(--ink)}
.floating-dot .mark{--mh:16px;color:#0a0a0b}
.track .mark{position:absolute;top:50%;left:0;--mh:14px;color:var(--ink);transform:translateY(-50%);animation:travel 9s var(--ease) infinite}
.picker-menu li .mark{display:none;--mh:11px;margin-left:8px;color:var(--signal-lit)}
.picker-menu li[aria-selected="true"] .mark{display:inline-flex}
.voice-bars .mark{--mh:28px;gap:3px;color:var(--muted)}
.voice-orb.active .voice-bars .mark{color:var(--signal)}
.voice-orb.active .voice-bars .mark{--mt:1.2s}

/* ---------- primitives ---------- */
.eyebrow{display:inline-flex;align-items:center;gap:9px;font:500 11px/1 var(--body);letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}

.primary,.secondary,.nav-cta,.demo-pill,.text-btn,.giant-mic{
  display:inline-flex;align-items:center;gap:10px;border-radius:999px;white-space:nowrap;
  transition:transform .35s var(--ease),background .25s,border-color .25s,color .25s
}
.primary{background:var(--ink);color:var(--on-ink);padding:15px 24px;font-weight:500;font-size:15px}
.primary:hover{background:var(--ink-hover);transform:translateY(-1px)}
.secondary{border:1px solid var(--hair-2);color:var(--ink);padding:14px 22px;font-weight:500;font-size:15px}
.secondary:hover{border-color:rgba(17,17,16,.4);transform:translateY(-1px)}
.secondary span,.nav-cta span,.text-btn span,.demo-pill span{color:var(--muted);transition:transform .35s var(--ease),color .25s}
.secondary:hover span,.text-btn:hover span,.demo-pill:hover span{transform:translate(2px,-2px);color:var(--ink)}

@keyframes breathe{0%,100%{box-shadow:0 0 0 3px var(--signal-dim)}50%{box-shadow:0 0 0 7px rgba(216,243,90,.06)}}

/* ---------- nav ---------- */
.nav{position:sticky;top:0;z-index:40;display:flex;align-items:center;justify-content:space-between;gap:24px;height:78px;padding:0 var(--pad);background:var(--nav-bg);backdrop-filter:blur(18px) saturate(1.2);-webkit-backdrop-filter:blur(18px) saturate(1.2);border-bottom:1px solid var(--hair)}
.logo{display:inline-flex;align-items:center;gap:11px;font-family:var(--display);font-weight:500;font-size:17px;letter-spacing:-.02em}
.nav nav{display:flex;gap:30px;font-size:14.5px;color:var(--ink-2)}
.nav nav a{transition:color .2s}
.nav nav a:hover{color:var(--ink)}
.nav-signin{margin-left:6px;padding-left:22px;border-left:1px solid var(--hair-2)}
.nav-cta{background:var(--ink);color:var(--on-ink);padding:11px 18px;font-size:14px;font-weight:500}
.nav-cta:hover{background:var(--ink-hover)}
.nav-cta span{color:var(--on-ink);opacity:.55}
/* `flex:none` is the load-bearing half: .nav is a flex row, and without it the 44px box shrank to
   34px at 320 and 42px at 350 — under the floor this rule exists to set (review, 2026-09-23). */
.menu{display:none;flex:none;place-items:center;width:44px;height:44px;margin-right:-10px;font-size:22px;line-height:1;color:var(--ink)}

/* ---------- hero ---------- */
.hero{position:relative;display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);align-items:center;gap:48px;min-height:calc(100vh - 78px);padding:64px var(--pad) 96px;max-width:var(--max);margin:0 auto;overflow:visible}
.hero::before{content:"";position:absolute;inset:-78px -40vw 0 0;z-index:-1;pointer-events:none;background:
  radial-gradient(60% 55% at 78% 40%,rgba(95,214,189,.10),transparent 70%),
  radial-gradient(40% 40% at 90% 70%,rgba(216,243,90,.05),transparent 70%)}
.hero-copy{max-width:640px}
.hero h1{margin:26px 0 28px;font-size:clamp(54px,7.6vw,104px);line-height:.94}
.hero h1 em{color:var(--ink-2)}
.hero p{max-width:520px;font-size:18px;line-height:1.55;color:var(--ink-2)}
.hero-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:38px}

/* the globe: sphere + caption + control deck, one object */
.hero-agent{position:relative;justify-self:end;width:min(100%,540px);display:grid;place-items:center}
.globe{position:relative;width:min(100%,520px);aspect-ratio:1;border-radius:50%;isolation:isolate;filter:drop-shadow(0 40px 90px var(--glow))}
.sphere{position:relative;width:min(88%,470px);aspect-ratio:1;border-radius:50%;isolation:isolate;filter:drop-shadow(0 40px 90px var(--glow))}
.sphere-body{position:absolute;inset:0;border-radius:50%;background:
  radial-gradient(circle at 32% 28%,#e9fff5 0%,#8fe9d0 9%,#2f9d8a 26%,#0f3d3f 52%,#07171a 72%,#050708 100%);
  box-shadow:inset -40px -60px 120px rgba(0,0,0,.65),inset 20px 30px 80px rgba(120,232,208,.08);
  animation:drift 14s ease-in-out infinite}
.sphere-body::after{content:"";position:absolute;inset:0;border-radius:50%;background:
  radial-gradient(circle at 74% 78%,rgba(120,232,208,.30),transparent 38%),
  radial-gradient(circle at 60% 20%,rgba(255,255,255,.12),transparent 30%);mix-blend-mode:screen}
.sphere-grain{position:absolute;inset:0;border-radius:50%;opacity:.55;mix-blend-mode:soft-light;pointer-events:none;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 .9 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
  background-size:220px}
.globe .sphere-body{animation:none}
.deck-bg{position:absolute;inset:0;border-radius:50%;background:linear-gradient(to bottom,transparent 64%,rgba(4,9,10,.55) 64%,rgba(4,9,10,.82) 100%);pointer-events:none}
.deck-bg::before{content:"";position:absolute;left:12%;right:12%;top:64%;height:1px;background:rgba(243,240,232,.14)}
.globe .caption{position:absolute;left:50%;top:41%;transform:translate(-50%,-50%);width:62%;text-align:center;font-family:var(--serif);font-style:italic;font-size:clamp(19px,2vw,24px);line-height:1.28;color:#f3f0e8;text-shadow:0 2px 24px rgba(0,0,0,.45);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;transition:opacity .24s}
.globe .caption.fade,.globe:has(.picker.open) .caption{opacity:0}
.deck{position:absolute;left:50%;top:69%;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:10px;width:64%}
.picker{position:relative;width:100%}
.picker-btn{display:flex;align-items:center;gap:8px;width:100%;padding:11px 14px 11px 16px;border-radius:999px;background:rgba(243,240,232,.08);border:1px solid rgba(243,240,232,.18);color:#f3f0e8;font-size:14.5px;text-align:left;backdrop-filter:blur(8px);transition:background .2s,border-color .2s}
.picker-btn:focus-visible{outline:2px solid var(--signal-lit);outline-offset:2px}
.picker-btn:focus:not(:focus-visible){outline:none}
.picker-btn:hover,.picker.open .picker-btn{background:rgba(243,240,232,.14);border-color:rgba(243,240,232,.32)}
.picker-label{flex:none;color:rgba(243,240,232,.55)}
.picker-value{flex:1;min-width:0;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.picker-chev{flex:none;width:8px;height:8px;margin:0 4px 3px 0;border-right:1.5px solid rgba(243,240,232,.7);border-bottom:1.5px solid rgba(243,240,232,.7);transform:rotate(45deg);transition:transform .3s var(--ease)}
.picker.open .picker-chev{transform:rotate(-135deg) translate(-2px,-2px)}
.picker-menu{position:absolute;left:-25%;bottom:calc(100% + 10px);z-index:5;display:grid;grid-template-columns:1fr 1fr;gap:2px;width:150%;margin:0;padding:6px;list-style:none;border-radius:18px;background:rgba(8,14,15,.92);border:1px solid rgba(243,240,232,.16);box-shadow:0 30px 60px rgba(0,0,0,.45);backdrop-filter:blur(16px);animation:menuRise .24s var(--ease)}
@keyframes menuRise{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.picker-menu li{display:flex;flex-direction:column;gap:1px;padding:8px 11px;border-radius:12px;color:#f3f0e8;cursor:pointer;transition:background .15s}
.picker-menu li b{font-weight:500;font-size:13.5px;white-space:nowrap}
.picker-menu li small{font-size:11.5px;color:rgba(243,240,232,.55);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.picker-menu li:hover{background:rgba(243,240,232,.08)}
.picker-menu li[aria-selected="true"]{background:rgba(216,243,90,.12)}
.deck .primary{width:100%;justify-content:center;padding:12px 18px;font-size:14.5px;background:#f3f0e8;color:#0a0a0b}
.deck .primary:hover{background:#fff}
@keyframes drift{0%,100%{transform:scale(1) rotate(0deg)}50%{transform:scale(1.025) rotate(6deg)}}
.sphere.small{width:120px;filter:drop-shadow(0 20px 40px rgba(95,214,189,.25))}


/* ---------- stats strip ---------- */
.trust{display:flex;flex-wrap:wrap;align-items:center;gap:40px;padding:26px var(--pad);max-width:var(--max);margin:0 auto;border-top:1px solid var(--hair);border-bottom:1px solid var(--hair)}
.trust>span{margin-right:auto;font:500 11px/1 var(--body);letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
.trust div{display:flex;flex-direction:column;gap:3px;font-size:13.5px;color:var(--muted)}
.trust b{font:400 20px/1 var(--display);letter-spacing:-.025em;color:var(--ink)}

/* ---------- sections ---------- */
.section{max-width:var(--max);margin:0 auto;padding:clamp(96px,11vw,160px) var(--pad)}
.section-head{display:grid;grid-template-columns:1.1fr .9fr;align-items:end;gap:48px;margin-bottom:64px}
.section-head.compact{grid-template-columns:1fr}
.section-head .eyebrow{margin-bottom:22px}
.section h2{font-size:clamp(40px,5.2vw,72px);line-height:.98}
.section h2 span{color:var(--muted)}
.section-head>p{max-width:440px;padding-bottom:6px;font-size:17px;line-height:1.55;color:var(--ink-2)}

/* what we build */
.agent-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.use-card{position:relative;display:flex;flex-direction:column;min-height:280px;padding:24px;border-radius:20px;background:var(--surface);border:1px solid var(--hair);transition:border-color .3s,transform .5s var(--ease),background .3s}
.use-card:hover{border-color:var(--hair-2);background:var(--surface-2);transform:translateY(-3px)}
.use-card.featured{background:linear-gradient(160deg,rgba(95,214,189,.08),var(--surface) 55%)}
.card-num{font:400 12px/1 var(--body);letter-spacing:.08em;color:var(--muted);font-variant-numeric:tabular-nums}
.use-card .icon{display:none;place-items:center;width:40px;height:40px;margin:22px 0 auto;border-radius:12px;border:1px solid var(--hair-2);font-size:18px;color:var(--ink-2)}
.use-card h3{margin-top:auto;padding-top:56px;font-size:22px;letter-spacing:-.025em}
.use-card.featured h3{font-size:22px}
.use-card p{margin:8px 0 22px;font-size:14.5px;line-height:1.5;color:var(--muted);max-width:34ch}

.text-btn{align-self:flex-start;padding:10px 14px;border:1px solid var(--hair-2);font-size:13.5px;font-weight:500}
.text-btn:hover{border-color:rgba(17,17,16,.4)}
.custom-card{grid-column:1/-1;flex-direction:row;align-items:center;gap:28px;min-height:0;padding:22px 24px;border-style:dashed;background:transparent}
.custom-card h3{margin:0;padding:0;font-size:22px}
.custom-card p{margin:4px 0 0;max-width:none}
.custom-card .text-btn{margin-left:auto;align-self:center}
.custom-card>div:first-child+div{display:none}
.custom-card .card-num{flex:none}
.custom-card h3+p{flex:1}
.custom-card:hover{background:var(--surface)}
/* the AI Concierge (MoonPay): one full-width card under the eight, a row like "Something else?" but
   solid — it is a product you can talk to, not an ask */
.use-card.wide{grid-column:1/-1;flex-direction:row;align-items:center;gap:28px;min-height:0;padding:26px 24px;background:linear-gradient(120deg,rgba(95,214,189,.10),var(--surface) 62%)}
.use-card.wide h3{margin:0;padding:0;font-size:22px;flex:none}
.use-card.wide p{margin:4px 0 0;max-width:none;flex:1}
.use-card.wide .text-btn{margin-left:auto;align-self:center;flex:none}
.use-card.wide .card-num{flex:none}

/* idea band */
.idea-band{position:relative;overflow:hidden;max-width:calc(var(--max) - 2*var(--pad) + 2*24px);margin:0 auto;padding:clamp(88px,10vw,140px) var(--pad);border-radius:32px;background:var(--surface);border:1px solid var(--hair);text-align:center;isolation:isolate}
.idea-band::before{content:"";position:absolute;inset:0;z-index:-1;background:
  radial-gradient(70% 60% at 50% 115%,var(--band-glow),transparent 70%),
  radial-gradient(30% 30% at 80% 10%,rgba(216,243,90,.06),transparent 70%)}
.idea-band::after{content:"";position:absolute;inset:0;z-index:-1;opacity:.35;mix-blend-mode:soft-light;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 .9 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");background-size:220px}
.idea-band h2{margin:22px auto 18px;font-size:clamp(44px,6.4vw,92px);line-height:.96}
.idea-band h2 em{color:var(--ink-2)}
.idea-band>p{font-size:18px;color:var(--ink-2)}
.giant-mic{margin-top:40px;padding:18px 22px 18px 24px;background:var(--ink);color:var(--on-ink);font-size:17px;font-weight:500}
.giant-mic:hover{background:var(--ink-hover);transform:translateY(-2px)}
.giant-mic small{margin-left:6px;padding-left:16px;border-left:1px solid currentColor;font-size:13px;font-weight:400;opacity:.62}

/* industries: tabs on the left, a live panel on the right */
.industry-layout{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:48px;align-items:start}
.industry-list{list-style:none;margin:0;padding:0;border-top:1px solid var(--hair)}
.industry-tab{display:grid;grid-template-columns:40px 1fr auto;grid-template-areas:"n t a" "n s a";align-items:center;column-gap:14px;width:100%;padding:18px 0;border-bottom:1px solid var(--hair);text-align:left;color:var(--muted);transition:color .25s,padding-left .4s var(--ease)}
.industry-tab span{grid-area:n;font:400 12px/1 var(--body);letter-spacing:.08em;font-variant-numeric:tabular-nums}
.industry-tab strong{grid-area:t;font:400 22px/1.1 var(--display);letter-spacing:-.025em;color:var(--ink-2);transition:color .25s}
.industry-tab small{grid-area:s;margin-top:4px;font-size:13.5px}
.industry-tab::after{content:"→";grid-area:a;opacity:0;transform:translateX(-6px);transition:opacity .3s,transform .4s var(--ease)}
.industry-tab:hover,.industry-tab.is-active{color:var(--ink-2);padding-left:6px}
.industry-tab:hover strong,.industry-tab.is-active strong{color:var(--ink)}
.industry-tab.is-active::after{opacity:1;transform:none;color:var(--signal)}
.industry-panel{position:sticky;top:110px;padding:36px;border-radius:24px;background:var(--surface);border:1px solid var(--hair-2)}
.industry-panel.swap{animation:swap .45s var(--ease)}
@keyframes swap{from{opacity:.3;transform:translateY(6px)}to{opacity:1;transform:none}}
.industry-panel h3{margin:18px 0 26px;font-size:clamp(34px,3.6vw,48px);letter-spacing:-.03em}
.industry-lead{font:500 11px/1 var(--body);letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.industry-can{list-style:none;margin:12px 0 28px;padding:0;border-top:1px solid var(--hair)}
.industry-can li{display:flex;gap:14px;align-items:baseline;padding:13px 0;border-bottom:1px solid var(--hair);font-size:16.5px;color:var(--ink-2)}
.industry-can li::before{content:"";flex:none;width:6px;height:6px;border-radius:50%;background:var(--signal);transform:translateY(-2px)}

/* phone or web */
.channel-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.channel{display:flex;flex-direction:column;align-items:flex-start;padding:32px;border-radius:24px;background:var(--surface);border:1px solid var(--hair)}
.channel.phone{background:linear-gradient(160deg,rgba(95,214,189,.14),var(--surface) 55%);border-color:var(--hair-2)}
.channel h3{margin:40px 0 10px;font-size:clamp(26px,2.6vw,34px);letter-spacing:-.03em}
.channel>p{max-width:46ch;font-size:15.5px;line-height:1.55;color:var(--muted)}
.tel{display:inline-flex;align-items:center;gap:14px;margin:26px 0 8px;padding:14px 22px 14px 18px;border-radius:999px;background:var(--ink);color:var(--on-ink);transition:transform .35s var(--ease),background .25s}
.tel:hover{background:var(--ink-hover);transform:translateY(-1px)}
.tel-num{font:400 24px/1 var(--display);letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.tel-hint{padding-left:14px;border-left:1px solid rgba(246,244,239,.25);font-size:13px;opacity:.65}
.channel.web .primary{margin:26px 0 8px}
.channel-list{list-style:none;margin:22px 0 0;padding:0;width:100%;border-top:1px solid var(--hair)}
.channel-list li{display:flex;gap:12px;align-items:baseline;padding:11px 0;border-bottom:1px solid var(--hair);font-size:15px;color:var(--ink-2)}
.channel-list li::before{content:"";flex:none;width:6px;height:6px;border-radius:50%;background:var(--signal);transform:translateY(-2px)}

/* if you can describe the job */
.needs{list-style:none;margin:0;padding:0;border-top:1px solid var(--hair)}
.needs li{display:flex;align-items:center;gap:20px;padding:22px 0;border-bottom:1px solid var(--hair);font:400 clamp(20px,2.4vw,30px)/1.2 var(--display);letter-spacing:-.025em;color:var(--ink-2);transition:color .25s,padding-left .4s var(--ease)}
.needs li::before{content:"?";flex:none;display:grid;place-items:center;width:34px;height:34px;border-radius:50%;border:1px solid var(--hair-2);font:400 15px/1 var(--display);color:var(--muted)}
.needs li:hover{color:var(--ink);padding-left:8px}
.describe .section-head{grid-template-columns:1fr;gap:20px}
.describe .section-head>p{padding:0}
.needs-answer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:24px;margin-top:48px}
.needs-answer h3{font-size:clamp(44px,6vw,80px);letter-spacing:-.04em}

/* process: five steps and an agent moving along the track */
.track{position:relative;height:1px;margin:0 0 -1px;background:var(--hair-2)}
@keyframes travel{0%{left:0}18%{left:0}22%{left:25%}38%{left:25%}42%{left:50%}58%{left:50%}62%{left:75%}78%{left:75%}82%{left:calc(100% - 14px)}96%{left:calc(100% - 14px)}100%{left:0}}
.steps{display:grid;grid-template-columns:repeat(5,1fr);gap:28px}
.step{padding-top:28px;border-top:1px solid transparent}
.step b{display:block;font:300 40px/1 var(--display);letter-spacing:-.04em;color:var(--muted);font-variant-numeric:tabular-nums}
.step h3{margin:40px 0 10px;font-size:21px;letter-spacing:-.025em}
.step p{max-width:26ch;font-size:14.5px;color:var(--muted)}

/* capabilities */
.capabilities{display:grid;grid-template-columns:1fr 1fr;gap:64px;align-items:start}
.cap-copy{position:sticky;top:120px}
.cap-copy .eyebrow{margin-bottom:22px}
.cap-copy p{max-width:40ch;margin-top:22px;font-size:17px;line-height:1.55;color:var(--ink-2)}
.cap-list{border-top:1px solid var(--hair)}
.cap-list div{display:grid;grid-template-columns:220px 1fr;gap:24px;padding:26px 0;border-bottom:1px solid var(--hair)}
.cap-list b{font:400 20px/1.2 var(--display);letter-spacing:-.02em}
.cap-list span{font-size:15px;color:var(--muted)}

/* final cta */
.final-cta{max-width:var(--max);margin:0 auto;padding:clamp(120px,14vw,200px) var(--pad);text-align:center}
.final-cta h2{margin:22px 0 18px;font-size:clamp(52px,8vw,112px);line-height:.94}
.final-cta p{max-width:58ch;margin:0 auto;font-size:18px;color:var(--ink-2)}
.primary.big{margin-top:36px;padding:18px 28px;font-size:16px}

.site-footer{max-width:var(--max);margin:0 auto;padding:64px var(--pad) 40px;border-top:1px solid var(--hair);font-size:14px;color:var(--muted)}
/* the fixed "Talk to our AI" pill (60px tall, 22px up, z-index 60) sits over the bottom-right
   corner — which is exactly where `.foot-legal` puts the legal links. Reserve the height on the
   page that HAS the pill (only `[data-agency-site]`, the home page, carries it), so the last two
   links are clickable at the very bottom of the scroll. */
[data-agency-site] .site-footer{padding-bottom:116px}
.foot-top{display:grid;grid-template-columns:1.6fr 1fr 1fr 1.1fr;gap:48px}
.foot-brand .logo{color:var(--ink)}
.foot-brand p{max-width:44ch;margin:18px 0 24px;font-size:14.5px;line-height:1.6}
.socials{display:flex;gap:8px}
.socials a,.socials .soon{display:grid;place-items:center;width:38px;height:38px;border-radius:50%;border:1px solid var(--hair-2);color:var(--ink);transition:background .2s,border-color .2s}
.socials a:hover{background:var(--ink);border-color:var(--ink);color:var(--on-ink)}
.socials .soon{display:grid;place-items:center;width:38px;height:38px;border-radius:50%;border:1px dashed var(--hair-2);color:var(--muted);opacity:.55}
.socials svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.foot-col{display:flex;flex-direction:column;gap:10px}
.foot-col b{margin-bottom:6px;font:500 11px/1 var(--body);letter-spacing:.14em;text-transform:uppercase;color:var(--ink)}
.foot-col a{color:var(--ink-2);transition:color .2s}
.foot-col a:hover{color:var(--ink)}
.foot-col address{font-style:normal;line-height:1.55;color:var(--ink-2)}
.foot-col .text-btn{margin-top:8px;color:var(--ink)}
.foot-bottom{display:flex;flex-wrap:wrap;justify-content:space-between;gap:12px;margin-top:56px;padding-top:24px;border-top:1px solid var(--hair);font-size:13px}
.foot-legal{display:flex;gap:18px}
.foot-legal a:hover{color:var(--ink)}

/* ---------- modal ---------- */
.modal{position:fixed;inset:0;z-index:100;display:none;padding:20px;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
.modal.open{display:flex;align-items:center;justify-content:center}
body:has(.modal.open){overflow:hidden}
.modal-backdrop{position:absolute;inset:0;background:var(--backdrop);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}
.voice-panel{position:relative;width:100%;max-width:520px;min-width:0;margin:auto;padding:44px 40px 36px;border-radius:28px;background:var(--surface);border:1px solid var(--hair-2);box-shadow:0 40px 90px rgba(0,0,0,.6);text-align:center;animation:rise .5s var(--ease);max-height:calc(100vh - 40px);max-height:calc(100dvh - 40px);overflow-y:auto;overscroll-behavior:contain}
@keyframes rise{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
.close{position:absolute;top:16px;right:16px;width:36px;height:36px;border-radius:50%;border:1px solid var(--hair-2);font-size:20px;line-height:1;color:var(--muted)}
.close:hover{color:var(--ink);border-color:rgba(17,17,16,.4)}
.close:focus-visible,.primary:focus-visible,.secondary:focus-visible,.text-btn:focus-visible,.industry-tab:focus-visible,.menu:focus-visible{outline:2px solid var(--signal);outline-offset:3px}
.close:focus:not(:focus-visible){outline:none}
.voice-panel .eyebrow::before{animation:breathe 2s ease-in-out infinite}
.voice-orb{display:flex;flex-direction:column;align-items:center;gap:22px;margin:32px auto 22px}
.voice-bars{display:flex;align-items:center;justify-content:center;height:32px}
.voice-orb.active .voice-status{font:500 11px/1 var(--body);letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.voice-panel h2{margin:14px 0 12px;font-size:36px;letter-spacing:-.03em}
.voice-panel p{max-width:38ch;margin:0 auto;font-size:15px;line-height:1.55;color:var(--ink-2)}
.voice-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin-top:28px}
.permission-note{margin-top:18px;font-size:12.5px;color:var(--muted)}

.toast{position:fixed;left:50%;bottom:28px;z-index:110;transform:translate(-50%,16px);padding:12px 18px;border-radius:999px;background:var(--ink);color:var(--on-ink);font-size:14px;font-weight:500;opacity:0;pointer-events:none;transition:opacity .3s,transform .4s var(--ease)}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* pricing */
.price-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}
.price-card{padding:28px;border-radius:20px;background:var(--surface);border:1px solid var(--hair)}
.price-card h3{margin:44px 0 10px;font-size:26px;letter-spacing:-.03em}
.price-card p{font-size:15px;line-height:1.5;color:var(--muted)}
.price-note{display:flex;flex-direction:column;justify-content:flex-end;gap:18px;padding:28px;border-radius:20px;border:1px dashed var(--hair-2)}
.price-note p{font-size:16px;line-height:1.5;color:var(--ink-2)}
.price-note .secondary{align-self:flex-start}

/* closers */
.build-band{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:24px;max-width:var(--max);margin:0 auto;padding:40px var(--pad) 72px;border-top:1px solid var(--hair)}
.build-band h2{font-size:clamp(40px,5vw,64px);letter-spacing:-.035em}

/* persistent talk-to-us */
.floating{position:fixed;right:22px;bottom:22px;z-index:60;display:flex;align-items:center;gap:14px;padding:10px 18px 10px 10px;border-radius:999px;background:var(--ink);color:var(--on-ink);box-shadow:0 20px 50px rgba(0,0,0,.35);transition:transform .35s var(--ease)}
.floating:hover{transform:translateY(-2px)}
.floating-dot{display:grid;place-items:center;width:40px;height:40px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#e9fff5,#5fd6bd 45%,#0f3d3f)}
.floating-text{display:flex;flex-direction:column;text-align:left;line-height:1.15}
.floating-text b{font-weight:500;font-size:14.5px}
.floating-text small{font-size:12px;opacity:.65}
body:has(.modal.open) .floating{display:none}

/* modal: scenario + done state */
.scenario{margin:22px auto 0;max-width:420px;padding:6px 18px;border-radius:16px;background:var(--bg-2);border:1px solid var(--hair);text-align:left}
.scenario-row{display:grid;grid-template-columns:96px 1fr;gap:12px;padding:11px 0;border-bottom:1px solid var(--hair);font-size:13.5px}
.scenario-row span{color:var(--muted)}
.scenario-row b{font-weight:500;color:var(--ink)}
.scenario-quote{padding:14px 0 12px;font-family:var(--serif);font-style:italic;font-size:18px;line-height:1.35;color:var(--ink-2)}
/* "How to try it" (`spec.brief`, rendered by agency_site.js): what a demo bounded by its own data
   has and what to ask it for — the real-estate book (founder, 2026-09-24). Left-aligned like the
   card, but an outline rather than a fill, so it reads as instructions rather than as part of the
   scenario. It stays up during the call: "which areas were there?" is asked mid-conversation. */
.voice-brief{margin:14px auto 0;max-width:420px;padding:12px 18px 6px;border-radius:16px;border:1px dashed var(--hair-2);text-align:left}
.voice-brief-head{margin-bottom:4px;font:500 11px/1.2 var(--body);letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.voice-brief dl{margin:0}
.voice-brief dl>div{display:grid;grid-template-columns:96px 1fr;gap:12px;padding:8px 0;border-top:1px solid var(--hair);font-size:13px;line-height:1.45}
.voice-brief dl>div:first-child{border-top:0}
.voice-brief dt{color:var(--muted)}
.voice-brief dd{margin:0;color:var(--ink)}
.done-check{display:grid;place-items:center;width:64px;height:64px;margin:28px auto 22px;border-radius:50%;background:var(--signal);color:#0a0a0b;font-size:26px}
#doneSummary{font-size:16px}
.done-ask{margin-top:26px;font:400 22px/1.2 var(--display);letter-spacing:-.025em}

/* mobile nav (class-driven; app.js toggles .open) */
.nav nav.open{display:flex;position:absolute;top:78px;left:0;right:0;flex-direction:column;gap:4px;padding:16px var(--pad) 22px;background:var(--bg);border-bottom:1px solid var(--hair)}
.nav nav.open a{padding:10px 0;font-size:18px}

/* ---------- responsive ---------- */
/* ---------- legal pages (HarkWeb.Business.LegalController): one reading column in the site's
   own language — warm ground, hairlines, display headings, no card chrome. Not on the home
   page, so nothing here can move the hero. ---------- */
.legal{max-width:var(--max);margin:0 auto;padding:clamp(56px,7vw,96px) var(--pad) 0}
.legal-head{max-width:72ch;padding-bottom:36px;border-bottom:1px solid var(--hair)}
.legal-head h1{margin:22px 0 14px;font-size:clamp(40px,6vw,76px);line-height:.98}
.legal-updated{font-size:14px;color:var(--muted)}
.legal-nav{display:flex;flex-wrap:wrap;gap:8px;margin-top:28px}
.legal-nav a{padding:8px 14px;border:1px solid var(--hair-2);border-radius:999px;font-size:13.5px;color:var(--ink-2);transition:border-color .2s,color .2s,background .2s}
.legal-nav a:hover{border-color:rgba(17,17,16,.4);color:var(--ink)}
.legal-nav a.on{background:var(--ink);border-color:var(--ink);color:var(--on-ink)}
.legal-body{max-width:72ch;padding:44px 0 72px;font-size:16.5px;line-height:1.72;color:var(--ink-2)}
.legal-body .lead{font-size:19px;line-height:1.6;color:var(--ink)}
.legal-body h2{margin:52px 0 16px;font-size:clamp(25px,3vw,33px);line-height:1.12;color:var(--ink)}
.legal-body h3{margin:34px 0 10px;font:500 16.5px/1.4 var(--body);letter-spacing:0;color:var(--ink)}
.legal-body p+p{margin-top:16px}
.legal-body b{font-weight:500;color:var(--ink)}
.legal-body a{color:var(--ink);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:var(--hair-2);transition:text-decoration-color .2s}
.legal-body a:hover{text-decoration-color:var(--ink)}
.legal-body ul{margin:18px 0;padding:0;list-style:none;display:grid;gap:14px}
.legal-body ul li{position:relative;padding-left:22px}
.legal-body ul li::before{content:"";position:absolute;left:2px;top:.72em;width:6px;height:1px;background:var(--muted)}
.legal-table{width:100%;margin:22px 0 6px;border-collapse:collapse;font-size:14.5px;line-height:1.6;text-align:left}
.legal-table th{padding:0 16px 10px 0;border-bottom:1px solid var(--hair-2);font:500 11px/1.4 var(--body);letter-spacing:.14em;text-transform:uppercase;color:var(--ink);vertical-align:bottom}
.legal-table td{padding:16px 16px 16px 0;border-bottom:1px solid var(--hair);vertical-align:top}
.legal-table tr td:first-child{color:var(--ink);font-weight:500;width:26%}
.legal-table tr th:last-child,.legal-table tr td:last-child{padding-right:0}
.legal-where{display:block;margin-top:3px;font-weight:400;font-size:12.5px;color:var(--muted)}

@media (max-width:1100px){
  .agent-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .steps{grid-template-columns:repeat(3,1fr);gap:40px 28px}
  .track{display:none}
  .price-grid,.case{grid-template-columns:1fr 1fr}
}
@media (max-width:980px){
  .hero{grid-template-columns:1fr;min-height:0;padding-top:56px;gap:56px}
  .hero-agent{justify-self:start;width:min(100%,460px);margin-left:6%}
  .section-head{grid-template-columns:1fr;gap:20px;margin-bottom:44px}
  .capabilities{grid-template-columns:1fr;gap:40px}
  .cap-copy{position:static}
  .industry-layout{grid-template-columns:1fr;gap:24px}
  /* ten chips in a rail that gives no sign it scrolls: the mask fades the last one out at the
     right edge so there is visibly more, and snapping stops a chip half off-screen */
  .industry-list{display:flex;gap:8px;overflow-x:auto;padding:4px 0 12px;border:0;scrollbar-width:none;scroll-snap-type:x proximity;-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 44px),transparent);mask-image:linear-gradient(to right,#000 calc(100% - 44px),transparent)}
  .industry-list::-webkit-scrollbar{display:none}
  .industry-list li{flex:none;scroll-snap-align:start}
  .industry-list li:last-child{padding-right:44px}
  .industry-tab{display:inline-flex;align-items:center;gap:0;min-height:44px;padding:11px 18px!important;border:1px solid var(--hair-2);border-radius:999px}
  .industry-tab span,.industry-tab small,.industry-tab::after{display:none}
  .industry-tab strong{font-size:15px}
  .industry-tab.is-active{background:var(--ink);border-color:var(--ink)}
  .industry-tab.is-active strong{color:var(--on-ink)}
  .industry-panel{position:static}
}
@media (max-width:900px){
  .nav nav{display:none;border-bottom:1px solid var(--hair);z-index:50}
  .menu{display:block}
  /* a legal page carries no `agency_site.js`, so it renders no ☰ — its links must stay
     reachable rather than hiding behind a button that is not there */
  .nav-static{height:auto;flex-wrap:wrap;padding-top:14px;padding-bottom:14px;row-gap:10px}
  .nav-static nav{display:flex;order:3;flex-basis:100%;flex-wrap:wrap;gap:8px 18px;border:0;font-size:14px}
}
@media (max-width:640px){
  .legal-body{font-size:16px}
  .legal-body .lead{font-size:17.5px}
  .legal-nav a{padding:9px 13px}
  /* a three-column table has nowhere to go at 360px: each row becomes a labelled block */
  .legal-table,.legal-table tbody,.legal-table tr,.legal-table td{display:block;width:auto}
  .legal-table thead{display:none}
  .legal-table tr{padding:18px 0;border-bottom:1px solid var(--hair)}
  .legal-table td{padding:0;border:0}
  .legal-table td+td{margin-top:8px}
  .legal-table tr td:first-child{width:auto;font-size:16px}
  .foot-legal{flex-wrap:wrap;gap:12px 18px}
  [data-agency-site] .site-footer{padding-bottom:40px}

  .hero-agent{margin-left:0;width:100%}
  .sphere{width:80%}
  .agent-card{left:0;bottom:-6%;width:min(100%,280px)}
  .call-bar{position:static;transform:none;margin-top:-12px;flex-wrap:wrap;justify-content:center;border-radius:24px;padding:10px}
  .agent-select{padding-right:28px}
  /* `1fr` is `minmax(auto,1fr)`, so the widest item's MIN-CONTENT sets the track: the row-layout
     "Something else?" card would not shrink below 510px and clipped EVERY card on a 390px phone.
     The card stacks here like the rest, and `minmax(0,1fr)` stops any future item doing it again. */
  .agent-grid{grid-template-columns:minmax(0,1fr)}
  .use-card.featured{grid-column:auto}
  .custom-card{flex-direction:column;align-items:flex-start;gap:0;padding:24px}
  .custom-card h3{padding-top:12px}
  .custom-card p{margin:8px 0 18px}
  .custom-card .text-btn{margin-left:0;align-self:flex-start}
  .use-card.wide{flex-direction:column;align-items:flex-start;gap:0;padding:24px}
  .use-card.wide h3{padding-top:12px}
  .use-card.wide p{margin:8px 0 18px}
  .use-card.wide .text-btn{margin-left:0;align-self:flex-start}
  /* five steps in two columns orphaned the fifth beside a hole; one column reads better at 390,
     and a hairline makes them read as a sequence rather than five loose paragraphs */
  .steps{grid-template-columns:1fr;gap:0}
  .step{padding:26px 0;border-top:1px solid var(--hair)}
  .step:first-child{border-top:0;padding-top:0}
  .step h3{margin:14px 0 8px}
  .step p{max-width:none}
  .price-grid,.case{grid-template-columns:1fr}
  /* phones: the sticky header already pins "Talk to us", and a fixed corner pill sat on top of
     the hero picker's own menu (z-index 60 over 5), the trust strip and the Start call deck */
  .floating{display:none}
  .scenario-row{grid-template-columns:1fr;gap:2px}
  .voice-brief{padding:10px 14px 4px}
  .voice-brief dl>div{grid-template-columns:1fr;gap:2px}
  .cap-list div{grid-template-columns:1fr;gap:6px}
  /* four facts in a wrapping flex row came out 1-1-2 (they wrap on their natural widths); a
     two-column grid is the clean 2x2 the strip was drawn as */
  .trust{display:grid;grid-template-columns:1fr 1fr;gap:20px 24px;align-items:start}
  .trust>span{grid-column:1 / -1;width:auto;margin:0}
  /* THE PILL IS FOR ONE LINE. Stacked over two (`flex-direction:column` here, `flex-wrap` on
     .tel), a 999px radius clamps to half the box height and the button renders as a squashed
     lozenge — the founder's "distorted" (2026-09-23). On phones both become what they are: a
     full-width block button with a finite radius. */
  .giant-mic{display:flex;flex-direction:column;gap:6px;width:100%;padding:20px 24px;border-radius:20px;white-space:normal;text-align:center}
  .giant-mic small{margin:0;padding:0;border:0}
  .modal{padding:12px}
  .modal.open{align-items:flex-end}
  /* the panel is the scroller; its vertical padding sits on `.panel-state` so a pinned bar (below)
     reaches the panel's true edge. NO scroll-padding here: it insets the scrollport the focus
     algorithm uses, so every pinned button reads as "out of view" and a click (Chrome focuses a
     button on mousedown) scrolls the content before the handler runs. The × is a block pulled out
     of the flow (-52px = its 36px height + 16px top margin); a float shortened the eyebrow's line. */
  .voice-panel{padding:0 20px;border-radius:24px;max-height:calc(100vh - 24px);max-height:calc(100dvh - 24px);overflow-y:auto}
  .panel-state{padding:36px 0 24px}
  .close{position:sticky;top:16px;right:auto;float:none;display:block;margin:16px -4px -52px auto;background:var(--surface);z-index:2}
  .voice-orb{margin:20px auto 14px;gap:14px}
  .sphere.small{width:88px}
  .voice-panel h2{font-size:30px}
  .scenario{padding:4px 14px}
  .scenario-quote{font-size:16px}
  .voice-actions{margin-top:20px}
  .voice-actions .primary,.voice-actions .secondary{width:100%;justify-content:center}
  .permission-note{margin-top:14px}
}
@media (prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important}
  .mark i:nth-child(1),.logo-mark i:nth-child(1){height:44%}
  .mark i:nth-child(2),.logo-mark i:nth-child(2){height:100%}
  .mark i:nth-child(3),.logo-mark i:nth-child(3){height:69%}
  .mark i:nth-child(4),.logo-mark i:nth-child(4){height:31%}
}

.sphere.small .sphere-body{box-shadow:inset -12px -18px 36px rgba(0,0,0,.55),inset 6px 8px 20px rgba(120,232,208,.12)}

.voice-panel{box-shadow:0 30px 60px rgba(17,17,16,.14)}
.hero::before{background:radial-gradient(60% 55% at 78% 40%,rgba(95,214,189,.16),transparent 70%)}

[hidden]{display:none!important}

/* hero on phones: the globe scales; the deck moves below it */
@media (max-width:640px){
  .hero{padding-top:40px;gap:36px}
  .hero-agent{width:100%}
  /* The glow moves from a filter on the globe to a box-shadow on the sphere: an ancestor `filter`
     would make the fixed picker sheet below position against the globe instead of the viewport,
     and `isolation` would keep its z-index inside the globe. (The filter also shadowed the deck
     card and the open menu; the box-shadow shadows the sphere only.) The deck's `transform:none`
     further down is the third declaration the sheet depends on. */
  .globe{width:min(100%,360px);filter:none;isolation:auto}
  .globe .sphere-body{box-shadow:inset -40px -60px 120px rgba(0,0,0,.65),inset 20px 30px 80px rgba(120,232,208,.08),0 40px 90px var(--glow)}
  .globe .caption{top:50%;width:70%;font-size:19px}
  .deck-bg{display:none}
  .hero-agent{padding-bottom:146px}
  .deck{position:absolute;top:calc(100% + 14px);left:0;transform:none;width:100%;padding:10px;border-radius:24px;background:var(--surface);border:1px solid var(--hair-2);box-shadow:0 20px 40px rgba(17,17,16,.08)}
  .picker-btn{background:var(--bg-2);border-color:var(--hair-2);color:var(--ink)}
  .picker-label{color:var(--muted)}
  .picker-chev{border-color:var(--muted)}
  /* the menu is a bottom sheet on phones: anchored to the viewport (an 8-item list under the
     picker ran off the bottom of every phone), scrolls inside itself on a short screen, sits
     above the page (z 45) but its height keeps it clear of the sticky header (z 40) */
  .picker-menu{position:fixed;top:auto;bottom:max(12px,env(safe-area-inset-bottom));left:12px;right:12px;width:auto;max-height:calc(100vh - 110px);max-height:calc(100dvh - 110px);overflow-y:auto;overscroll-behavior:contain;z-index:45;grid-template-columns:1fr;padding:8px;border-radius:22px;background:var(--surface);border-color:var(--hair-2);box-shadow:0 24px 60px rgba(17,17,16,.22)}
  .picker-menu li{padding:10px 14px}
  .picker-menu li{color:var(--ink)}
  .picker-menu li small{color:var(--muted)}
  .picker-menu li:hover{background:var(--bg-2)}
  .deck .primary{background:var(--ink);color:var(--on-ink)}
  .channel-grid{grid-template-columns:1fr}
  /* the number and the hint stack, so this is a block button, not a pill (see .giant-mic above).
     `width:100%` is redundant here (.tel-hint already forces it) and is kept off deliberately. */
  .tel{flex-wrap:wrap;justify-content:flex-start;gap:2px 12px;padding:16px 18px;border-radius:20px}
  /* The mark and the number must share a line. Measured: at a fixed 24px they split at 360px; the
     clamp holds them together down to 320 (at a 19px floor they still split at 320-335). */
  .tel-num{font-size:clamp(17px,5.1vw,24px)}
  .tel-hint{width:100%;padding:0;border:0}
}
@media (max-width:1100px){
  .foot-top{grid-template-columns:1fr 1fr}
}
/* AFTER the 1100 rule, not inside the 640 block above it: both match at 390px and the later one
   wins at equal specificity, so the phone footer was rendering in two columns and wrapping
   "AI Appointment Setter" onto three lines (2026-09-23). */
@media (max-width:640px){
  .foot-top{grid-template-columns:1fr;gap:32px}
  /* 22px link rows are a 22px tap target; a phone footer gets room between them */
  .foot-col{gap:2px}
  .foot-col a{padding:7px 0}
  .foot-col b{margin-bottom:2px}
}
@media (max-width:980px) and (min-width:641px){
  .channel-grid{grid-template-columns:1fr}
}


.tel-soon{background:var(--bg-2);color:var(--ink-2);cursor:default}
.tel-soon .tel-hint{border-left-color:var(--hair-2);opacity:.8}

/* live demo: the hint, the phone field, the tool ticker, the outcome */
.voice-panel .voice-hint{margin:10px auto 0;max-width:42ch;font-size:13.5px;line-height:1.5;color:var(--muted)}
.voice-phone{margin:18px auto 0;max-width:360px;text-align:left}
.voice-phone label{display:block;margin-bottom:8px;font:500 12px/1 var(--body);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.voice-phone input{width:100%;padding:13px 14px;border-radius:12px;border:1px solid var(--hair-2);background:var(--surface);font:500 18px/1.2 var(--body);color:var(--ink);letter-spacing:.02em}
.voice-phone input:focus{outline:2px solid var(--signal);outline-offset:1px}
.voice-phone small{display:block;margin-top:8px;font-size:12.5px;color:var(--muted)}
/* A demo in progress: the orb, the status, the hint and the tool ticker are the panel — never the
   words as they are spoken (no captions, on any kind — founder, 2026-09-21). The prompt, the
   scenario card, the phone box, the permission note and the phone line hide. */
.panel-state.live #voicePrompt,.panel-state.live .scenario,.panel-state.live .voice-phone,.panel-state.live .permission-note,.panel-state.live #voiceCallUs,.panel-state.live .voice-actions [data-modal-close]{display:none}
.panel-state.live .voice-hint{margin-top:12px}
.voice-ticker{margin:12px auto 0;max-width:440px;padding:0;list-style:none;text-align:left}
/* OUR AI, NOT A DEMO (founder, 2026-09-21): a call with Talk Society's own AI is reverse video —
   the site's ink for the panel, the signal lime for the sphere, the eyebrow and the primary
   button — so it never reads as one more sample. `agency_site.js` puts `.ours` on the panel
   for a `demo: false` kind while the demos are open; the demos keep the light card and the
   teal sphere. Every rule here re-colours only; layout, the pinned bar's position and the
   compaction are untouched. */
.voice-panel.ours{background:var(--ink);color:var(--on-ink);border-color:rgba(246,244,239,.16);box-shadow:0 40px 90px rgba(0,0,0,.7)}
.voice-panel.ours .eyebrow{color:var(--signal-lit)}
.voice-panel.ours .eyebrow .mark{color:var(--signal-lit)}
.voice-panel.ours h2{color:var(--on-ink)}
.voice-panel.ours p,.voice-panel.ours .voice-hint,.voice-panel.ours .permission-note,.voice-panel.ours .outcome-summary,.voice-panel.ours .outcome-note{color:rgba(246,244,239,.72)}
.voice-panel.ours .voice-status,.voice-panel.ours .voice-orb.active .voice-status{color:rgba(246,244,239,.8)}
.voice-panel.ours .sphere.small{filter:drop-shadow(0 20px 44px rgba(216,243,90,.42))}
.voice-panel.ours .sphere-body{background:radial-gradient(circle at 32% 28%,#f7ffe0 0%,#e2f76e 12%,#a6d21f 34%,#4f7a0c 60%,#213307 80%,#0d1204 100%);box-shadow:inset -30px -50px 110px rgba(0,0,0,.55),inset 20px 30px 80px rgba(216,243,90,.14)}
.voice-panel.ours .sphere-body::after{background:radial-gradient(circle at 74% 78%,rgba(216,243,90,.30),transparent 38%),radial-gradient(circle at 60% 20%,rgba(255,255,255,.12),transparent 30%)}
.voice-panel.ours .voice-bars .mark{color:rgba(246,244,239,.45)}
.voice-panel.ours .voice-orb.active .voice-bars .mark{color:var(--signal-lit)}
.voice-panel.ours .close{border-color:rgba(246,244,239,.22);color:rgba(246,244,239,.75);background:var(--ink)}
.voice-panel.ours .primary{background:var(--signal);color:#0a0a0b}
.voice-panel.ours .primary:hover{background:var(--signal-lit)}
.voice-panel.ours .primary .mark{color:#0a0a0b}
.voice-panel.ours .secondary{border-color:rgba(246,244,239,.22);color:var(--on-ink)}
.voice-panel.ours .voice-ticker li{color:rgba(246,244,239,.85);border-top-color:rgba(246,244,239,.12)}
.voice-panel.ours .voice-ticker li::before{background:var(--signal-lit)}
.voice-panel.ours #panelLive .voice-actions{background:var(--ink)}
.voice-panel.ours #voiceCallUs a{color:var(--signal-lit)}
.voice-panel.ours .done-check{background:var(--signal-lit)}
.voice-panel.ours .outcome-lines li{color:rgba(246,244,239,.85);border-top-color:rgba(246,244,239,.12)}
.voice-panel.ours .outcome-lines li::before{color:var(--signal-lit)}
.voice-panel.ours .outcome-contact label span{color:rgba(246,244,239,.6)}
.voice-panel.ours .outcome-contact input{background:rgba(246,244,239,.06);border-color:rgba(246,244,239,.22);color:var(--on-ink)}
.voice-panel.ours .outcome-contact input::placeholder{color:rgba(246,244,239,.5)}
.voice-panel.ours .outcome-contact input:focus{outline-color:var(--signal-lit)}
.voice-ticker li{position:relative;padding:6px 0 6px 20px;font-size:13px;line-height:1.4;color:var(--ink-2);border-top:1px solid var(--hair)}
.voice-ticker li::before{content:"";position:absolute;left:4px;top:12px;width:7px;height:7px;border-radius:50%;background:var(--signal)}
.voice-orb[data-state="speaking"] .voice-bars .mark{--mt:.8s}
.outcome{margin-top:6px;text-align:left}
.outcome-summary{font-size:16px;line-height:1.5;color:var(--ink-2);text-align:center}
.outcome-lines{margin:16px 0 0;padding:0;list-style:none}
.outcome-lines li{position:relative;padding:8px 0 8px 22px;font-size:13.5px;line-height:1.45;color:var(--ink-2);border-top:1px solid var(--hair)}
.outcome-lines li::before{content:"✓";position:absolute;left:0;top:8px;color:var(--signal);font-weight:600}
.outcome-scorecard{margin-top:18px}
/* the concierge's sources: the pages its answers came from, as links */
.outcome-sources{margin:16px 0 0;padding:0;list-style:none}
.outcome-sources-head{margin-top:14px;font:500 11px/1.4 var(--body);letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.outcome-sources li{padding:7px 0;font-size:13.5px;line-height:1.45;border-top:1px solid var(--hair)}
.outcome-sources a{color:var(--ink-2);text-decoration:underline;text-underline-offset:2px}
/* the interview's scorecard, the agency's own (`AgencyHTML.demo_scorecard/1`) */
.sc{padding:16px 18px;border-radius:16px;background:var(--bg-2);border:1px solid var(--hair)}
.sc-head{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}
.sc-score{font:500 44px/1 var(--display);letter-spacing:-.04em;color:var(--ink)}
.sc-meta{font:500 11px/1.4 var(--body);letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.sc-table{width:100%;border-collapse:collapse;margin-top:10px;font-size:13.5px;line-height:1.45}
.sc-table th,.sc-table td{text-align:left;vertical-align:top;padding:7px 6px 7px 0;border-top:1px solid var(--hair)}
.sc-table th{font-weight:500;color:var(--ink);width:38%}
.sc-table td{color:var(--ink-2)}
.sc-table em{font:inherit;font-style:normal;letter-spacing:0;color:var(--muted)}
.sc-na{color:var(--muted)}
/* `.voice-panel p` centres every paragraph in a 38ch column; the summary is the card's own */
.voice-panel .sc-summary{margin:12px 0 0;max-width:none;font-size:14px;line-height:1.5;color:var(--ink-2);text-align:left}
.sc-shape{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;margin:12px 0 0;font-size:12.5px;line-height:1.4;color:var(--muted)}
.sc-shape dt,.sc-shape dd{margin:0}
.sc-shape dt{color:var(--ink-2)}
.outcome-contact{display:grid;gap:12px;margin:22px auto 0;max-width:380px}
.outcome-contact label{display:grid;gap:6px;text-align:left}
.outcome-contact label span{font:500 12px/1 var(--body);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.outcome-contact input{width:100%;padding:12px 14px;border-radius:12px;border:1px solid var(--hair-2);background:var(--surface);font:500 16px/1.2 var(--body);color:var(--ink)}
.outcome-contact input:focus{outline:2px solid var(--signal);outline-offset:1px}
.outcome-contact .primary{justify-content:center}
.outcome-note{min-height:1.2em;font-size:13px;color:var(--muted);text-align:center}
/* submitted: the fields and the button step back, the confirmation reads as the panel's last word */
.outcome-contact input:disabled{opacity:.55}
.outcome-contact .primary:disabled{opacity:.55;cursor:default}
.outcome-note.ok{color:var(--ink);font-weight:500}
.voice-panel.ours .outcome-note.ok{color:var(--signal-lit)}

/* the demo modal on a laptop: a 13" screen with the Dock showing leaves Chrome ~720px, and the
   panel stacked to ~970px — it bled off the bottom of the window with the Start button below the
   fold and nothing to say the modal scrolled (on a phone the button only peeked in at the bottom
   edge). Whenever the full panel cannot fit its content is compacted — a smaller orb, tighter type
   and card — so the buttons sit in view on a laptop and a phone alike. The threshold is the tallest
   kind's uncompacted panel plus the modal's 40px of padding, rounded up to a 20px margin: since
   2026-09-24 that is automotive with its "How to try it" rows, 1431px with the webfonts loaded
   (real estate is 1420px; the lead qualifier, the tallest before them, ~1060px), so 1500px. A kind that grows past it puts its Start button
   below the fold on a tall monitor — re-measure and move all three queries together. `.voice-hint` carries the panel prefix: the top-level
   `.voice-panel p` (0,1,1) out-specifies a bare class, so a bare `.voice-hint` here would be
   dead. */
@media (max-height:1500px){
  .voice-orb{margin:16px auto 10px;gap:8px}
  .sphere.small{width:84px}
  .voice-bars{height:24px}
  .voice-bars .mark{--mh:20px}
  .voice-panel h2{margin:6px 0 6px;font-size:28px}
  .voice-panel p{font-size:14px;line-height:1.45}
  .voice-panel .voice-hint{margin-top:6px}
  .voice-phone{margin-top:10px}
  .scenario{margin-top:14px;padding:2px 16px}
  .scenario-row{padding:8px 0;font-size:13px}
  .scenario-quote{padding:10px 0 8px;font-size:16px}
  .voice-brief{margin-top:10px}
  .voice-brief dl>div{padding:6px 0;font-size:12.5px}
  .voice-actions{margin-top:16px}
  .permission-note{margin-top:10px;font-size:12px}
  #voiceCallUs{margin-top:4px}
}
/* laptop and up under that height: the panel itself is the scroller, capped inside the viewport
   with its rounded bottom showing. Its vertical padding sits on `.panel-state` so the pinned × and
   bar reach the panel's true edges (a sticky box is constrained to the scroller's CONTENT box in
   every engine — padding on the scroller leaves a strip the scrolled text shows through). No
   scroll-padding, for the reason given in the phone block. */
@media (min-width:641px) and (max-height:1500px){
  .modal{padding:16px}
  .voice-panel{padding:0 36px;max-height:calc(100vh - 32px);max-height:calc(100dvh - 32px)}
  .panel-state{padding:30px 0 24px}
  .close{position:sticky;top:16px;right:auto;float:none;display:block;margin:16px -20px -52px auto;background:var(--surface);z-index:2}
}
/* When the panel scrolls (a laptop under that height, every phone) the buttons pin to its bottom
   edge — on the LIVE panel only: the done panel's action is the contact form, which a pinned bar
   would cover. A pinned bar hides whatever scrolls beneath it, so `startDemo` scrolls the phone
   field to the middle of the panel before focusing it. */
@media (max-height:1500px){
  #panelLive .voice-actions{position:sticky;bottom:0;z-index:1;padding:10px 0 12px;background:var(--surface);box-shadow:0 -14px 14px -10px rgba(17,17,16,.10)}
}

/* ---- the AI concierge as an embed (#conciergeWidget) — a second presentation beside card 09, for
   the founder to compare (2026-09-26). The mic starts the MoonPay concierge in place. ---- */
.concierge .section-head>p{max-width:520px}
/* card 09's link points DOWN to the panel: its arrow nudges down, not the ↗ nudge */
.text-btn[data-concierge-jump]:hover span{transform:translateY(2px)}
/* the card 09 link lands on the panel itself; clear the sticky header */
#conciergeWidget{scroll-margin-top:96px}
/* focused by card 09's link so a screen reader starts reading here; the mic shows its own ring */
#conciergeWidget:focus{outline:none}
.cw{--cw-bg:#0d0e0c;--cw-lilac:#ae9ef6;--cw-lilac-dim:rgba(174,158,246,.42);--cw-line:rgba(255,255,255,.14);
  display:grid;grid-template-columns:1.3fr .7fr 1.15fr;align-items:center;gap:clamp(28px,3.5vw,56px);
  /* 28px more than the sides, split top and bottom: room for the action slot that hangs below the mic
     column (always there, so the height is fixed), with the content still centred when it is empty */
  padding:calc(clamp(40px,5vw,72px) + 14px) clamp(28px,4.5vw,72px);background:var(--cw-bg);color:#f3f1ec;border-radius:12px}
.cw-eyebrow{display:flex;align-items:center;flex-wrap:wrap;gap:6px 10px;margin-bottom:22px;font:500 11px/1.4 var(--body);letter-spacing:.2em;text-transform:uppercase;color:#9c9a93}
.cw-eyebrow i{width:8px;height:8px;border-radius:50%;background:var(--cw-lilac);flex:none}
.cw-eyebrow b{font-weight:600;color:#f3f1ec}
.cw h3{margin:0 0 22px;font:600 clamp(40px,4.6vw,68px)/1 var(--display);letter-spacing:-.035em;color:#f6f4ef;white-space:nowrap}
.cw h3 em{font-style:normal;color:var(--cw-lilac)}
.cw-intro p{max-width:520px;margin:0;font-size:clamp(16px,1.35vw,19px);line-height:1.6;color:#9c9a93}
/* the company's own address, as it would sit on its site */
.cw-site{display:inline-flex;align-items:center;gap:8px;margin-top:26px;padding:9px 16px 9px 14px;border:1px solid var(--cw-line);
  border-radius:999px;font:500 14px/1 var(--body);letter-spacing:.01em;color:#f3f1ec;text-decoration:none;transition:border-color .2s,background .2s}
.cw-site svg{flex:none;color:var(--cw-lilac)}
.cw-site-arrow{color:#9c9a93;transition:color .2s,transform .2s var(--ease)}
.cw-site:hover{border-color:var(--cw-lilac-dim);background:rgba(255,255,255,.03)}
.cw-site:hover .cw-site-arrow{color:var(--cw-lilac);transform:translate(1px,-1px)}
.cw-site:focus-visible{outline:2px solid var(--cw-lilac);outline-offset:3px}
.cw-talk{position:relative;display:flex;flex-direction:column;align-items:center;gap:16px;text-align:center}
.cw-mic{position:relative;display:grid;place-items:center;width:204px;height:204px;padding:0;border:0;border-radius:50%;background:none;color:#141319;cursor:pointer;-webkit-tap-highlight-color:transparent}
.cw-mic:focus-visible{outline:2px solid var(--cw-lilac);outline-offset:6px}
.cw-ring{position:absolute;border-radius:50%;pointer-events:none;transition:transform .5s var(--ease),border-color .3s,opacity .3s}
.cw-ring.outer{inset:0;border:1px solid var(--cw-line)}
.cw-ring.inner{inset:17px;border:1.5px solid var(--cw-lilac-dim)}
.cw-core{position:relative;display:grid;place-items:center;width:142px;height:142px;border-radius:50%;background:var(--cw-lilac);transition:transform .25s var(--ease),background .3s,box-shadow .3s}
.cw-mic:hover .cw-core{transform:scale(1.04)}
.cw-dots{display:flex;gap:6px;height:12px;align-items:center}
.cw-dots i{width:4px;height:4px;border-radius:50%;background:#5c5a55;transition:background .3s}
.cw-label{display:flex;align-items:center;justify-content:center;height:2.8em;max-width:260px;font:500 15px/1.4 var(--body);color:#f3f1ec;text-wrap:balance}
/* one slot under the label: "End call" during a call, the ask after it, nothing before. It hangs
   below the column (in the panel's padding) so an empty slot adds no height and the three columns
   stay centred; on a phone, where the columns stack, it takes its own fixed row instead. */
.cw-action{position:absolute;top:100%;left:0;right:0;display:flex;align-items:center;justify-content:center;height:34px;margin-top:6px}
.cw-end{white-space:nowrap;padding:9px 18px;border:1px solid var(--cw-line);border-radius:999px;background:none;font:500 14px/1 var(--body);letter-spacing:.02em;color:#f3f1ec;cursor:pointer;transition:border-color .2s,background .2s}
.cw-end:hover{border-color:rgba(255,255,255,.4);background:rgba(255,255,255,.05)}
.cw-end:focus-visible{outline:2px solid var(--cw-lilac);outline-offset:3px}
.cw-end[hidden]{display:none}
.cw-ask{white-space:nowrap;padding:0;border:0;background:none;font:500 14px/1.4 var(--body);color:var(--cw-lilac);cursor:pointer}
.cw-ask[hidden]{display:none}
.cw-try-head{margin-bottom:16px;font:500 11px/1 var(--body);letter-spacing:.2em;text-transform:uppercase;color:#9c9a93}
.cw-try ul{display:grid;gap:12px;margin:0;padding:0;list-style:none}
.cw-try li{padding:15px 24px;border:1px solid var(--cw-line);border-radius:26px;font:400 15px/1.35 var(--body);color:#f3f1ec}
/* the call, in the panel */
.cw[data-state="connecting"] .cw-core{animation:cwPulse 1.2s ease-in-out infinite}
.cw[data-state="listening"] .cw-ring.inner{border-color:var(--cw-lilac);animation:cwBreathe 2.6s ease-in-out infinite}
.cw[data-state="listening"] .cw-dots i{background:#8d86ad}
.cw[data-state="speaking"] .cw-core{box-shadow:0 0 0 10px rgba(174,158,246,.14),0 0 48px rgba(174,158,246,.35)}
.cw[data-state="speaking"] .cw-ring.inner{border-color:var(--cw-lilac);transform:scale(1.05)}
.cw[data-state="speaking"] .cw-ring.outer{border-color:rgba(174,158,246,.35);transform:scale(1.04)}
.cw[data-state="speaking"] .cw-dots i{background:var(--cw-lilac);animation:cwDot 1s ease-in-out infinite}
.cw[data-state="speaking"] .cw-dots i:nth-child(2){animation-delay:.1s}
.cw[data-state="speaking"] .cw-dots i:nth-child(3){animation-delay:.2s}
.cw[data-state="speaking"] .cw-dots i:nth-child(4){animation-delay:.3s}
.cw[data-state="speaking"] .cw-dots i:nth-child(5){animation-delay:.4s}
.cw[data-state="speaking"] .cw-dots i:nth-child(6){animation-delay:.5s}
.cw[data-state="speaking"] .cw-dots i:nth-child(7){animation-delay:.6s}
.cw[data-state="listening"] .cw-core,.cw[data-state="speaking"] .cw-core{background:#bdb0f8}
.cw[data-state="ending"] .cw-core{opacity:.7}
@keyframes cwPulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(.94);opacity:.75}}
@keyframes cwBreathe{0%,100%{transform:scale(1)}50%{transform:scale(1.04)}}
@keyframes cwDot{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}
@media (max-width:1100px){
  .cw{grid-template-columns:1fr 1fr}
  .cw-intro{grid-column:1/-1}
}
@media (max-width:760px){
  .cw{grid-template-columns:1fr;text-align:left;padding-top:clamp(40px,5vw,72px);padding-bottom:clamp(40px,5vw,72px)}
  .cw-action{position:static;margin-top:0}
  .cw-mic{width:176px;height:176px}
  .cw-ring.inner{inset:15px}
  .cw-core{width:122px;height:122px}
}
@media (max-width:400px){
  .cw h3{font-size:34px}
}
@media (prefers-reduced-motion:reduce){
  .cw *,.cw *::before,.cw *::after{animation:none!important;transition:none!important}
}
