/* =========================================================================
   /tools/ premium layer (Tools redesign phase 2, 25 Oct 2026).
   Loads after site.css / tools.css / webtools*.css and uses their tokens.
   8pt grid; section gap 64px on phones and 112px on desktop; light + dark;
   :focus-visible rings; 44px minimum targets; no layout shift (the nudge
   slot and the app images have fixed boxes before anything loads).
   AdSense: the stage and every promo block carry data-no-ads and stable
   classes (.tp-stage, .tp-companion, .tp-show, .appbar) so they can be
   listed under "Excluded areas" in AdSense Auto ads.
   ========================================================================= */
:root{
  --s-1:4px;--s-2:8px;--s-3:12px;--s-4:16px;--s-5:24px;--s-6:32px;--s-7:40px;--s-8:48px;--s-9:64px;--s-10:80px;--s-11:96px;--s-12:112px;
  --section-gap:var(--s-9);
  --stage-pad:var(--s-5);
  --w-page:1120px;--w-tool:980px;--w-stage:880px;--w-prose:680px;
  --t-display:clamp(2.5rem,5.2vw,3.5rem);--lh-display:1.07;
  --t-title1:clamp(1.75rem,3.2vw,2.5rem);--lh-title1:1.1;
  --t-title2:clamp(1.375rem,2.2vw,1.75rem);--lh-title2:1.18;
  --t-headline:1.0625rem;--t-body:1.0625rem;--t-callout:.9375rem;--t-footnote:.8125rem;--t-eyebrow:.75rem;
  --surface-raised:#fff;--band:var(--bg-2);--stage-border:var(--border-2);
  --elev-1:0 1px 2px rgba(0,0,0,.04),0 2px 8px rgba(0,0,0,.04);
  --elev-2:0 1px 2px rgba(0,0,0,.05),0 12px 32px rgba(0,0,0,.08);
  --elev-3:0 2px 4px rgba(0,0,0,.06),0 24px 64px rgba(0,0,0,.12);
  --r-card:20px;--r-stage:28px;--r-tile:22.37%;
  --ease:cubic-bezier(.2,.8,.2,1);--dur:200ms;
  --focus:0 0 0 3px var(--bg),0 0 0 5px var(--accent);
  --c-audio-1:#ff2d55;--c-audio-2:#d30f45;--c-dev-1:#5856d6;--c-dev-2:#3634a3;
  --c-social-1:#ff9500;--c-social-2:#c93400;--c-faith-1:#af52de;--c-faith-2:#8944ab;
  --c-convert-1:#34c759;--c-convert-2:#248a3d;--c-games-1:#007aff;--c-games-2:#0040dd;
}
@media (min-width:735px){:root{--section-gap:var(--s-12);--stage-pad:var(--s-8)}}
@media (prefers-color-scheme:dark){:root{
  --surface-raised:#1c1c1e;--band:#0b0b0c;--stage-border:#2c2c2e;
  --elev-1:0 1px 2px rgba(0,0,0,.6);
  --elev-2:0 1px 2px rgba(0,0,0,.6),0 12px 32px rgba(0,0,0,.5);
  --elev-3:0 2px 4px rgba(0,0,0,.6),0 24px 64px rgba(0,0,0,.6);
}}

/* ---------- primitives */
.ti{display:inline-grid;place-items:center;flex:none;width:var(--ti);height:var(--ti);border-radius:var(--r-tile);
  background:linear-gradient(180deg,var(--c1),var(--c2));box-shadow:inset 0 0 0 .5px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.08)}
