/**
 * components.css — base reset, typography, header/nav, footer, buttons,
 * cards, forms, breadcrumbs, TOC, empty states. Shared across every
 * template. Block/pattern-specific styles (scorecard, comparison table,
 * pros/cons, etc.) live in blocks.css.
 */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-font-smoothing:antialiased}
body{font-family:var(--ff-body);font-weight:var(--fw-regular);font-size:var(--fs-base);line-height:1.65;color:var(--clr-text);background:var(--clr-bg);overflow-x:hidden}
img,svg{max-width:100%;height:auto;display:block}
a{color:var(--clr-accent);text-decoration:underline;text-underline-offset:2px;transition:color var(--dur) var(--ease)}
a:hover{color:var(--clr-accent-bright)}
h1,h2,h3,h4,h5,h6{font-family:var(--ff-heading);font-weight:var(--fw-semibold);line-height:1.15;color:var(--clr-ink)}
h1{font-size:var(--fs-5xl);letter-spacing:-0.02em}
h2{font-size:var(--fs-4xl);letter-spacing:-0.01em}
h3{font-size:var(--fs-3xl)}
h4{font-size:var(--fs-2xl)}
h5{font-size:var(--fs-xl)}
p{margin-bottom:var(--sp-4)}
ul,ol{padding-left:var(--sp-6);margin-bottom:var(--sp-4)}
li{margin-bottom:var(--sp-2)}
table{max-width:100%}

/* ── Layout helpers ───────────────────────────────────────────────── */
.wrap{max-width:var(--max-w);margin:0 auto;padding:0 var(--gutter)}
.wrap--narrow{max-width:var(--max-w-narrow)}
.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--clr-border);border-radius:var(--r-lg);background:var(--clr-bg)}

/* ── Focus visibility (WCAG 1.4.11 non-text contrast) ────────────────
   --clr-focus (#1B6FB5) is distinct from both the copper accent/hover
   family and the plum ink, so a keyboard focus ring never reads as a
   hover/active state. 4.6:1 on white, 4.4:1 on paper, 3.3:1 on ink —
   clears the >=3:1 bar in every context it appears. */
a:focus,button:focus,input:focus,textarea:focus,select:focus,summary:focus,
[tabindex]:focus{outline:2px solid var(--clr-focus);outline-offset:2px}
a:focus:not(:focus-visible),button:focus:not(:focus-visible),
input:focus:not(:focus-visible),textarea:focus:not(:focus-visible),
select:focus:not(:focus-visible),summary:focus:not(:focus-visible),
[tabindex]:focus:not(:focus-visible){outline:none}
a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible,
select:focus-visible,summary:focus-visible,[tabindex]:focus-visible{
    outline:2px solid var(--clr-focus);outline-offset:2px;border-radius:var(--r-sm)
}

/* Skip link — visually hidden until focused. */
.skip-link{position:absolute;top:-100px;left:var(--sp-4);z-index:1000;background:var(--clr-ink);color:var(--clr-bg);padding:var(--sp-3) var(--sp-5);border-radius:0 0 var(--r-md) var(--r-md);font-weight:var(--fw-semibold);font-size:var(--fs-sm);text-decoration:none;transition:top var(--dur) var(--ease)}
.skip-link:focus{top:0}

/* Visually-hidden accessible text (not position:absolute — a descendant of
   a <td> can badly miscompute an absolutely-positioned static position in
   some engines; a static 1px box with overflow:hidden avoids that class of
   bug entirely). */
.sr-only{position:static;display:inline-block;width:1px;height:1px;padding:0;margin:0;overflow:hidden;border:0}

/* ── Buttons ──────────────────────────────────────────────────────── */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);min-height:44px;padding:10px 24px;border:1.5px solid transparent;border-radius:var(--r-sm);font-family:var(--ff-body);font-weight:var(--fw-semibold);font-size:var(--fs-sm);cursor:pointer;transition:all var(--dur) var(--ease);text-decoration:none;line-height:1.4}
.btn--accent{background:var(--clr-accent);color:var(--clr-bg);border-color:var(--clr-accent)}
.btn--accent:hover{background:var(--clr-accent-bright);border-color:var(--clr-accent-bright);color:var(--clr-bg)}
.btn--ghost{background:transparent;border-color:var(--clr-border-strong);color:var(--clr-ink)}
.btn--ghost:hover{border-color:var(--clr-accent);color:var(--clr-accent)}
.btn--lg{padding:14px 30px;font-size:var(--fs-base)}

