/* =============================================================================
   Design System Tactical Hybrid 2.0 · BASE (tipografia, layout, utilitários) — R02-B
   TUDO escopado: reset só dentro de .ac-ds; classes com prefixo ac-. Nenhum seletor global (button, input, a, h1…).
   Fonte: core.css do protótipo R02-A homologado.
   ============================================================================= */
.ac-ds, .ac-ds *, .ac-ds *::before, .ac-ds *::after { box-sizing: border-box; }
.ac-ds { background: var(--ac-bg); color: var(--ac-text); font: var(--ac-fw-regular) var(--ac-fs-md)/var(--ac-lh-body) var(--ac-font); -webkit-font-smoothing: antialiased; overflow-x: clip; }
.ac-ds img, .ac-ds svg { display: block; max-width: 100%; } .ac-ds img { height: auto; }
.ac-ds :where(a) { color: inherit; text-underline-offset: .22em; text-decoration-thickness: 1px; }
.ac-ds :where(button, input, select, textarea) { font: inherit; color: inherit; } .ac-ds :where(button) { cursor: pointer; }
.ac-ds :where(h1, h2, h3, h4, h5) { color: inherit; margin: 0; line-height: var(--ac-lh-heading); letter-spacing: var(--ac-ls-heading); font-weight: var(--ac-fw-semibold); } .ac-ds :where(p, ul, ol, figure) { margin: 0; } .ac-ds :where(ul, ol) { padding: 0; }
.ac-ds :focus { outline: none; } .ac-ds :focus-visible { box-shadow: var(--ac-focus-light); border-radius: var(--ac-r-1); }
.ac-ds .ac-dark :focus-visible, .ac-ds .ac-dark:focus-visible, .ac-ds .ac-olive :focus-visible, .ac-ds .ac-olive:focus-visible { box-shadow: var(--ac-focus-dark); }
.ac-ds ::selection { background: var(--ac-sand-300); color: var(--ac-graphite-900); }
.ac-ds [hidden] { display: none; }

/* ---- Layout ---- */
.ac-wrap { width: 100%; max-width: var(--ac-container); margin-inline: auto; padding-inline: var(--ac-gutter); }
.ac-section { padding-block: var(--ac-sp-9); position: relative; } .ac-section--tight { padding-block: var(--ac-sp-7); }
.ac-grid { display: grid; gap: var(--ac-sp-4); } .ac-grid > * { min-width: 0; }
.ac-stack { display: grid; gap: var(--ac-sp-4); } .ac-row { display: flex; flex-wrap: wrap; gap: var(--ac-sp-3); align-items: center; }
@media (min-width: 700px) { .ac-grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .ac-grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .ac-grid--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
@media (max-width: 699.98px) { .ac-section { padding-block: 3.5rem; } }

/* ---- Superfícies de contexto ---- */
.ac-dark { background: var(--ac-bg-dark); color: var(--ac-text-inverse); } .ac-olive { background: var(--ac-bg-olive); color: var(--ac-text-inverse); }
.ac-sr-only { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }

/* ---- Tipografia ---- */
.ac-kicker { display: inline-flex; align-items: center; gap: .6em; font: var(--ac-fw-medium) var(--ac-fs-mono)/1.2 var(--ac-font-mono); letter-spacing: var(--ac-ls-mono); text-transform: uppercase; color: var(--ac-accent-strong); }
.ac-kicker::before { content: ""; width: 1.75rem; height: 1px; background: currentColor; opacity: .7; }
.ac-kicker--plain::before { display: none; }
.ac-dark .ac-kicker, .ac-olive .ac-kicker { color: var(--ac-accent); }
.ac-idx { font: var(--ac-fw-medium) var(--ac-fs-mono)/1 var(--ac-font-mono); letter-spacing: .12em; color: var(--ac-accent-strong); } .ac-dark .ac-idx, .ac-olive .ac-idx { color: var(--ac-accent); }
.ac-display { overflow-wrap: break-word; hyphens: auto; font-size: var(--ac-fs-4xl); line-height: var(--ac-lh-display); font-weight: var(--ac-fw-black); letter-spacing: var(--ac-ls-display); text-transform: uppercase; }
.ac-display .ac-thin { font-weight: var(--ac-fw-thin); letter-spacing: -.02em; } .ac-display .ac-accent { color: var(--ac-accent); }
.ac-h1 { font-size: var(--ac-fs-3xl); line-height: 1; font-weight: var(--ac-fw-bold); letter-spacing: -.03em; } .ac-h1 .ac-thin, .ac-h2 .ac-thin { font-weight: 250; }
.ac-h2 { font-size: var(--ac-fs-2xl); line-height: 1.05; font-weight: 650; letter-spacing: -.025em; }
.ac-h3 { font-size: var(--ac-fs-xl); font-weight: var(--ac-fw-semibold); }
.ac-card-title { font-size: var(--ac-fs-md); font-weight: var(--ac-fw-medium); line-height: 1.3; letter-spacing: -.005em; }
.ac-lead { font-size: var(--ac-fs-lg); line-height: var(--ac-lh-lead); color: var(--ac-text-2); max-width: 58ch; } .ac-dark .ac-lead, .ac-olive .ac-lead { color: var(--ac-text-inverse-2); }
.ac-caption { font-size: var(--ac-fs-xs); color: var(--ac-text-muted); } .ac-muted { color: var(--ac-text-muted); } .ac-dark .ac-muted, .ac-olive .ac-muted { color: var(--ac-text-inverse-2); }
.ac-mono { font-family: var(--ac-font-mono); font-size: .9em; letter-spacing: .02em; } .ac-tab-num { font-variant-numeric: tabular-nums; }
.ac-label-tech { font: var(--ac-fw-medium) var(--ac-fs-mono)/1.2 var(--ac-font-mono); letter-spacing: .12em; text-transform: uppercase; color: var(--ac-text-muted); }
.ac-ghost-word { font-size: var(--ac-fs-mega); font-weight: var(--ac-fw-black); line-height: .8; letter-spacing: -.05em; text-transform: uppercase; color: transparent; -webkit-text-stroke: 1px rgb(245 243 238 / .12); white-space: nowrap; user-select: none; }

/* ---- Linhas de precisão ---- */
.ac-rule { height: 1px; background: var(--ac-border); position: relative; } .ac-rule::after { content: ""; position: absolute; left: 0; top: -2px; width: 5px; height: 5px; background: var(--ac-sand-600); }
.ac-dark .ac-rule, .ac-olive .ac-rule { background: var(--ac-border-dark); }
.ac-corner { position: relative; } .ac-corner::before, .ac-corner::after { content: ""; position: absolute; width: 16px; height: 16px; border: 1.5px solid var(--ac-accent); pointer-events: none; z-index: 2; }
.ac-corner::before { left: 10px; top: 10px; border-right: 0; border-bottom: 0; } .ac-corner::after { right: 10px; bottom: 10px; border-left: 0; border-top: 0; }

@media (prefers-reduced-motion: reduce) { .ac-ds *, .ac-ds *::before, .ac-ds *::after { animation-duration: .01ms; animation-iteration-count: 1; transition-duration: 0s; transition-delay: 0s; scroll-behavior: auto; } }

/* Os seletores de reset usam :where() (especificidade 0) para nunca vencer as classes ac-* dos componentes. */
.ac-dark .ac-label-tech, .ac-olive .ac-label-tech { color: var(--ac-text-inverse-2); }