.ti--audio{--c1:var(--c-audio-1);--c2:var(--c-audio-2)}.ti--dev{--c1:var(--c-dev-1);--c2:var(--c-dev-2)}
.ti--social{--c1:var(--c-social-1);--c2:var(--c-social-2)}.ti--faith{--c1:var(--c-faith-1);--c2:var(--c-faith-2)}
.ti--convert{--c1:var(--c-convert-1);--c2:var(--c-convert-2)}.ti--games{--c1:var(--c-games-1);--c2:var(--c-games-2)}
.appi{flex:none;display:block;border-radius:var(--r-tile);box-shadow:inset 0 0 0 .5px rgba(0,0,0,.1);background:var(--bg-2);object-fit:cover}
@media (prefers-color-scheme:dark){.appi{box-shadow:inset 0 0 0 1px rgba(255,255,255,.12)}}
.eyebrow{display:inline-block;font-size:var(--t-eyebrow);font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);margin:0 0 var(--s-3)}
.eyebrow a{color:inherit}
.eyebrow--accent,.eyebrow--accent a{color:var(--accent)}
.tp a:focus-visible,.tp button:focus-visible,.tp input:focus-visible,.tp select:focus-visible,.tp textarea:focus-visible,.tp summary:focus-visible,
.tix a:focus-visible,.tix input:focus-visible,.twin a:focus-visible,.xlink a:focus-visible,.appbar a:focus-visible,.appbar button:focus-visible{outline:none;box-shadow:var(--focus);border-radius:12px}
.btn-quiet{display:inline-flex;align-items:center;gap:6px;min-height:44px;font-weight:500;color:var(--accent)}
.btn-quiet .arr{transition:transform var(--dur) var(--ease)}.btn-quiet:hover .arr{transform:translateX(3px)}
.badge-link,.tp .app-store-badge{display:inline-flex;line-height:0;border-radius:10px;min-height:44px;align-items:center}
.tp-companion .app-store-badge img,.tp-nudge .app-store-badge img,.appbar .app-store-badge img{height:44px;width:auto}
@media (prefers-color-scheme:dark){.tp .app-store-badge img,.appbar .app-store-badge img,.xlink .app-store-badge img{outline:1px solid #a6a6a6;outline-offset:-1px;border-radius:9px}}

/* =============================== TOOL PAGE =============================== */
.tp{display:block}
.tp .wrap{max-width:var(--w-tool)}
.tp-top{padding-top:var(--s-4)}
.tp-top .breadcrumb{margin:0}
.tp-hero{max-width:var(--w-prose);margin:0 auto;padding:var(--s-6) 22px 0;text-align:center}
.tp-hero .ti{display:grid;margin:0 auto var(--s-4)}
.tp-hero .eyebrow{margin-bottom:var(--s-2)}
.tp-hero h1{font-size:var(--t-display);line-height:var(--lh-display);letter-spacing:-.03em;margin:0 0 var(--s-4)}
.tp-hero .hero-sub{font-size:clamp(1.0625rem,1.6vw,1.25rem);line-height:1.45;color:var(--text-2);margin:0 auto;max-width:600px}
.kicker-row{display:flex;flex-wrap:wrap;gap:var(--s-2) var(--s-4);justify-content:center;margin:var(--s-4) 0 0;padding:0;list-style:none}
.kicker-row li{display:inline-flex;align-items:center;gap:6px;font-size:var(--t-footnote);color:var(--text-2);margin:0}
.kicker-row li::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--ok)}
.tp-stage-wrap{padding:var(--s-6) 22px 0}
.tp-stage{max-width:var(--w-stage);margin:0 auto;background:var(--surface-raised);border:1px solid var(--stage-border);border-radius:var(--r-stage);
  box-shadow:var(--elev-3);padding:var(--stage-pad);position:relative;isolation:isolate}
.tp-stage>.tool,.tp-stage>form.tool{margin:0;padding:0;background:none;border-radius:0}
.tp-stage .tool .btn{min-height:44px}
.tp-stage .tool .btn-secondary{background:var(--bg-2);color:var(--text);padding-inline:var(--s-5)}
.tp-stage .tool .btn-secondary:hover{text-decoration:none;background:var(--border-2)}
.tp-stage .tool input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file]),.tp-stage .tool select{min-height:44px}
/* post-use nudge: shares one grid cell with the trust line, so its height is reserved up front */
.tp-foot{display:grid;margin-top:var(--s-5);padding-top:var(--s-4);border-top:1px solid var(--border-2)}
.tp-foot>*{grid-area:1/1}
.tp-trust{margin:0;align-self:center;font-size:var(--t-footnote);color:var(--text-3)}
.tp-trust a{display:inline-flex;align-items:center;min-height:44px}
.tp-nudge{display:flex;align-items:center;gap:var(--s-4);padding:var(--s-3) var(--s-4);border-radius:18px;background:var(--bg-2);
  visibility:hidden;opacity:0;transform:translateY(8px);transition:opacity 320ms var(--ease),transform 320ms var(--ease),visibility 0s 320ms}
