/* PhishDestroy polish layer: loaded on every page, after the page's own stylesheets
   (docs/prompts/visual-quality.md, docs/prompts/polish.md). Values come only from pd-tokens.css. */

/* ---------- icons: one SVG sprite (/assets/icons/pd.svg) ---------- */
.ds-i { display: inline-block; flex: none; width: 1em; height: 1em; vertical-align: middle; overflow: visible;
  fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.ds-ic { display: inline-block; flex: none; font-style: normal; line-height: 1; vertical-align: middle; }
.ds-ic > .ds-i { display: block; width: 1em; height: 1em; vertical-align: top; }
:is(.ds-ic, .ds-i).ds-ic--before, .ds-i--before { margin-inline-end: var(--space-2); }
:is(.ds-ic, .ds-i).ds-ic--after, .ds-i--after { margin-inline-start: var(--space-2); }
.ds-ic--fw { width: 1.25em; }
.ds-ic--fw > .ds-i { margin-inline: auto; }
.ds-ic--lg > .ds-i { width: 1.25em; height: 1.25em; }
.ds-ic--2x > .ds-i { width: 2em; height: 2em; }
.ds-ic--3x > .ds-i { width: 3em; height: 3em; }
.ds-ic--4x > .ds-i, .ds-ic--5x > .ds-i { width: 4em; height: 4em; }
.ds-ic--spin > .ds-i { animation: ds-spin 1s linear infinite; }
@keyframes ds-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .ds-ic--spin > .ds-i { animation: none; } }
/* in flex rows the container's gap does the spacing */
:where(.ds-btn, .ds-chip, .ds-badge, .pd-fab) > :is(.ds-ic, .ds-i) { margin-inline: 0; }
/* headings carry one icon size, muted */
:where(h1, h2, h3, h4, h5, h6) > .ds-ic > .ds-i, :where(h1, h2, h3, h4, h5, h6) > .ds-i { width: 20px; height: 20px; }
:where(h1, h2, h3, h4, h5, h6) > :is(.ds-ic, .ds-i) { color: var(--text-muted); vertical-align: calc(.36em - 10px); }   /* centred on the capitals */

/* ---------- focus: one ring everywhere ---------- */
:where(a[href], button, input, select, textarea, summary, [tabindex]:not([tabindex="-1"]), [role="button"], [role="tab"], [contenteditable="true"]):focus-visible {
  outline: 2px solid var(--accent) !important; outline-offset: 2px !important; box-shadow: none !important; }

/* ---------- type: code, IOCs and hashes at one size (the mono face exists for them only) ---------- */
:is(code, kbd, samp, pre, tt) { font-size: var(--fs-14) !important; }

/* ---------- links: underline only inside running text ---------- */
:where(p, dd, blockquote, figcaption, td, .ds-prose li, article li) > a:where(:not([class*="btn"]):not([class*="button"]):not([class*="card"]):not([class*="chip"]):not([class*="tag"]):not([class*="badge"]):not([class*="pill"]):not([class*="cta"])) {
  text-decoration: underline; text-decoration-thickness: 1px; text-decoration-color: var(--accent-border); text-underline-offset: 3px; }
:where(a[class*="btn"], a[class*="button"], a[class*="card"], a[class*="chip"], a[class*="tag"], a[class*="badge"], a[class*="pill"], a[class*="cta"], .ds-btn, .pd-fab) { text-decoration: none !important; }
:where(a[class*="card"], .ds-related-card, .ds-links a):hover { border-color: var(--border-strong); }

/* ---------- text never cut without an ellipsis ---------- */
:where(*) { text-overflow: ellipsis; }

/* ---------- touch targets on phones ---------- */
@media (max-width: 767px) {
  :where(button, [role="button"], input[type="button"], input[type="submit"], input[type="reset"], select, summary, .ds-btn, a[class*="btn"], a[class*="button"]) {
    min-height: 44px; min-width: 44px; }
  /* link lists of the footer, the breadcrumbs and navigation: one 44px row per link */
  :is(footer, .pd-site-footer, .pd-footer, .pd-publisher-footer) :is(li > a, nav a, .pd-footer-links-group a, .pd-footer-col > a, .pd-publisher-footer-links a),
  :is(.pd-footer-social, .pd-footer-socials, .pd-social-links) a,
  .pd-breadcrumb :is(li > a, a) { display: inline-flex; align-items: center; min-height: 44px; min-width: 44px; }
  /* a link standing on its own (not inside a sentence): a 44px row. :where keeps any page rule for display in charge */
  :where(div, section, nav, header, footer, aside, main, figure, form, article) > a:where(:not([class*="btn"]):not([class*="button"])),
  :where(li) > a:only-child { display: inline-flex; align-items: center; min-height: 44px; min-width: 44px; }
}
/* the publisher line the server adds under the footer: scale paddings, centred by its own column */
body > .pd-publisher-footer { z-index: var(--z-base) !important; padding: var(--space-4) var(--pd-gutter) !important; }
body > .pd-publisher-footer > nav { max-width: 1240px; margin-inline: auto; }
.pd-publisher-links { box-sizing: content-box; max-width: 1240px; margin-inline: auto !important; padding-inline: var(--pd-gutter) !important; }

