/* ════════ VOICES — waiting list count, David's note, visitor reviews ════════ */
.hero-waiting{display:none;align-items:center;gap:10px;margin-top:18px;font-size:.88rem;color:var(--bone-3);}
.hero-waiting.on{display:flex;}
.hero-waiting b{color:var(--bone);font-weight:600;font-variant-numeric:tabular-nums;}
.live-dot{width:8px;height:8px;border-radius:50%;background:var(--p);box-shadow:0 0 0 0 rgba(255,255,255,.55);animation:livePulse 2.2s ease-out infinite;flex:none;}
@keyframes livePulse{0%{box-shadow:0 0 0 0 rgba(255,255,255,.5)}80%,100%{box-shadow:0 0 0 10px rgba(255,255,255,0)}}

.voices{background:var(--ink-2);border-top:1px solid var(--rule);overflow:hidden;}
.voices-head{display:grid;grid-template-columns:1fr;gap:36px;align-items:end;margin-bottom:56px;}
.voices-count{max-width:480px;margin-top:32px;border:1px solid var(--rule-2);border-radius:18px;padding:28px 30px;background:linear-gradient(180deg,rgba(255,255,255,.05),transparent);}
.voices-count[hidden]{display:none;}
.voices-count-n{font-family:var(--display);font-size:clamp(2.8rem,6vw,4.4rem);line-height:1;letter-spacing:-.03em;color:var(--bone);font-variant-numeric:tabular-nums;}
.voices-count-l{display:flex;align-items:center;gap:10px;margin-top:12px;font-size:.92rem;color:var(--bone-3);line-height:1.5;}
.voices-count .vc-join{margin-top:18px;padding:11px 24px;font-size:.84rem;}

/* David — featured note */
.voice-feature{display:grid;grid-template-columns:1fr;gap:28px;align-items:center;padding:40px;border:1px solid var(--rule-2);border-radius:18px;background:var(--ink);margin-bottom:56px;}
@media(min-width:760px){.voice-feature{grid-template-columns:220px 1fr;gap:44px;padding:48px 56px;}}
@media(max-width:560px){.voice-feature{padding:30px 24px;}}
.voice-feature-photo{position:relative;width:168px;height:168px;border-radius:50%;overflow:hidden;background:var(--ink-3);}
@media(min-width:760px){.voice-feature-photo{width:220px;height:220px;}}
.voice-feature-photo picture{display:block;width:100%;height:100%;}
.voice-feature-photo img{width:100%;height:100%;object-fit:cover;display:block;border-radius:50%;}
.voice-feature blockquote{font-family:var(--display);font-weight:400;font-size:clamp(1.15rem,2vw,1.55rem);line-height:1.5;letter-spacing:-.015em;color:var(--bone);}
.voice-feature figcaption{margin-top:20px;font-family:var(--mono);font-size:.68rem;letter-spacing:.2em;text-transform:uppercase;color:var(--bone-3);}
.voice-feature figcaption b{color:var(--bone);font-weight:600;}