.tp-foot.is-nudge .tp-nudge{visibility:visible;opacity:1;transform:none;transition:opacity 320ms var(--ease),transform 320ms var(--ease)}
.tp-foot.is-nudge .tp-trust{visibility:hidden}
.tp-nudge .appi{width:40px;height:40px}
.tp-nudge p{margin:0;flex:1;font-size:var(--t-callout);color:var(--text)}
.tp-nudge .acts{display:flex;align-items:center;gap:var(--s-2);flex:none}
.x{width:44px;height:44px;flex:none;display:grid;place-items:center;border:0;background:none;color:var(--text-3);border-radius:50%;cursor:pointer;font:inherit;font-size:1.25rem;line-height:1}
.x:hover{background:var(--border-2)}
@media (max-width:734px){.tp-nudge{flex-wrap:wrap}.tp-nudge p{flex:1 1 calc(100% - 64px)}.tp-nudge .acts{width:100%;justify-content:space-between;padding-left:56px}}
/* "Do more with the app" card, directly under the stage */
.tp-companion{max-width:var(--w-stage);margin:var(--s-5) auto 0;padding:0 22px;box-sizing:content-box}
.tp-companion .in{display:grid;grid-template-columns:auto 1fr auto;gap:var(--s-2) var(--s-5);align-items:center;padding:var(--s-5);border-radius:var(--r-card);background:var(--band);border:1px solid var(--border-2)}
.tp-companion .appi{width:64px;height:64px;grid-row:span 2;align-self:start}
.tp-companion .who p{margin:0}
.tp-companion .eyebrow{margin:0 0 2px}
.tp-companion .title2{font-size:var(--t-title2);line-height:var(--lh-title2);font-weight:600;color:var(--text);letter-spacing:-.015em}
.tp-companion .cta-line{font-size:var(--t-callout);color:var(--text-2);margin-top:2px}
.rating{display:flex;align-items:center;gap:6px;font-size:var(--t-footnote);color:var(--text-2);margin:4px 0 0}
.rating .stars{font-size:.9rem}
.tp-companion .cta-col{display:grid;justify-items:end;gap:var(--s-1)}
.tp-companion ul{grid-column:2/4;list-style:none;margin:var(--s-2) 0 0;padding:0;display:flex;flex-wrap:wrap;gap:var(--s-2) var(--s-5)}
.tp-companion li{display:flex;gap:8px;align-items:flex-start;margin:0;font-size:var(--t-callout);color:var(--text-2)}
.tp-companion li::before{content:"✓";color:var(--accent);font-weight:600}
@media (max-width:734px){
  .tp-companion{padding:0 12px}
  .tp-companion .in{grid-template-columns:auto 1fr;gap:var(--s-3) var(--s-4)}
  .tp-companion .appi{width:56px;height:56px;grid-row:auto}
  .tp-companion ul{grid-column:1/-1;flex-direction:column}
  .tp-companion .cta-col{grid-column:1/-1;justify-items:start;grid-auto-flow:column;align-items:center;justify-content:start;gap:var(--s-4)}
}
/* content: the guide, FAQ, links. Copy unchanged; only spacing and type. */
.tp-body>.section,.tp-body>section{margin-block:var(--section-gap) 0}
.tp-body>.section>h2{font-size:var(--t-title1);line-height:var(--lh-title1);letter-spacing:-.025em;margin:0 0 var(--s-5)}
.tp-body>.section>p,.tp-body>.section>ul,.tp-body>.section>ol{max-width:var(--w-prose)}
.tp-body>.section>ul{padding-left:1.2em}
.tp-body>.section>ul>li{margin:0 0 var(--s-3);line-height:1.55}
.tp-body .tablecard{margin-top:var(--s-4)}
.tp-body .faq{max-width:var(--w-prose);gap:0;border-top:1px solid var(--border-2)}
.tp-body .faq-item{border:0;border-bottom:1px solid var(--border-2);border-radius:0;padding:var(--s-5) 0;background:none}
.tp-body .faq-item h3{font-size:var(--t-headline);margin:0 0 var(--s-2)}
.tp-body .related .chips{justify-content:flex-start}
.tp-body .related .chip{min-height:44px;padding:0 var(--s-4);font-size:var(--t-callout)}
.tp-body .related .chip:hover{text-decoration:none;background:var(--border-2)}
.tp-body>.section:last-child{margin-bottom:var(--section-gap)}
/* closing app section: full-bleed band around the existing CTA (copy and link unchanged) */
.tp-show{margin:var(--section-gap) 0 0;padding:var(--s-11) 22px;background:var(--band);border-top:1px solid var(--border-2);border-bottom:1px solid var(--border-2)}
.tp-show .in{max-width:var(--w-tool);margin:0 auto;display:grid;grid-template-columns:1fr 1fr;gap:var(--s-9);align-items:center}
.tp-show .in.solo{grid-template-columns:1fr;max-width:var(--w-prose);text-align:center}
.tp-show .cta{margin:0;padding:0;background:none;border-radius:0;text-align:left}
.tp-show .solo .cta{text-align:center}
.tp-show .cta h2{font-size:var(--t-title1);line-height:var(--lh-title1);letter-spacing:-.025em;margin:0 0 var(--s-4)}
.tp-show .cta p{max-width:none;margin:0 0 var(--s-5);font-size:var(--t-body)}
.tp-show .cta p:last-child{margin:var(--s-4) 0 0;font-size:var(--t-footnote);color:var(--text-3)}
.tp-show .cta .hero-actions{justify-content:flex-start!important;margin-top:0}
.tp-show .solo .cta .hero-actions{justify-content:center!important}
.tp-show .app-line{display:flex;align-items:center;gap:var(--s-4);margin:var(--s-6) 0 0;padding-top:var(--s-5);border-top:1px solid var(--border-2)}
.tp-show .app-line .appi{width:48px;height:48px}
.tp-show .app-line b{display:block;color:var(--text);font-size:var(--t-headline)}
.tp-show .app-line .rating{margin:2px 0 0}
.shots{display:flex;gap:var(--s-4);justify-content:center;align-items:flex-start;margin:0;padding:0;list-style:none}
.shots li{margin:0;width:30%;max-width:180px}
.shots img{display:block;width:100%;height:auto;border-radius:22px;box-shadow:var(--elev-2);border:1px solid var(--border-2);background:var(--bg-2)}
.shots li:nth-child(2){transform:translateY(-24px)}
.shots.wide li{width:48%;max-width:none}.shots.wide img{border-radius:12px}.shots.wide li:nth-child(2){transform:none}
@media (max-width:734px){.tp-show{padding:var(--s-9) 22px}.tp-show .in{grid-template-columns:1fr;gap:var(--s-7)}.shots li:nth-child(2){transform:none}}
/* sticky mobile app bar: phones only, never over the tool (shown after the stage scrolls away);
   .tp-barspace reserves its height at the end of the page so it never covers the last content */
