body.tools-page .dns-copy{min-width:44px;min-height:44px}
.tool-table-scroll{width:100%;max-width:100%;overflow-x:auto}
body.tools-page .tools-result-table{display:table!important;width:100%!important;max-width:100%;border-collapse:collapse;table-layout:auto}
body.tools-page .tools-result-table tbody{display:table-row-group!important;width:auto!important}
body.tools-page .tools-result-table tr{display:table-row!important;width:auto!important;padding:0!important}
body.tools-page .tools-result-table th,body.tools-page .tools-result-table td{display:table-cell!important;grid-template-columns:none!important;width:auto!important;padding:9px 10px!important;vertical-align:top!important;white-space:normal!important;overflow-wrap:anywhere;word-break:normal;text-align:left!important;border-bottom:1px solid #e1e9ee!important}
body.tools-page .tools-result-table td:before{display:none!important}
body.tools-page .tools-result-table thead{display:table-header-group!important;position:static!important;width:auto!important;height:auto!important;clip:auto!important;overflow:visible!important}
body.tools-page .tools-result-table td code,body.tools-page .tools-result-table td a{white-space:normal;overflow-wrap:anywhere}
body.tools-page .tool-key-value-table{table-layout:fixed!important;min-width:0!important}
body.tools-page .tool-key-value-table th{width:35%!important;background:#f1f6fa!important;color:#173a53!important}
body.tools-page .tool-key-value-table td{width:65%!important}
@media(max-width:767px){body.tools-page .tool-key-value-table th,body.tools-page .tool-key-value-table td{font-size:13px;line-height:1.45;padding:8px!important}body.tools-page .seo-output>.panel-heading{display:flex;flex-wrap:wrap;align-items:center;gap:10px}body.tools-page .seo-output pre{white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px}}
/* Keep label/value tables compact and readable over page-specific legacy rules. */
body.tools-page table.tool-key-value-table>tbody>tr>th,
body.tools-page.ip-tracker-page .tracker-result table>tbody>tr>th{width:32%!important;background:#eef5f9!important;color:#173a53!important;text-transform:none!important;letter-spacing:0!important;padding:9px 10px!important}
body.tools-page table.tool-key-value-table>tbody>tr>td,
body.tools-page.ip-tracker-page .tracker-result table>tbody>tr>td{width:68%!important;padding:9px 10px!important;color:#173a53!important}
body.tools-page.ip-tracker-page .tracker-result table{table-layout:fixed!important;min-width:0!important}
/* Match text contrast to the actual header, row and control backgrounds. */
body.tools-page main table.tools-result-table>thead>tr>th{background:#0b3553!important;color:#fff!important;line-height:1.45;font-weight:700}
body.tools-page main table.tools-result-table>thead>tr>th a{color:#fff!important}
body.tools-page main table.tools-result-table>tbody>tr>td{color:#173a53!important}
body.tools-page main table.tool-key-value-table>tbody>tr>th{background:#eef5f9!important;color:#173a53!important}
body.tools-page.ip-tracker-page main .panel a:not(.btn):not(.zl-share-result-btn),
body.tools-page.ip-tracker-page main .tracker-related a,
body.tools-page.ip-tracker-page main .tracker-workflows a,
body.tools-page.ip-tracker-page main .tools-side-card a:not(.btn){color:#076b65!important}
body.tools-page.ip-tracker-page main .btn-primary,
body.tools-page main .tools-request-btn,
body.tools-page main .btn-browse-all{background:#087f78!important;border-color:#087f78!important;color:#fff!important}
body.tools-page main .btn-primary:focus-visible,
body.tools-page main .btn-browse-all:focus-visible{outline:3px solid #0b3553;outline-offset:3px}
.gateway-primary[aria-disabled=true]{color:#455b6b!important;background:#e8eef2!important}
body.tools-page.ip-tracker-page main .tracker-intro a,
body.tools-page.ip-tracker-page main .tracker-use-cases a{color:#076b65!important}
body.tools-page.ip-tracker-page main .tools-side-card .tools-side-list li.active>a{background:#0f2e52!important;color:#fff!important}

body.tools-page main button{min-height:44px!important;min-width:44px!important}
.tool-table-scroll:focus-visible{outline:3px solid #087f78;outline-offset:2px}
body.tools-page main .zl-share-inline{flex-wrap:wrap;gap:10px}

/* --- Mobile tools audit fixes (2026-10-17) --- */
/* Every cell gets the same inset as its header so columns line up and text never touches the card edge. */
body.tools-page main table th,body.tools-page main table td{padding-left:12px!important;padding-right:12px!important}
/* Short codes and addresses must not split mid-word ("google.c/om", "AAA/A", "HO/P"). */
body.tools-page main table thead th{word-break:keep-all!important;overflow-wrap:normal!important;hyphens:none}
body.tools-page main table .badge,body.tools-page main table .label,body.tools-page main table .dns-type{white-space:nowrap}
@media(max-width:767px){
  /* Multi-column result tables become labelled cards instead of a 560px table hidden behind a scrollbar. */
  body.tools-page main table.tool-stack-table{display:block!important;min-width:0!important;width:100%!important}
  body.tools-page main table.tool-stack-table thead{position:absolute!important;width:1px!important;height:1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important}
  body.tools-page main table.tool-stack-table tbody{display:block!important}
  body.tools-page main table.tool-stack-table tr{display:block!important;padding:10px 12px!important;border-bottom:1px solid #e1e9ee}
  body.tools-page main table.tool-stack-table tr:nth-child(even){background:#f8fbfd}
  body.tools-page main table.tool-stack-table th,body.tools-page main table.tool-stack-table td{display:grid!important;grid-template-columns:minmax(88px,34%) minmax(0,1fr)!important;gap:10px;align-items:baseline;width:100%!important;padding:5px 0!important;border:0!important;background:transparent!important;overflow-wrap:anywhere;word-break:normal}
  body.tools-page main table.tool-stack-table td:before{display:block!important;content:attr(data-label);color:#4f6575;font-size:11px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;padding-top:2px}
  body.tools-page main table.tool-stack-table td[data-label=""]:before,body.tools-page main table.tool-stack-table td:not([data-label]):before{display:none!important}
  body.tools-page .tool-table-scroll:has(.tool-stack-table){overflow-x:visible}
  /* Raw command output: smaller mono text so one reply fits per line. */
  body.tools-page main pre{font-size:11px!important;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere}
}
/* Helper/meta text was ~#7b8b99 on light grey (3.8:1). */
body.tools-page:not(.speedtest-page) main label span,body.tools-page:not(.speedtest-page) main .seo-note,body.tools-page .port-results-head span,body.tools-page:not(.speedtest-page) main .help-block,body.tools-page:not(.speedtest-page) main .form-text{color:#4f6575!important}
body.tools-page .ip-result-head{display:flex;flex-direction:column;gap:2px;padding:14px 14px 4px}
body.tools-page .ip-result-kicker{color:#00766d;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}
body.tools-page .ip-result-target{color:#0b2d49;font-size:20px;font-weight:800;overflow-wrap:anywhere}
body.tools-page main button[aria-busy=true]{opacity:.85;cursor:progress}
body.tools-page main .zl-tool-busy{margin:8px 0 0;color:#4f6575;font-size:13px}
body.tools-page main .zl-tool-busy:before{content:"";display:inline-block;width:12px;height:12px;margin-right:8px;vertical-align:-1px;border:2px solid #c9d8e2;border-top-color:#00766d;border-radius:50%;animation:zlspin .8s linear infinite}
@keyframes zlspin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){body.tools-page main .zl-tool-busy:before{animation:none}}
@media(max-width:767px){body.tools-page main table.tool-stack-table td>.status-pill,body.tools-page main table.tool-stack-table td>.badge,body.tools-page main table.tool-stack-table td>.dns-type{justify-self:start}}
/* #087f78 on mint tints was 4.4:1; #00665e passes. */ body.tools-routers-page main b,body.tools-routers-page main code,body.tools-page main [class*=router] b,body.tools-page main [class*=router] code{color:#00665e!important}
/* Low-specificity (:where) so any card that sets its own text colour, e.g. dark score cards, wins. */ :where(body.tools-page:not(.speedtest-page) main) :where(small:not(.status-pill):not([class*=badge]),[class*=summary-head] span,[class*=results-head] span){color:#4f6575!important}
/* Beat the legacy mobile "padding:7px 0" on row labels so key/value tables keep their inset. */ body.tools-page main table.tool-key-value-table>tbody>tr>th[scope=row],body.tools-page main table.tool-key-value-table>tbody>tr>td{padding-left:12px!important;padding-right:12px!important}
/* Result tables that do not fit their container (set by tools-experience.js) use the labelled-card layout at any width. */
@media all{
  body.tools-page main table.tool-stack-fit{display:block!important;min-width:0!important;width:100%!important}
  body.tools-page main table.tool-stack-fit thead{position:absolute!important;width:1px!important;height:1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important}
  body.tools-page main table.tool-stack-fit tbody{display:grid!important;grid-template-columns:1fr 1fr}
  body.tools-page main table.tool-stack-fit tr{display:block!important;padding:10px 12px!important;border-bottom:1px solid #e1e9ee;border-right:1px solid #e1e9ee}
  body.tools-page main table.tool-stack-fit th,body.tools-page main table.tool-stack-fit td{display:grid!important;grid-template-columns:minmax(78px,36%) minmax(0,1fr)!important;gap:8px;width:100%!important;padding:4px 0!important;border:0!important;background:transparent!important;overflow-wrap:anywhere;word-break:normal}
  body.tools-page main table.tool-stack-fit td:before{display:block!important;content:attr(data-label);color:#4f6575;font-size:11px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;padding-top:2px}
  body.tools-page main table.tool-stack-fit td[data-label=""]:before,body.tools-page main table.tool-stack-fit td:not([data-label]):before{display:none!important}
  body.tools-page .tool-table-scroll:has(.tool-stack-fit){overflow-x:visible}
}
/* Card mode: badges, pills and buttons keep their natural width. */ body.tools-page main table.tool-stack-table td>:is(span,button,a.btn,.badge,.status-pill),body.tools-page main table.tool-stack-fit td>:is(span,button,a.btn,.badge,.status-pill){justify-self:start;width:auto!important}
/* DNS: the record value is what people came for; it was 12px next to 16px labels. */ body.tools-dns-page main td.dns-value{font-size:14px!important;line-height:1.5}
/* Status pills never wrap ("Pas/s"). */ body.tools-page main .status-pill{white-space:nowrap!important;word-break:keep-all!important;overflow-wrap:normal!important}
/* The grey helper-text rule above must not reach small text on dark score cards. */ body.tools-page main .web-score-card small,body.tools-page main .web-score small{color:#bfe9e5!important}
/* Card grids: one column on phones (two cramped the cards and overflowed), and let cards shrink. */
body.tools-page main table:is(.tool-stack-fit,.tool-stack-table) tr{min-width:0}
@media(max-width:767px){body.tools-page main table:is(.tool-stack-fit,.tool-stack-wide) tbody{grid-template-columns:minmax(0,1fr)!important}}
/* Section labels on light cards: the shared #138b80 teal was ~4.2:1. */
:where(body.tools-page .tools-content-col) :where([class*="-kicker"],[class$="-head"] > span,[class$="-head"] > div > span,[class*="-eyebrow"]){color:#00665e!important}
/* DNS record-type labels in the guide (#0b9186, ~3.7:1). */
body.tools-dns-page .tools-content-col article > strong{color:#00665e!important}
/* CCTV workflow step numbers (#087f78 on mint, 4.4:1). */
body.tools-cctv-page .cctv-steps b{color:#00665e!important}
/* Router directory: keep IP addresses on one line. */
body.tools-routers-page .router-directory td a{white-space:nowrap}
/* Stacked tables keep a visually hidden header row that still counted toward scroll width: clip it. */
@media(max-width:767px){body.tools-page main :is(.table-responsive,.tool-table-scroll):has(> table:is(.tool-stack-table,.tool-stack-fit)),body.tools-page main :is(.table-responsive,.tool-table-scroll):has(> .tool-table-scroll > table:is(.tool-stack-table,.tool-stack-fit)){overflow-x:hidden!important}}
/* Related-tool card descriptions (router/CCTV pages set their own lighter grey). */
body.tools-page main :is(.router-tool-links,.cctv-related-grid,.network-related-grid,.port-related-grid) small{color:#4f6575!important}