/* Reviews — smaller versions of David's card, two per row on wide screens */
.voices-grid{display:grid;grid-template-columns:1fr;gap:20px;margin-top:20px;}
@media(min-width:900px){.voices-grid{grid-template-columns:1fr 1fr;}}
.voice-card{display:grid;grid-template-columns:1fr;gap:18px;align-content:start;padding:28px 24px;border:1px solid var(--rule-2);border-radius:18px;background:var(--ink);}
@media(min-width:560px){.voice-card{grid-template-columns:96px 1fr;gap:24px;padding:30px 32px;align-items:start;}}
.voice-card.fresh{border-color:var(--p);box-shadow:0 0 0 1px var(--p),0 12px 40px var(--glow);}
.voice-av{width:96px;height:96px;border-radius:50%;overflow:hidden;display:grid;place-items:center;background:var(--ink-3);border:1px solid var(--rule-2);color:var(--bone);flex:none;}
.voice-av.has-photo{border:0;}
/* No photo: the avatar itself becomes the RingIt ring — the logo's grey #AAAEB4, stroke ≈ 13% of the diameter. */
.voice-av.ring{background:transparent;border:12.5px solid #AAAEB4;}
.voice-av img{width:100%;height:100%;object-fit:cover;display:block;border-radius:50%;}
.voice-card blockquote{font-family:var(--display);font-weight:400;font-size:1.08rem;line-height:1.55;letter-spacing:-.01em;color:var(--bone);overflow-wrap:anywhere;white-space:pre-line;}
.voice-card figcaption{margin-top:16px;font-family:var(--mono);font-size:.64rem;letter-spacing:.18em;text-transform:uppercase;color:var(--bone-3);overflow-wrap:anywhere;}
.voice-card figcaption b{color:var(--bone);font-weight:600;}
.voices-actions{display:flex;flex-wrap:wrap;align-items:center;gap:16px;margin-top:24px;}
.voices-more{border:1px solid var(--rule-2);border-radius:999px;background:rgba(255,255,255,.04);color:var(--bone);font:600 .88rem var(--sans);text-decoration:none;cursor:pointer;padding:12px 24px;min-height:44px;transition:border-color .25s ease,background .25s ease;}
.voices-more:hover{border-color:var(--p);background:rgba(255,255,255,.08);}
.voices-more:focus{outline:none}.voices-more:focus-visible{box-shadow:0 0 0 2px var(--ink-2),0 0 0 4px var(--p);}

/* Add-review dialog: header, photo circle + name/location, review, pinned submit.
   The form scrolls inside the dialog; the close button and the submit stay in view. */
.voice-dialog{margin:auto;width:min(540px,calc(100% - 32px));max-height:calc(100vh - 32px);max-height:calc(100dvh - 32px);border:1px solid var(--rule-2);border-radius:18px;background:var(--ink-2);color:var(--bone);padding:0;overflow:hidden;}
.voice-dialog[open]{display:flex;flex-direction:column;animation:voiceIn .35s cubic-bezier(.2,.7,.2,1);}
.voice-dialog::backdrop{background:rgba(0,0,0,.72);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);}
html:has(.voice-dialog[open]){overflow:hidden;}
@keyframes voiceIn{from{opacity:0;transform:translateY(14px) scale(.98)}to{opacity:1;transform:none}}
.voice-dialog form{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:32px 32px 0;}
.voice-close{position:absolute;top:14px;right:14px;z-index:2;width:40px;height:40px;border-radius:50%;border:1px solid var(--rule-2);background:var(--ink-2);color:var(--bone);cursor:pointer;display:grid;place-items:center;}
.voice-close:hover{border-color:var(--p);}
.vd-head{padding-right:44px;margin-bottom:22px;}
.vd-head .form-tag{margin-bottom:12px;}
.voice-dialog .form-h{font-size:clamp(1.5rem,4vw,2rem);margin:0;}
/* voices.js opens the dialog on the title (tabindex -1). It is not a control, so no focus ring (WebKit marks it :focus-visible after a tap). */
#voice-dialog-title:focus{outline:none;}
.vd-top{display:grid;grid-template-columns:112px 1fr;gap:24px;align-items:start;margin-bottom:6px;}
.vd-photo{display:flex;flex-direction:column;align-items:center;gap:6px;}
.voice-photo-preview{width:112px;height:112px;border-radius:50%;overflow:hidden;display:grid;place-items:center;border:1px dashed var(--bone-3);color:var(--bone-2);cursor:pointer;transition:border-color .25s ease,background .25s ease;background:rgba(255,255,255,.03);}
.voice-photo-preview:hover{border-color:var(--p);background:rgba(255,255,255,.07);}
.vd-photo:focus-within .voice-photo-preview{box-shadow:0 0 0 2px var(--ink-2),0 0 0 4px var(--p);}
.vd-photo-empty{display:flex;flex-direction:column;align-items:center;gap:6px;font:600 .74rem var(--sans);}
.voice-photo-preview img{width:100%;height:100%;object-fit:cover;border-radius:50%;}
.voice-photo-preview.has-photo{border:0;}
.voice-photo-hint{font-size:.72rem;color:var(--mute);text-align:center;}
.voice-photo-remove{background:none;border:0;color:var(--bone-3);font:.74rem var(--sans);text-decoration:underline;cursor:pointer;padding:2px 0;}
.voice-photo-input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none;}
.vd-who .field:last-child{margin-bottom:0;}
.vd-text{margin-top:14px;}
.voice-counter{display:block;text-align:right;font-size:.72rem;color:var(--mute);margin-top:4px;}
.vd-submit{position:sticky;bottom:0;background:var(--ink-2);padding:10px 0 22px;margin-top:4px;}
.vd-submit .form-submit{margin-top:0;}
.vd-submit .form-foot{margin-top:10px;}
/* Errors sit inside the pinned Publish block, directly above the button, so they are visible however the form is scrolled. */
.vd-submit .form-error{margin:0 0 10px;}
@media(max-width:560px){
  .voice-dialog{width:calc(100% - 16px);max-height:calc(100vh - 16px);max-height:calc(100dvh - 16px);border-radius:16px;}
  .voice-dialog form{padding:20px 18px 0;}
  .vd-head{margin-bottom:16px;}
  .vd-head .form-tag{margin-bottom:8px;}
  .voice-dialog .form-h{font-size:1.4rem;line-height:1.15;}
  .vd-top{grid-template-columns:88px 1fr;gap:16px;}
  .voice-photo-preview{width:88px;height:88px;}
  .vd-who .field{margin-bottom:10px;}
  .voice-dialog .field label{margin-bottom:4px;}
  .voice-dialog .field input{padding:6px 0 8px;min-height:38px;}
  .voice-dialog .field textarea{min-height:68px;padding:6px 0 8px;}
  .vd-text{margin:8px 0 0;}
  .vd-submit{padding:8px 0 14px;}
  .vd-submit .form-submit{min-height:48px;padding:13px 20px;}
  .vd-submit .form-foot{font-size:.56rem;margin-top:8px;}
}
/* Short screens (phones held sideways): a pinned Publish block would cover about 40% of the form and hide the field being typed in, so let it scroll with the form. */
@media(max-height:500px){.vd-submit{position:static;}}