.appbar{position:fixed;left:var(--s-3);right:var(--s-3);bottom:calc(var(--s-3) + env(safe-area-inset-bottom));z-index:90;display:none;align-items:center;gap:var(--s-3);
  padding:var(--s-2) var(--s-1) var(--s-2) var(--s-3);border-radius:20px;background:color-mix(in srgb,var(--surface-raised) 88%,transparent);
  -webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);border:1px solid var(--border-2);box-shadow:var(--elev-3);
  transform:translateY(160%);visibility:hidden;transition:transform 360ms var(--ease),visibility 0s 360ms}
.appbar.is-in{transform:none;visibility:visible;transition:transform 360ms var(--ease)}
.appbar .appi{width:40px;height:40px}
.appbar .t{flex:1;min-width:0;line-height:1.25}
.appbar .t b{display:block;font-size:var(--t-callout);color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.appbar .t span{display:block;font-size:var(--t-footnote);color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.appbar .app-store-badge img{height:40px}
.tp-barspace{display:none}
@media (max-width:734px){.appbar{display:flex}.tp-barspace{display:block;height:88px}}
@media print{.appbar,.tp-barspace,.tp-nudge,.tp-companion,.tp-show{display:none!important}}
@media (prefers-reduced-motion:reduce){.tp *,.tix *,.appbar,.twin *,.xlink *{transition:none!important}}
@media (max-width:734px){.tp-hero{padding-top:var(--s-5)}.tp-stage-wrap{padding:var(--s-5) 12px 0}}

/* ---------- design review round 2 (25 Oct 2026): tool page body ---------- */
/* B1 body column centred on the stage axis: prose 680px, steps and related cards at stage width */
.tp .tp-body{max-width:calc(var(--w-stage) + 44px);margin-inline:auto;padding-inline:22px;box-sizing:border-box}
.tp-body>.section{max-width:var(--w-prose);margin-inline:auto}
.tp-body>.tp-steps,.tp-body>.tp-related{max-width:none}
/* B1 how-to as numbered step cards */
.tp-body>.tp-steps>.steps{max-width:none;list-style:none;margin:0;padding:0;display:grid;grid-template-columns:1fr;gap:16px;counter-reset:step}
@media (min-width:735px){.tp-body>.tp-steps>.steps{grid-template-columns:repeat(3,minmax(0,1fr))}}
.steps>li{counter-increment:step;margin:0;padding:24px;border-radius:18px;background:var(--bg-2);font-size:var(--t-callout);line-height:1.5;color:var(--text-2)}
.steps>li strong{color:var(--text)}
.steps>li::before{content:counter(step);display:grid;place-items:center;width:28px;height:28px;margin:0 0 12px;border-radius:50%;background:var(--accent);color:var(--bg);font-size:.8125rem;font-weight:600;line-height:1}
/* B1 privacy card */
.tp-privacy .pcard{display:grid;grid-template-columns:auto 1fr;gap:16px 20px;align-items:start;padding:24px;border-radius:var(--r-card);background:var(--bg-2);border:1px solid var(--border-2)}
.tp-privacy .lock{display:grid;place-items:center;width:44px;height:44px;border-radius:12px;background:var(--surface-raised);color:var(--accent)}
.tp-privacy .eyebrow{margin:0 0 4px}
.tp-privacy h2{font-size:var(--t-title2);line-height:var(--lh-title2);letter-spacing:-.015em;margin:0 0 8px}
.tp-privacy p{margin:0 0 8px;color:var(--text-2)}.tp-privacy p:last-child{margin-bottom:0}
/* B1 FAQ accordion (question stays an h3 inside summary) */
.tp-body .tp-faq .faq-item{padding:0}
.tp-faq summary{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:56px;padding:12px 0;cursor:pointer;list-style:none;border-radius:8px}
.tp-faq summary::-webkit-details-marker{display:none}
.tp-body .tp-faq summary h3{margin:0;font-size:var(--t-headline);line-height:1.3}
.tp-faq .chev{flex:none;width:9px;height:9px;margin-right:4px;border-right:2px solid var(--text-3);border-bottom:2px solid var(--text-3);transform:translateY(-3px) rotate(45deg);transition:transform var(--dur) var(--ease)}
.tp-faq details[open] .chev{transform:translateY(2px) rotate(225deg)}
.tp-faq details>p{margin:0 0 20px;color:var(--text-2);line-height:1.55}
/* B1 related: 3 tool cards + "All N … tools" */
.grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin:0;padding:0;list-style:none}
.grid3>li{margin:0;display:grid}
@media (max-width:734px){.grid3{grid-template-columns:1fr}}
.tp-related .sec-head{align-items:center}
/* B1 "From the same developer" folded into the closing app section */
.tp-show .show-more{margin-top:var(--s-6);padding-top:var(--s-5);border-top:1px solid var(--border-2)}
.tp-show .show-more .eyebrow{margin:0}
.tp-show .show-more ul{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:8px}
.tp-show .show-more li{margin:0;font-size:var(--t-callout);line-height:1.5;color:var(--text-2)}
.tp-show .show-more a{text-decoration:underline;text-underline-offset:2px}
.tp-body .tp-related ul.grid3{grid-template-columns:repeat(3,minmax(0,1fr));max-width:none;gap:16px;padding:0;margin-inline:0}
@media (max-width:734px){.tp-body .tp-related ul.grid3{grid-template-columns:1fr}}
/* B2 dark mode: surfaces inside the stage need a step up from the stage colour */
@media (prefers-color-scheme:dark){.tp-stage{--bg-2:#2c2c2e;--border-2:#3a3a3c}}
/* S3 stage footer: trust line at the top of the reserved slot; nudge text 2 lines on phones */
.tp-trust{align-self:start}
@media (max-width:734px){.tp-nudge p{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}}
/* phones: the nudge is a fixed toast instead of a reserved slot (the slot left ~90px of empty
   stage under the trust line). Fixed, so showing it never moves anything (CLS 0); hidden while the
   app bar is in. */
@media (max-width:734px){.tp-nudge{position:fixed;left:var(--s-3);right:var(--s-3);bottom:calc(var(--s-3) + env(safe-area-inset-bottom));z-index:80;background:var(--surface-raised);border:1px solid var(--border-2);box-shadow:var(--elev-3)}.tp-foot.is-nudge .tp-trust{visibility:visible}body:has(.appbar.is-in) .tp-foot.is-nudge .tp-nudge{visibility:hidden;opacity:0}}
/* S9 44px targets; S10 disabled controls look disabled; S11 FAQ heading leading */
.tp-stage input[type=range]{height:44px}
.tp-show .btn{min-height:44px}
.tp-stage .btn:disabled,.tp-stage button:disabled{opacity:.45;cursor:not-allowed}
.tix .faq-item h3{line-height:1.3}
/* S7 guitar tuner: A4 field 44px, aligned row, tone buttons in a grid */
[data-webtool="tuner"] .tool-row{align-items:end}
[data-webtool="tuner"] .tool-row input{height:44px;box-sizing:border-box}
[data-webtool="tuner"] .tn-strings{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
@media (min-width:735px){[data-webtool="tuner"] .tn-strings{grid-template-columns:repeat(6,minmax(0,1fr))}}
[data-webtool="tuner"] .tn-strings .btn{min-width:0;min-height:44px;padding-inline:8px;white-space:nowrap}
/* nice to have: companion spacing, piano key letters on touch, jpg-to-pdf file input, crumbs */
.tp-companion{margin-top:var(--s-6)}
@media (hover:none) and (pointer:coarse){[data-webtool="piano"] .pk-k{display:none}}
.tp-stage input[type=file]{min-height:44px;font:inherit}
.tp-stage input[type=file]::file-selector-button{min-height:44px;margin-right:12px;padding:0 16px;border:0;border-radius:var(--radius-pill,980px);background:var(--bg-2);color:var(--text);font:inherit;font-weight:500;cursor:pointer}
.tp-hero h1{text-wrap:balance}
.tp-top .breadcrumb a,.tix .breadcrumb a{text-decoration:none}

/* shared tool cards (index, category pages, related, app pages) */
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:var(--s-4);margin:0;padding:0;list-style:none}
.cards>li{margin:0;display:grid}
.tcard{display:grid;grid-template-columns:auto 1fr;gap:var(--s-2) var(--s-4);align-content:start;padding:var(--s-5);border-radius:var(--r-card);
  background:var(--surface-raised);border:1px solid var(--border-2);box-shadow:var(--elev-1);color:inherit;
  transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease),border-color var(--dur) var(--ease)}
.tcard[hidden]{display:none}
.tcard:hover{text-decoration:none;transform:translateY(-2px);box-shadow:var(--elev-2);border-color:var(--border)}
.tcard .nm{grid-column:2;align-self:center;font-size:var(--t-headline);line-height:1.3;margin:0;color:var(--text);font-weight:600}
.tcard .ln{grid-column:1/-1;margin:var(--s-2) 0 0;font-size:var(--t-callout);line-height:1.45;color:var(--text-2)}
.tcard .meta{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between;gap:var(--s-3);margin-top:var(--s-3);padding-top:var(--s-3);
  border-top:1px solid var(--border-2);font-size:var(--t-footnote);color:var(--text-3)}
.tcard .meta .app{display:inline-flex;align-items:center;gap:6px;min-width:0}
.tcard .meta .app img{width:20px;height:20px;border-radius:5px}
.tcard .meta .app span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tcard .go{color:var(--accent);font-weight:500;white-space:nowrap}

/* =============================== TOOLS INDEX + CATEGORY PAGES =============================== */
.tix{display:block}
.tix .breadcrumb{max-width:var(--w-page);margin:0 auto;padding:var(--s-4) 22px 0}
.ti-hero{max-width:820px;margin:0 auto;padding:var(--s-8) 22px 0;text-align:center}
.ti-hero h1{font-size:var(--t-display);line-height:var(--lh-display);letter-spacing:-.03em;margin:0 0 var(--s-4)}
.ti-hero .sub{font-size:clamp(1.0625rem,1.6vw,1.25rem);line-height:1.45;color:var(--text-2);margin:0 auto var(--s-6);max-width:640px}
.search{position:relative;max-width:560px;margin:0 auto}
.search svg{position:absolute;left:18px;top:50%;transform:translateY(-50%);color:var(--text-3);pointer-events:none}
.search input{width:100%;height:56px;padding:0 56px 0 52px;font:inherit;font-size:var(--t-body);color:var(--text);background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius-pill);box-shadow:var(--elev-1)}
.search input::placeholder{color:var(--text-3)}
.search kbd{position:absolute;right:16px;top:50%;transform:translateY(-50%);font:inherit;font-size:var(--t-footnote);color:var(--text-3);border:1px solid var(--border);border-radius:6px;padding:0 6px;line-height:20px}
.search-note{min-height:20px;margin:var(--s-2) 0 0;font-size:var(--t-footnote);color:var(--text-3)}
.filters{position:sticky;top:var(--nav-h);z-index:50;margin-top:var(--s-6);padding:var(--s-2) 0;background:color-mix(in srgb,var(--bg) 88%,transparent);
  -webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);border-bottom:1px solid var(--border-2)}