/* ── Header ───────────────────────────────────────────────────────── */
.site-header{position:sticky;top:0;z-index:100;background:rgba(255,255,255,0.94);backdrop-filter:blur(8px);border-bottom:2px solid var(--clr-ink)}
.site-header__inner{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);height:76px;position:relative}
.site-brand{display:flex;align-items:center;gap:var(--sp-2);text-decoration:none}
.site-brand img{max-height:44px;width:auto}
.site-brand__name{font-family:var(--ff-heading);font-weight:var(--fw-semibold);font-size:var(--fs-xl);color:var(--clr-ink);letter-spacing:-0.01em}
.site-brand:hover .site-brand__name{color:var(--clr-ink)}
.primary-nav ul{display:flex;list-style:none;gap:var(--sp-1);padding:0;margin:0}
.primary-nav a{display:flex;align-items:center;min-height:44px;padding:var(--sp-2) var(--sp-3);font-size:var(--fs-sm);font-weight:var(--fw-medium);color:var(--clr-text);text-decoration:none;border-radius:var(--r-sm);transition:all var(--dur)}
.primary-nav a:hover{color:var(--clr-accent);background:var(--clr-surface-alt)}
.primary-nav a[aria-current="page"]{color:var(--clr-accent);font-weight:var(--fw-semibold)}
.nav-toggle{display:none;align-items:center;justify-content:center;min-width:44px;min-height:44px;background:none;border:1.5px solid var(--clr-border-strong);border-radius:var(--r-sm);color:var(--clr-ink);padding:var(--sp-2);cursor:pointer}
.nav-toggle svg{width:22px;height:22px}

/* ── Footer ───────────────────────────────────────────────────────── */
.site-footer{background:var(--clr-surface-alt);border-top:2px solid var(--clr-ink);padding:var(--sp-16) 0 var(--sp-6)}
.site-footer__grid{display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr;gap:var(--sp-8);margin-bottom:var(--sp-12)}
.site-footer__desc{font-size:var(--fs-sm);color:var(--clr-muted);margin-top:var(--sp-3);max-width:280px}
.site-footer__heading{font-family:var(--ff-heading);font-size:var(--fs-xs);font-weight:var(--fw-semibold);text-transform:uppercase;letter-spacing:0.08em;color:var(--clr-ink);margin-bottom:var(--sp-4);border-bottom:2px solid var(--clr-accent);padding-bottom:var(--sp-2);display:inline-block}
.site-footer__links{list-style:none;padding:0;margin:0}
.site-footer__links li{margin-bottom:var(--sp-2)}
.site-footer__links a{font-size:var(--fs-sm);color:var(--clr-muted);text-decoration:none}
.site-footer__links a:hover{color:var(--clr-accent);text-decoration:underline}
.site-footer__bottom{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--sp-3);padding-top:var(--sp-6);border-top:1px solid var(--clr-border);font-size:var(--fs-xs);color:var(--clr-dim)}

/* ── Breadcrumbs ──────────────────────────────────────────────────── */
.breadcrumbs{font-size:var(--fs-xs);color:var(--clr-dim);margin-bottom:var(--sp-6);font-family:var(--ff-mono)}
.breadcrumbs a{color:var(--clr-muted);text-decoration:none}
.breadcrumbs a:hover{color:var(--clr-accent)}
.breadcrumbs span[aria-current]{color:var(--clr-ink);font-weight:var(--fw-medium)}

/* ── Generic page hero (masthead feel) ───────────────────────────── */
.page-hero{padding:var(--sp-16) 0 var(--sp-10);border-bottom:1px solid var(--clr-border)}
.page-eyebrow{display:inline-flex;align-items:center;gap:var(--sp-2);font-family:var(--ff-mono);font-size:var(--fs-xs);font-weight:var(--fw-semibold);text-transform:uppercase;letter-spacing:0.1em;color:var(--clr-accent);margin-bottom:var(--sp-3)}
.page-lead{font-size:var(--fs-lg);color:var(--clr-muted);max-width:680px;margin-top:var(--sp-3)}
.page-note{font-family:var(--ff-mono);font-size:var(--fs-xs);color:var(--clr-dim);margin-top:var(--sp-4)}

/* ── Table of contents ────────────────────────────────────────────── */
.toc{background:var(--clr-surface-alt);border:1px solid var(--clr-border);border-left:4px solid var(--clr-accent);border-radius:var(--r-md);padding:var(--sp-5) var(--sp-6);margin:var(--sp-8) 0}
.toc__title{font-family:var(--ff-mono);font-size:var(--fs-xs);font-weight:var(--fw-semibold);text-transform:uppercase;letter-spacing:0.08em;color:var(--clr-ink);margin-bottom:var(--sp-3)}
.toc ol{margin:0;padding-left:var(--sp-5)}
.toc li{margin-bottom:var(--sp-1);font-size:var(--fs-sm)}
.toc a{color:var(--clr-muted);text-decoration:none}
.toc a:hover{color:var(--clr-accent)}

/* ── Generic body / entry content ────────────────────────────────── */
.page-body{padding:var(--sp-16) 0}
.entry h2{margin-top:var(--sp-12);border-top:1px solid var(--clr-border);padding-top:var(--sp-8)}
.entry h2:first-child{border-top:0;padding-top:0;margin-top:0}
.entry p,.entry li{color:var(--clr-text)}
.entry a{text-decoration:underline}