.voice-add{display:inline-flex;align-items:center;gap:14px;flex:none;white-space:nowrap;padding:7px 24px 7px 7px;border:1px solid var(--rule-2);border-radius:999px;background:rgba(255,255,255,.04);color:var(--bone);font:600 .9rem var(--sans);letter-spacing:.005em;cursor:pointer;transition:border-color .25s ease,background .25s ease,transform .25s ease;}
.voice-add .plus{width:42px;height:42px;border-radius:50%;flex:none;background:var(--p);color:var(--ink);display:grid;place-items:center;transition:transform .35s cubic-bezier(.2,.7,.2,1);}
.voice-add:hover{border-color:var(--p);background:rgba(255,255,255,.08);transform:translateY(-2px);}
.voice-add:hover .plus{transform:rotate(90deg);}
/* Focus ring drawn with box-shadow: older iOS Safari paints outlines as squares, ignoring the rounded corners. */
.voice-add,.voice-close,.voice-photo-preview,.voices-more{-webkit-tap-highlight-color:transparent;}
.voice-add:focus{outline:none;}
.voice-add:focus-visible{box-shadow:0 0 0 2px var(--ink-2),0 0 0 4px var(--p);}
@media(hover:none){.voice-add:hover{transform:none;}}
.section-rule .num .mic-icon,.rail-label .num .mic-icon{display:inline-block;vertical-align:-4px;width:19px;height:19px;color:#fff;stroke-width:1.75;}

/* Links that used to end in an arrow: standalone ones are buttons (.link-btn), inline ones are underlined. */
.link-btn{margin-top:28px;}
.teaser-text .link-btn{display:inline-flex;}
.market .link-btn{margin-top:18px;color:var(--ink);border-color:rgba(10,5,8,.28);}
.market .link-btn:hover{color:var(--ink);border-color:var(--ink);}
.hero-sub a,.hero-proof a,.hero-waiting a{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;}
.evidence-grid .link-btn{max-width:100%;white-space:normal;text-align:center;text-wrap:balance;}
.hero-waiting a{white-space:nowrap;}
.hero-waiting,.voices-count-l{align-items:flex-start;}
.hero-waiting .live-dot{margin-top:calc(.8em - 4px);}
.voices-count-l .live-dot{margin-top:calc(.75em - 4px);}
.btn-primary:focus-visible{outline-color:var(--p);}

.voice-card:focus{outline:none}.voice-card:focus-visible{outline:2px solid var(--p);outline-offset:3px}
/* Reserve the hero waiting line on desktop so it doesn't shift the hero when the count arrives. */
@media(min-width:901px){.hero-waiting{display:flex;visibility:hidden}.hero-waiting.on{visibility:visible}.hero-waiting b:empty::before{content:"000"}}