.filters .in{max-width:var(--w-page);margin:0 auto;padding:0 22px;display:flex;gap:var(--s-2);flex-wrap:wrap;justify-content:center}
.fchip{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 var(--s-4);border-radius:var(--radius-pill);border:1px solid var(--border-2);
  background:var(--surface-raised);color:var(--text);font-size:var(--t-callout);font-weight:500;transition:background var(--dur) var(--ease),border-color var(--dur) var(--ease)}
.fchip:hover{border-color:var(--border);text-decoration:none}
.fchip .n{font-size:var(--t-footnote);color:var(--text-3);font-variant-numeric:tabular-nums}
.fchip[aria-current="true"],.fchip[aria-current="page"]{background:var(--text);color:var(--bg);border-color:var(--text)}
.fchip[aria-current="true"] .n,.fchip[aria-current="page"] .n{color:inherit;opacity:.75}
.fchip .dot{width:8px;height:8px;border-radius:50%;background:var(--c2)}
.filters .in{flex-wrap:nowrap;overflow-x:auto;justify-content:flex-start;scrollbar-width:none}.filters .in::-webkit-scrollbar{display:none}.fchip{flex:none}.filters .in>:first-child{margin-left:auto}.filters .in>:last-child{margin-right:auto}
.ti-wrap{max-width:var(--w-page);margin:0 auto;padding:0 22px}
.start{margin-top:var(--s-8)}
.start[hidden]{display:none}
.grid4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--s-4);margin:0;padding:0;list-style:none}
.grid4>li{margin:0;display:grid}
@media (max-width:1068px){.grid4{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:560px){.grid4{grid-template-columns:1fr}}
/* nice to have: phones get "Start here" as a horizontal scroll-snap row */
@media (max-width:560px){.start .grid4{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:12px;padding-bottom:8px;scrollbar-width:none}.start .grid4::-webkit-scrollbar{display:none}.start .grid4>li{flex:0 0 78%;scroll-snap-align:start}}
.fcard{display:grid;align-content:start;gap:var(--s-3);padding:var(--s-6) var(--s-5) var(--s-5);border-radius:var(--r-stage);background:var(--surface-raised);
  border:1px solid var(--border-2);box-shadow:var(--elev-2);color:inherit;transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease)}