/* ---------- browser defaults on the spacing scale (zero specificity: any page rule still wins) ---------- */
:where(ul, ol, menu) { padding-inline-start: var(--space-5); }
:where(dd) { margin-inline-start: var(--space-5); }
:where(blockquote, figure) { margin-inline: 0; }
:where(p, pre, blockquote, figure, dl, table) { margin-block: var(--space-4); }
:where(h1, h2) { margin-block: var(--space-5) var(--space-4); }
:where(h3, h4, h5, h6) { margin-block: var(--space-4) var(--space-2); }
:where(button, input[type="button"], input[type="submit"], input[type="reset"]) { padding-block: 0; padding-inline: var(--space-2); }
:where(input:not([type="checkbox"]):not([type="radio"]):not([type="range"]), textarea, select) { padding: var(--space-1) var(--space-2); }
:where(fieldset) { margin-inline: 0; padding: var(--space-2) var(--space-3) var(--space-3); }
:where(legend) { padding-inline: var(--space-1); }
:where(td, th) { padding: var(--space-1); }

/* ---------- form controls: the browser's dark-scheme greys replaced by the palette (page rules still win) ---------- */
:where(input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]):not([type="file"]), textarea, select) {
  border: 1px solid var(--border-strong); border-radius: var(--radius-s); background-color: var(--surface-2); color: var(--text); }
:where(button, input[type="button"], input[type="submit"], input[type="reset"]) {
  border: 1px solid var(--border-strong); border-radius: var(--radius-s); background-color: var(--surface-2); color: var(--text); }
:where(input, textarea)::placeholder { color: var(--text-faint); opacity: 1; }
:where(input[type="checkbox"], input[type="radio"], input[type="range"], progress, meter) { accent-color: var(--accent); }
:where(::selection) { background: var(--accent-bg); color: var(--text); }

/* ---------- one theme ---------- */
#theme-toggle, [data-theme-toggle], .theme-toggle { display: none !important; }

/* ---------- floating buttons: one stack, bottom right (pd-sitewide.js) ---------- */
#back-to-top, .back-to-top, .pd-scroll-top, .domain-scroll-top, #backToTop, .ds-top, .scroll-to-top, .go-top, .pd-site-scroll-top, .pd-floating-action { display: none !important; }
.pd-fab-stack { position: fixed; z-index: var(--z-fab); right: max(16px, env(safe-area-inset-right)); bottom: max(16px, env(safe-area-inset-bottom));
  display: flex; flex-direction: column; align-items: flex-end; gap: var(--space-3); pointer-events: none;
  transform: translateY(calc(-1 * var(--pd-fab-lift, 0px))); transition: transform 150ms ease, opacity 150ms ease; }
.pd-fab-stack > * { pointer-events: auto; }
.pd-fab-stack.is-hidden { opacity: 0; visibility: hidden; }
.pd-fab-stack.is-hidden > * { pointer-events: none; }
.pd-fab { box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center; gap: var(--space-2); min-height: 46px; margin: 0;
  padding: 0 var(--space-4); border: 1px solid var(--accent); border-radius: var(--radius-pill); background: var(--accent); color: var(--on-accent);
  font: 600 var(--fs-14)/1 var(--font-text); white-space: nowrap; text-decoration: none; cursor: pointer; box-shadow: var(--shadow-2); }
.pd-fab:hover { border-color: var(--accent-hover); background: var(--accent-hover); color: var(--on-accent); }
.pd-fab .ds-i { width: 20px; height: 20px; margin: 0; }
.pd-fab--top { width: 46px; height: 46px; padding: 0; border-color: var(--border-strong); background: var(--surface-2); color: var(--text);
  opacity: 0; visibility: hidden; transform: translateY(8px); transition: opacity 150ms ease, transform 150ms ease, visibility 0s linear 150ms; }
