/* Generated by tools/sync_public_hub_ui.mjs from ads-worker/public/shared.css, every selector under .adt (the ad tracker page's wrapper) so nothing leaks into another page; the tracker's shell rules are dropped (the layout and the site's tokens supply them). Do not edit. */

.adt * { box-sizing:border-box; }
/* [hidden] must always win: button.more{display:block} below (equal
   specificity to the UA default [hidden]{display:none}, author sheet wins by
   source order) was leaving #advMore/#adMore visible even once app.js set
   .hidden = true on an exhausted or empty list -- the same class of bug as
   join-and-site-11 elsewhere on the hub. */
.adt [hidden] { display:none !important; }

.adt h2 { font-size:13px; text-transform:uppercase; letter-spacing:1.2px;
     color:var(--gold); margin:34px 0 12px; scroll-margin-top:12px; }
.adt .lede { color:var(--muted); font-size:13.5px; max-width:80ch; margin:0 0 14px; }
.adt .lede b { color:var(--text); }
.adt .panel { background:var(--panel); border:1px solid var(--border);
         border-radius:8px; padding:16px 18px; }
.adt .grid { display:grid; gap:14px;
        grid-template-columns:repeat(auto-fit, minmax(190px, 1fr)); }
.adt .vh { position:absolute !important; width:1px; height:1px; overflow:hidden;
      clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap; }

/* ---- the freshness and review strip at the top ------------------------- */
.adt .status { background:var(--panel); border:1px solid var(--border);
          border-left:4px solid var(--pro); border-radius:8px;
          padding:12px 16px; margin:0 0 16px; font-size:13px; }
.adt .status.warn { border-left-color:var(--gold); }
.adt .status p { margin:0 0 7px; color:var(--muted); }
.adt .status p:last-child { margin-bottom:0; }
.adt .status b { color:var(--text); }
.adt .status .chips { display:flex; flex-wrap:wrap; gap:6px; }
.adt .chip { font-size:11.5px; border:1px solid var(--border-strong); border-radius:12px;
        padding:2px 9px; color:var(--muted); white-space:nowrap; }
.adt .chip.ok { border-color:var(--pro); }
.adt .chip.warn { border-color:var(--gold); color:var(--gold); }
.adt .chip.bad { border-color:var(--anti); color:var(--anti-text); }
.adt .chip b { color:inherit; }
.adt .status .gate { color:var(--text); }

/* ---- headline figures, drawn like the hub's database cards ------------- */
.adt .stat { background:var(--panel); border:1px solid var(--border);
        border-top:3px solid var(--accent, var(--section));
        border-radius:5px; padding:13px 15px 12px; }
.adt .stat .k { color:var(--faint); font-size:10.5px; text-transform:uppercase;
           letter-spacing:1px; margin-bottom:7px; }
.adt .stat .v { font:700 21px/1.1 Consolas, ui-monospace, monospace;
           color:var(--accent, var(--text)); font-variant-numeric:tabular-nums; }
.adt .stat .n { color:var(--muted); font-size:12px; margin-top:6px; }

.adt nav.onpage { display:flex; flex-wrap:wrap; gap:4px 16px; margin:20px 0 0;
             font-size:12.5px; }
.adt nav.onpage a { color:var(--blue); min-height:24px; display:inline-flex;
               align-items:center; }

/* ---- weekly chart ------------------------------------------------------ */
.adt figure.chart { margin:0; }
.adt .chart svg { display:block; width:100%; height:auto; }
.adt .chart .bar26 { fill:var(--section); }
.adt .chart .line24 { fill:none; stroke:var(--muted); stroke-width:1.6;
                 stroke-dasharray:4 3; }
.adt .chart .grid-y { stroke:var(--border); stroke-width:1; }
/* the weekly chart's hover card: one zone per week over the whole plot */
.adt #chart { position:relative; }
.adt .chart .hit { fill:transparent; }
.adt .chart .hover-band { fill:var(--text); opacity:.07; pointer-events:none; }
.adt #chart .tc-tip.below { position:static; max-width:none; margin-top:6px; box-shadow:none; }
.adt .chart .mark { stroke:var(--faint); stroke-width:1; stroke-dasharray:2 3; }
.adt .chart text { fill:var(--faint); font:11px "Segoe UI", system-ui, sans-serif; }
.adt .chart .legend { display:flex; flex-wrap:wrap; gap:6px 18px; margin:8px 0 0;
                 font-size:12px; color:var(--muted); }