.fcard:hover{text-decoration:none;transform:translateY(-3px);box-shadow:var(--elev-3)}
.fcard .nm{font-size:var(--t-title2);line-height:var(--lh-title2);margin:0;color:var(--text);font-weight:600}
.fcard .ln{margin:0;font-size:var(--t-callout);color:var(--text-2)}
.fcard .go{color:var(--accent);font-weight:500;font-size:var(--t-callout)}
.sec-head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--s-4);margin:0 0 var(--s-5);flex-wrap:wrap}
.sec-head h2{display:flex;align-items:center;gap:var(--s-3);font-size:var(--t-title1);line-height:var(--lh-title1);letter-spacing:-.025em;margin:0}
.sec-head p{margin:var(--s-2) 0 0;color:var(--text-2);font-size:var(--t-callout);max-width:var(--w-prose)}
.sec-head .btn-quiet{font-size:var(--t-callout)}
.cat{margin-top:var(--section-gap);scroll-margin-top:calc(var(--nav-h) + 80px)}
.cat[hidden]{display:none}
.empty{margin-top:var(--s-9);text-align:center;color:var(--text-2)}
.empty[hidden]{display:none}
.more-apps{margin-top:var(--section-gap);padding:var(--s-9) var(--s-6);border-radius:var(--r-stage);background:var(--band);border:1px solid var(--border-2);text-align:center}
.more-apps h2{font-size:var(--t-title1);margin:0 0 var(--s-3)}
.more-apps>p{max-width:var(--w-prose);margin:0 auto}
.icons-row{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--s-2) var(--s-4);margin:var(--s-6) 0 0;padding:0;list-style:none}
.icons-row li{margin:0}
.icons-row a{display:inline-flex;align-items:center;gap:var(--s-2);min-height:44px;padding:0 var(--s-3) 0 var(--s-1);border-radius:var(--radius-pill);color:var(--text);font-size:var(--t-callout);font-weight:500;background:var(--surface-raised);border:1px solid var(--border-2)}
.icons-row a:hover{text-decoration:none;border-color:var(--border)}
.icons-row img{width:36px;height:36px;border-radius:9px}
.tix-prose{max-width:var(--w-prose)}
.tix-prose p{font-size:var(--t-body);line-height:1.6;color:var(--text-2)}
.tix .faq-sec{margin-top:var(--section-gap)}
.tix .faq-sec h2{font-size:var(--t-title1);line-height:var(--lh-title1);letter-spacing:-.025em;margin:0 0 var(--s-5)}
.tix .faq{max-width:var(--w-prose);gap:0;border-top:1px solid var(--border-2)}
.tix .faq-item{border:0;border-bottom:1px solid var(--border-2);border-radius:0;padding:var(--s-5) 0;background:none}
.tix .faq-item h3{font-size:var(--t-headline)}
.tix-end{height:var(--section-gap)}
.ti-hero--cat .ti{display:grid;margin:0 auto var(--s-4)}
.cat-intro{margin-top:var(--section-gap)}