/* ── Single-post featured image ──────────────────────────────────── */
.entry-thumb{margin:0 0 var(--sp-8)}
.entry-thumb__img{display:block;width:100%;max-width:100%;height:auto;border-radius:var(--r-md)}

/* ── Card grid (blog / reviews index) ─────────────────────────────── */
.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--sp-6)}
.post-card{background:var(--clr-bg);border:1px solid var(--clr-border);border-radius:var(--r-md);padding:var(--sp-6);box-shadow:var(--shadow-card);transition:all var(--dur) var(--ease)}
.post-card:hover{border-color:var(--clr-accent);box-shadow:var(--shadow-raised)}
.post-card__thumb{display:block;margin:calc(var(--sp-6) * -1) calc(var(--sp-6) * -1) var(--sp-4);border-radius:var(--r-md) var(--r-md) 0 0;overflow:hidden;background:var(--clr-surface-alt)}
.post-card__img{display:block;width:100%;max-width:100%;height:auto;aspect-ratio:16/9;object-fit:cover}
.post-card__eyebrow{font-family:var(--ff-mono);font-size:var(--fs-xs);font-weight:var(--fw-semibold);text-transform:uppercase;letter-spacing:0.08em;color:var(--clr-accent);display:block;margin-bottom:var(--sp-2)}
.post-card__title{font-size:var(--fs-xl);margin-bottom:var(--sp-2)}
.post-card__title a{color:var(--clr-ink);text-decoration:none}
.post-card__title a:hover{color:var(--clr-accent)}
.post-card__desc{font-size:var(--fs-sm);color:var(--clr-muted);margin-bottom:var(--sp-3)}
.post-card__meta{font-size:var(--fs-xs);color:var(--clr-dim)}

/* ── Byline ───────────────────────────────────────────────────────── */
.byline{font-size:var(--fs-sm);color:var(--clr-muted);margin-bottom:var(--sp-6)}
.byline a{color:var(--clr-muted)}
.byline a:hover{color:var(--clr-accent)}

/* ── CTA band (guarded, links only render once the target page exists) ── */
.cta-band{background:var(--clr-ink);color:var(--clr-paper);border-radius:var(--r-lg);padding:var(--sp-10) var(--sp-8);margin:var(--sp-16) 0;text-align:center}
.cta-band h2{color:var(--clr-bg);margin:0 0 var(--sp-3)}
.cta-band p{color:#D9CBE0;margin-bottom:var(--sp-6)}
.cta-band__actions{display:flex;gap:var(--sp-3);justify-content:center;flex-wrap:wrap}

/* ── Empty states ─────────────────────────────────────────────────── */
.empty-state{text-align:center;padding:var(--sp-16) var(--sp-4);color:var(--clr-muted);border:1px dashed var(--clr-border-strong);border-radius:var(--r-lg)}
.empty-state h2{margin-bottom:var(--sp-3);font-size:var(--fs-2xl)}
.empty-state p{margin-bottom:var(--sp-6);max-width:480px;margin-left:auto;margin-right:auto}
.empty-state__actions{display:flex;gap:var(--sp-3);justify-content:center;flex-wrap:wrap;margin-bottom:var(--sp-6)}
.empty-state__search{max-width:420px;margin:0 auto;display:flex;gap:var(--sp-2)}
.empty-state__search input[type="search"]{flex:1;padding:10px 14px;min-height:44px;background:var(--clr-bg);border:1.5px solid var(--clr-border-strong);border-radius:var(--r-sm);color:var(--clr-text);font-family:var(--ff-body);font-size:var(--fs-sm)}

/* ── Pagination ───────────────────────────────────────────────────── */
.pagination{margin-top:var(--sp-10)}
.pagination ul{display:flex;flex-wrap:wrap;gap:var(--sp-2);list-style:none;padding:0}
.pagination a,.pagination span{display:inline-flex;align-items:center;justify-content:center;min-width:40px;min-height:40px;padding:0 var(--sp-2);border:1px solid var(--clr-border);border-radius:var(--r-sm);font-size:var(--fs-sm);text-decoration:none;color:var(--clr-text)}
.pagination a:hover{border-color:var(--clr-accent);color:var(--clr-accent)}
.pagination .current{background:var(--clr-ink);color:var(--clr-bg);border-color:var(--clr-ink)}

@media (max-width:860px){
    :root{--fs-5xl:2.25rem;--fs-4xl:1.875rem}
    .nav-toggle{display:inline-flex}
    .primary-nav{display:none;position:absolute;top:100%;left:0;right:0;background:var(--clr-bg);border-bottom:2px solid var(--clr-ink);padding:var(--sp-4) var(--gutter);box-shadow:var(--shadow-raised)}
    .primary-nav.is-open{display:block}
    .primary-nav ul{flex-direction:column;gap:0}
    .site-footer__grid{grid-template-columns:1fr 1fr}
    .site-footer__bottom{flex-direction:column;align-items:flex-start}
}
@media (max-width:520px){
    .site-footer__grid{grid-template-columns:1fr}
    .card-grid{grid-template-columns:1fr}
}