.adt .chart .key { display:inline-block; width:14px; height:9px; margin-right:6px;
              vertical-align:middle; }
.adt .chart .key.k26 { background:var(--section); }
.adt .chart .key.k24 { border-top:2px dashed var(--muted); height:0; width:18px; }
/* the two newest weeks, still filling in: hatched and dashed-outlined (not colour alone), same hue */
.adt .chart .bar26.late { fill: url(#barLate); stroke: var(--section); stroke-width: 1.2; stroke-dasharray: 3 2; }
.adt .chart .late-bg { fill: transparent; }
.adt .chart .late-ln { stroke: var(--section); stroke-width: 1.6; }
.adt .chart .key.k26late { box-sizing: border-box; border: 1px dashed var(--section);
  background: repeating-linear-gradient(45deg, var(--section) 0 1.5px, transparent 1.5px 4px); }
.adt .chart .pending { color: var(--muted); font-style: italic; }
.adt .chart figcaption { font-size:12.5px; color:var(--muted); margin-top:8px; }
.adt details { margin-top:10px; }
.adt summary { cursor:pointer; color:var(--blue); font-size:12.5px; min-height:24px;
          display:inline-flex; align-items:center; }

/* ---- tables ------------------------------------------------------------ */
.adt table { border-collapse:collapse; width:100%; font-size:12.5px; }
.adt th,
.adt td { text-align:left; padding:7px 10px; border-bottom:1px solid var(--border);
         vertical-align:top; }
.adt th { color:var(--faint); font-weight:600; font-size:11px; text-transform:uppercase;
     letter-spacing:.8px; background:var(--panel2);
     border-bottom-color:var(--border-strong); white-space:nowrap; }
.adt td.num,
.adt th.num { text-align:right; font-variant-numeric:tabular-nums; }
.adt tbody tr:hover { background:var(--panel2); }
/* Sortable headers hold a real button, so they are announced and operable as
   one; aria-sort on the th says which way the column is sorted. */
.adt th button.sort { all:unset; cursor:pointer; color:inherit; font:inherit;
                 letter-spacing:inherit; text-transform:inherit;
                 min-height:24px; display:inline-flex; align-items:center; }
.adt th button.sort:hover { color:var(--text); }
.adt th button.sort:focus-visible { outline:2px solid var(--gold); outline-offset:2px; }
/* position:relative makes the scroller the containing block of the .vh labels
   inside its tables; without it those absolutely positioned spans escaped the
   scroll box and widened the whole page to 778px on a 375px phone. */
.adt .scroll { position:relative; overflow-x:auto; border:1px solid var(--border); border-radius:8px;
          background:var(--panel); }
.adt .scroll table { min-width:760px; }

.adt .pill { display:inline-block; padding:1px 7px; border-radius:10px;
        font-size:10.5px; letter-spacing:.3px; border:1px solid var(--border-strong);
        color:var(--muted); white-space:nowrap; vertical-align:1px; }
.adt .pill.pending { color:var(--gold); border-color:var(--gold); }
.adt .pill.confirmed { color:var(--anti-text); border-color:var(--anti); }
/* the keyword rule's confirmation: the same colour, a dashed border, and its
   own word ("verified" against a person's "reviewed") */
.adt .pill.verified { color:var(--anti-text); border-color:var(--anti); border-style:dashed; }
/* the ✗ carries the meaning now; a struck-through "✗ rejected" read as a typo */
.adt .pill.rejected { color:var(--faint); border-color:var(--faint); }

/* review controls, team page only (index.html's reviewTools) */
.adt .rv { display:flex; flex-wrap:wrap; gap:8px 12px; align-items:center;
      margin-top:12px; padding-top:10px; border-top:1px solid var(--border); }
.adt .rv-b { min-height:32px; padding:0 13px; border-radius:6px; font:inherit; font-size:13px;
        border:1px solid var(--control-border); background:var(--panel2); color:var(--text);
        cursor:pointer; }
.adt .rv-b:hover { border-color:var(--border-strong); }
.adt .rv-b.ok[aria-pressed="true"] { border-color:var(--anti); color:var(--anti-text); font-weight:600; }
.adt .rv-b.no[aria-pressed="true"] { border-color:var(--faint); color:var(--muted); font-weight:600; }
.adt .rv-b:disabled { opacity:.55; cursor:progress; }
.adt .rv-note { font-size:12.5px; color:var(--muted); }
.adt .rv-who { display:flex; flex-wrap:wrap; gap:6px 14px; align-items:baseline;
          font-size:13px; margin:0 0 12px; }
/* ads-tweets-4: no [type] attribute (defaults to text), so it fell outside
   the input[type=search] rule below that gives every other control its
   34px baseline -- was rendering at 21px, under the 24px WCAG 2.5.8 floor. */
.adt .rv-who input { width:7.5em; margin-left:6px; min-height:34px; padding:6px 8px; }
.adt .rv-who .hint { color:var(--muted); font-size:12px; }
.adt .pill.warn { color:var(--anti-text); border-color:var(--anti); }
.adt .pill.untracked { color:var(--blue); border-color:var(--blue); }
.adt .pill.meta { color:var(--blue); border-color:var(--blue); }
.adt .pill.google { color:var(--gold); border-color:var(--gold); }
.adt .placeholder { color:var(--faint); font-style:italic; }

/* ---- controls ---------------------------------------------------------- */
.adt .controls { display:flex; gap:10px; flex-wrap:wrap; align-items:flex-end;
            margin:0 0 10px; }
.adt .controls label { display:flex; flex-direction:column; gap:3px; font-size:11px;
                  color:var(--faint); text-transform:uppercase; letter-spacing:.7px; }
.adt .controls label.check { flex-direction:row; align-items:center; gap:7px;
                        text-transform:none; letter-spacing:0; font-size:12.5px;
                        color:var(--muted); min-height:34px; }
.adt input[type=search],
.adt select {
  background:var(--panel2); border:1px solid var(--control-border);
  border-radius:5px; color:var(--text); font:inherit; font-size:12.5px;
  padding:7px 10px; min-height:34px; max-width:100%; text-transform:none;
  letter-spacing:normal; }
.adt input[type=search] { width:260px; }
.adt input[type=checkbox] { width:18px; height:18px; accent-color:var(--section); }
.adt input:focus,
.adt select:focus { outline:2px solid var(--gold); outline-offset:1px; }
.adt button.ghost { background:var(--panel2); border:1px solid var(--control-border);
               border-radius:5px; color:var(--text); font:inherit;
               font-size:12px; padding:6px 12px; cursor:pointer; min-height:30px; }
.adt button.ghost:hover { border-color:var(--gold); }
.adt button.more { display:block; margin:12px auto 0; }
.adt button.link { all:unset; cursor:pointer; color:var(--blue); font-size:12px;
              text-decoration:underline; min-height:24px; display:inline-flex;
              align-items:center; }
.adt button.link:focus-visible { outline:2px solid var(--gold); outline-offset:2px; }
.adt td button.link,
.adt td.go a { white-space:nowrap; }
.adt .count { color:var(--muted); font-size:12.5px; margin:4px 0 10px; }
.adt .count b { color:var(--text); }
.adt .chiprow { display:flex; flex-wrap:wrap; gap:6px; margin:0 0 10px; }
.adt .chiprow button { font-size:12px; }

/* ---- flagged ads, one card each ---------------------------------------- */
.adt .ad { background:var(--panel); border:1px solid var(--border);
      border-left:3px solid var(--gold); border-radius:6px;
      padding:11px 14px; margin-top:10px; }
.adt .ad.confirmed { border-left-color:var(--anti); }
.adt .ad.verified { border-left-color:var(--anti); border-left-style:dashed; }
.adt .ad.rejected { border-left-color:var(--border-strong); opacity:.8; }
.adt .ad .top { display:flex; flex-wrap:wrap; gap:6px 10px; align-items:baseline; }
.adt .ad .date { font-weight:600; font-variant-numeric:tabular-nums; }
.adt .ad .adv { font-weight:600; }
.adt .ad .spend { font:600 12.5px Consolas, ui-monospace, monospace; color:var(--text); }
.adt .ad .text { margin:7px 0 4px; color:var(--text); font-size:13px; line-height:1.55;
            overflow-wrap:anywhere; }
.adt .ad .text.clamp { display:-webkit-box; -webkit-line-clamp:4; line-clamp:4;
                  -webkit-box-orient:vertical; overflow:hidden; }
.adt .ad .meta { display:flex; flex-wrap:wrap; gap:4px 14px; align-items:center;
            font-size:12px; color:var(--muted); margin-top:6px; }
.adt .ad .meta a { color:var(--blue); min-height:24px; display:inline-flex;
              align-items:center; }
.adt .ad details { margin-top:4px; }
.adt .ad details p { margin:6px 0 0; font-size:12.5px; color:var(--muted); }

.adt .about { font-size:13px; color:var(--muted); line-height:1.6; }
.adt .about h3 { color:var(--text); font-size:13.5px; margin:16px 0 4px; }
.adt .about h3:first-child { margin-top:0; }
.adt .about p,
.adt .about ul { margin:0 0 8px; }
.adt .about b { color:var(--text); }
.adt .err { color:var(--anti-text); }

.adt a { color:var(--blue); }
.adt a:hover { color:var(--text); }

/* ---- accessibility, as on the hub's pages ------------------------------ */
.adt a:focus-visible,
.adt button:focus-visible,
.adt summary:focus-visible,
.adt [tabindex]:focus-visible {
  outline:2px solid var(--gold); outline-offset:2px; border-radius:3px; }
@media (prefers-reduced-motion: reduce) {
  .adt *,
.adt *::before,
.adt *::after { animation-duration:.01ms !important;
    animation-iteration-count:1 !important; transition-duration:.01ms !important;
    scroll-behavior:auto !important; }
}

@media (max-width:620px) {
  .adt input[type=search] { width:100%; }
  .adt .controls label { flex:1 1 140px; }
  .adt .controls label:has(input[type=search]) { flex-basis:100%; }
}

.adt .hint { color:var(--faint); font-size:11.5px; }

/* A bare legend row: the chart's own .chart .legend rule refines it. */
.adt .legend { display:flex; align-items:center; gap:8px; font-size:12px; color:var(--muted);
          margin:8px 0 12px; flex-wrap:wrap; }

/* ---- advertiser and ad pages (app.js's views) ---------------------------
   Each is its own history entry (?advertiser= / ?ad=), so the browser's Back
   returns to the list where the reader left it. */
.adt #listView[hidden],
.adt #detailView[hidden] { display:none; }
.adt .back { display:inline-flex; align-items:center; min-height:32px; margin:0 0 6px;
        font-size:13px; color:var(--blue); }
/* the page's title, not a section label: no uppercase, and no focus ring for
   the focus app.js moves here when the page opens (a keyboard user still
   starts reading from it) */
.adt .detail-head h2 { margin:6px 0 8px; font-size:22px; line-height:1.3; text-transform:none;
                  letter-spacing:normal; color:var(--text); }
.adt .detail-head h2:focus { outline:none; }
.adt .detail-head .pills { display:flex; flex-wrap:wrap; gap:6px; margin:0 0 12px; }
.adt .facts { display:grid; grid-template-columns:repeat(auto-fit, minmax(150px, 1fr));
         gap:10px; margin:0 0 16px; }
.adt .facts div { background:var(--panel); border:1px solid var(--border); border-radius:6px;
             padding:9px 12px; }
.adt .facts dt { font-size:11px; color:var(--faint); text-transform:uppercase; letter-spacing:.7px; }
.adt .facts dd { margin:3px 0 0; font-weight:600; color:var(--text); }
.adt .ad a.adv-link { color:var(--text); text-decoration:underline; text-decoration-color:var(--border-strong);
                 text-underline-offset:3px; }
.adt .ad a.adv-link:hover { color:var(--blue); }

/* "What the ads say, and who pays" (lane VIZ): two bar charts from the shared
   chart kit (tdi-chart.css), side by side where there is room */
.adt .two-up { display:grid; gap:14px; grid-template-columns:repeat(auto-fit, minmax(min(100%, 380px), 1fr));
          margin-bottom:8px; }
.adt .chart-panel { min-width:0; }   /* a wide numbers table scrolls in its own box, not the page */
.adt .chart-panel h3 { font-size:13.5px; margin:0 0 10px; color:var(--text); }
.adt .chart-panel h4 { font-size:12.5px; margin:18px 0 8px; color:var(--text); font-weight:600; }

/* a grouped advertiser (2026-10-09): the accounts behind one row, on expand */
.adt details.members { font-size: .85em; margin-top: .25rem; }
.adt details.members ul { margin: .25rem 0 0 1rem; padding: 0; }