/* =============================== HOMEPAGE: Apps + Tools =============================== */
.twin{max-width:var(--w-page);margin:var(--s-9) auto 0;padding:0 22px}
.twin-head{text-align:center;margin-bottom:var(--s-6)}
.twin-head h2{font-size:var(--t-title1);line-height:var(--lh-title1);letter-spacing:-.025em;margin:0 0 var(--s-2)}
.twin-head p{margin:0 auto;max-width:var(--w-prose);color:var(--text-2)}
.twin-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-5)}
@media (max-width:900px){.twin-grid{grid-template-columns:1fr}}
.panel{display:flex;flex-direction:column;padding:var(--s-6);border-radius:var(--r-stage);background:var(--surface-raised);border:1px solid var(--border-2);box-shadow:var(--elev-2)}
.panel .eyebrow{margin-bottom:var(--s-2)}
.panel h3{font-size:var(--t-title2);line-height:var(--lh-title2);margin:0 0 var(--s-2)}
.panel>p{font-size:var(--t-callout);color:var(--text-2);margin:0 0 var(--s-5)}
.mini{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s-3);margin:0 0 var(--s-5);padding:0;list-style:none}
.mini li{margin:0}
.mini a{display:grid;justify-items:center;gap:var(--s-2);text-align:center;color:var(--text);font-size:var(--t-footnote);font-weight:500;line-height:1.25;padding:var(--s-2);border-radius:16px;min-height:44px}
.mini a:hover{text-decoration:none;background:var(--bg-2)}
.mini img{width:56px;height:56px}
.panel .foot{margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:var(--s-3);flex-wrap:wrap;padding-top:var(--s-4);border-top:1px solid var(--border-2);font-size:var(--t-footnote);color:var(--text-3)}
.featured-tools{max-width:var(--w-page);margin:var(--s-6) auto 0;padding:0 22px}
.featured-tools h3{font-size:var(--t-headline);margin:0 0 var(--s-4);color:var(--text)}
/* design review round 2 B3: homepage rhythm (112px desktop / 64px phones between sections) */
.twin + .featured-tools{margin-top:var(--section-gap)}
.ft-head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--s-4);flex-wrap:wrap;margin:0 0 var(--s-5)}
.ft-head h2{font-size:var(--t-title1);line-height:var(--lh-title1);letter-spacing:-.025em;margin:0}
.ft-head p{margin:var(--s-2) 0 0;color:var(--text-2)}
.ft-head .btn-quiet{font-size:var(--t-callout)}
.featured-tools ~ #studio,.featured-tools ~ main,.featured-tools ~ #blog{margin-top:var(--section-gap)}
#apps{scroll-margin-top:calc(var(--nav-h,52px) + 16px)}
/* B8 panel footers: primary button + secondary link */
.panel .foot .btn{min-height:44px;display:inline-flex;align-items:center}
.panel .foot .btn-quiet{font-size:var(--t-callout)}
/* S9 44px targets on the homepage and app pages (this file is loaded by both) */
.hero .hero-actions .btn{min-height:44px;display:inline-flex;align-items:center;box-sizing:border-box}
.hero-featured-badge-link{min-height:44px;display:inline-flex;align-items:center}
.featured-tools ~ main .app details>summary{min-height:44px;display:flex;align-items:center;cursor:pointer}

/* =============================== APP PAGE: "Try it free in your browser" =============================== */
.xlink{max-width:var(--w-page);margin:var(--s-6) auto;padding:0 22px}
.xlink .in{padding:var(--s-6);border-radius:var(--r-stage);background:var(--band);border:1px solid var(--border-2)}
.xlink h2{font-size:var(--t-title2);line-height:var(--lh-title2);margin:0 0 var(--s-2)}
.xlink .in>p{margin:0;color:var(--text-2);font-size:var(--t-callout)}
.xlink .cards{margin-top:var(--s-5)}
@media (max-width:734px){.xlink .in{padding:var(--s-5)}}
.visually-hidden{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.cards>li[hidden],.grid4>li[hidden]{display:none}
/* app pages and homepage: these blocks sit outside <main>; keep them full width */
.xlink,.twin,.featured-tools{width:100%;box-sizing:border-box}
@media (hover:none){.search kbd{display:none}.search input{padding-right:22px}}