.pd-fab--top:hover { border-color: var(--accent-border); background: var(--surface-2); color: var(--accent); }
.pd-fab--top.is-visible { opacity: 1; visibility: visible; transform: none; transition: opacity 150ms ease, transform 150ms ease, visibility 0s; }
@media (max-width: 767px) {
  .pd-fab--report { width: 46px; height: 46px; padding: 0; }
  .pd-fab--report .pd-fab-label { position: absolute; width: 1px; height: 1px; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
  .pd-fab-stack.is-near-footer .pd-fab--report { opacity: 0; visibility: hidden; pointer-events: none; }
}
@media (prefers-reduced-motion: reduce) { .pd-fab-stack, .pd-fab--top, .pd-fab--top.is-visible { transition: none; } }
@media print { .pd-fab-stack { display: none; } }

/* ---------- inline SVG colours (html_codemod: fill/stroke/stop-color attributes → tokens, same zero priority) ---------- */
:where(.pdf-bg){fill:var(--bg)}:where(.pds-bg){stroke:var(--bg)}:where(.pdc-bg){stop-color:var(--bg);flood-color:var(--bg)}:where(.pdx-bg){color:var(--bg)}
:where(.pdf-surface-1){fill:var(--surface-1)}:where(.pds-surface-1){stroke:var(--surface-1)}:where(.pdc-surface-1){stop-color:var(--surface-1);flood-color:var(--surface-1)}:where(.pdx-surface-1){color:var(--surface-1)}
:where(.pdf-surface-2){fill:var(--surface-2)}:where(.pds-surface-2){stroke:var(--surface-2)}:where(.pdc-surface-2){stop-color:var(--surface-2);flood-color:var(--surface-2)}:where(.pdx-surface-2){color:var(--surface-2)}
:where(.pdf-border){fill:var(--border)}:where(.pds-border){stroke:var(--border)}:where(.pdc-border){stop-color:var(--border);flood-color:var(--border)}:where(.pdx-border){color:var(--border)}
:where(.pdf-border-strong){fill:var(--border-strong)}:where(.pds-border-strong){stroke:var(--border-strong)}:where(.pdc-border-strong){stop-color:var(--border-strong);flood-color:var(--border-strong)}:where(.pdx-border-strong){color:var(--border-strong)}
:where(.pdf-text){fill:var(--text)}:where(.pds-text){stroke:var(--text)}:where(.pdc-text){stop-color:var(--text);flood-color:var(--text)}:where(.pdx-text){color:var(--text)}
:where(.pdf-text-muted){fill:var(--text-muted)}:where(.pds-text-muted){stroke:var(--text-muted)}:where(.pdc-text-muted){stop-color:var(--text-muted);flood-color:var(--text-muted)}:where(.pdx-text-muted){color:var(--text-muted)}
:where(.pdf-text-faint){fill:var(--text-faint)}:where(.pds-text-faint){stroke:var(--text-faint)}:where(.pdc-text-faint){stop-color:var(--text-faint);flood-color:var(--text-faint)}:where(.pdx-text-faint){color:var(--text-faint)}
:where(.pdf-accent){fill:var(--accent)}:where(.pds-accent){stroke:var(--accent)}:where(.pdc-accent){stop-color:var(--accent);flood-color:var(--accent)}:where(.pdx-accent){color:var(--accent)}
:where(.pdf-accent-bg){fill:var(--accent-bg)}:where(.pds-accent-bg){stroke:var(--accent-bg)}:where(.pdc-accent-bg){stop-color:var(--accent-bg);flood-color:var(--accent-bg)}:where(.pdx-accent-bg){color:var(--accent-bg)}
:where(.pdf-accent-border){fill:var(--accent-border)}:where(.pds-accent-border){stroke:var(--accent-border)}:where(.pdc-accent-border){stop-color:var(--accent-border);flood-color:var(--accent-border)}:where(.pdx-accent-border){color:var(--accent-border)}
:where(.pdf-on-accent){fill:var(--on-accent)}:where(.pds-on-accent){stroke:var(--on-accent)}:where(.pdc-on-accent){stop-color:var(--on-accent);flood-color:var(--on-accent)}:where(.pdx-on-accent){color:var(--on-accent)}
:where(.pdf-danger){fill:var(--danger)}:where(.pds-danger){stroke:var(--danger)}:where(.pdc-danger){stop-color:var(--danger);flood-color:var(--danger)}:where(.pdx-danger){color:var(--danger)}
:where(.pdf-danger-bg){fill:var(--danger-bg)}:where(.pds-danger-bg){stroke:var(--danger-bg)}:where(.pdc-danger-bg){stop-color:var(--danger-bg);flood-color:var(--danger-bg)}:where(.pdx-danger-bg){color:var(--danger-bg)}
:where(.pdf-danger-border){fill:var(--danger-border)}:where(.pds-danger-border){stroke:var(--danger-border)}:where(.pdc-danger-border){stop-color:var(--danger-border);flood-color:var(--danger-border)}:where(.pdx-danger-border){color:var(--danger-border)}
:where(.pdf-warning){fill:var(--warning)}:where(.pds-warning){stroke:var(--warning)}:where(.pdc-warning){stop-color:var(--warning);flood-color:var(--warning)}:where(.pdx-warning){color:var(--warning)}
:where(.pdf-warning-bg){fill:var(--warning-bg)}:where(.pds-warning-bg){stroke:var(--warning-bg)}:where(.pdc-warning-bg){stop-color:var(--warning-bg);flood-color:var(--warning-bg)}:where(.pdx-warning-bg){color:var(--warning-bg)}
:where(.pdf-warning-border){fill:var(--warning-border)}:where(.pds-warning-border){stroke:var(--warning-border)}:where(.pdc-warning-border){stop-color:var(--warning-border);flood-color:var(--warning-border)}:where(.pdx-warning-border){color:var(--warning-border)}
:where(.pdf-scrim){fill:var(--scrim)}:where(.pds-scrim){stroke:var(--scrim)}:where(.pdc-scrim){stop-color:var(--scrim);flood-color:var(--scrim)}:where(.pdx-scrim){color:var(--scrim)}
