/* ---- 1. Typography: clamp illegal weights & unify ProstoOne leak ---- */
.tdt-logo__word{ font-weight:var(--fw-bold)!important; }
.tdt-logo b{ font-weight:var(--fw-bold)!important; }
.tdt-tag--deal,.tdt-tag--sponsored,.tdt-tag--inhouse{ font-weight:var(--fw-bold)!important; }
.tdt-partner-card__logo.no-logo::after{ font-weight:var(--fw-bold)!important; }
.tdt-filter-group__label{ font-weight:var(--fw-semi)!important; }
.tdt-disc-card__mono{ font-weight:var(--fw-bold)!important; }
.hostinger-ai-page-title,.single-post .wp-block-post-content h2,.tdt-archive-head h1,
.tdt-llm-ranking__head h2,.tdt-oss-stat__n{ font-weight:var(--fw-bold)!important; }
.tdt-prose h3,.single-post .wp-block-post-content h3,.tdt-prose th,
.single-post .wp-block-post-content th,.tdt-empty__title,
.tdt-swap__label,.tdt-swap__from a,.tdt-swap__alts a,.tdt-faq-trigger,
.tdt-form-group label,.tdt-form-submit,.single-post .wp-block-post-content strong,
.tdt-tool__facts span{ font-weight:var(--fw-semi)!important; }

/* Override global WP preset that still injects Catamaran/ProstoOne via inline CSS.
   body[class] already remaps --e-global-* but pure .wp-block-* contexts still
   fell through to the preset. This pins them to the token stack. */
body,.wp-block-post-content,.wp-block-post-excerpt,.entry-content{
  font-family:var(--font-sans)!important;
}
h1,h2,h3,h4,h5,h6,
.wp-block-heading,.wp-block-post-title,.tdt-archive-head h1,
.tdt-tool__title,.tdt-newsletter h2{
  font-family:var(--font-display)!important;
  letter-spacing:var(--ls-heading)!important;
}

/* ---- 2. Cards: single radius / shadow / gap language ---- */
.tdt-card{ border-radius:14px!important; box-shadow:0 1px 2px rgba(23,23,23,.04)!important; }
.tdt-card:hover{ border-color:var(--line-hover)!important; box-shadow:var(--shadow-lg)!important; }
.tdt-card__cover{ background:var(--wash)!important; }
.tdt-card--placeholder .tdt-card__cover{ background:var(--wash)!important; }
.tdt-partner-card__banner{ background:var(--wash)!important; background-image:linear-gradient(135deg, hsl(var(--tint,220) 72% 94%) 0%, hsl(calc(var(--tint,220) + 38) 66% 88%) 100%)!important; }
.tdt-deal-card{ border-radius:14px!important; }
.tdt-deal-card:hover{ border-color:var(--line-hover)!important; }
.tdt-deal-card__banner{ height:116px!important; }
.tdt-partner-card__logo{ width:56px!important; height:56px!important; border-radius:13px!important; }

/* ---- 3. Grids: one gap, one breakpoint system ---- */
.tdt-grid{ gap:16px!important; }
.tdt-grid.tdt-deal-grid{ gap:16px!important; }
.tdt-disc-grid{ gap:16px!important; }
.wp-block-post-template{ gap:16px!important; }
body.blog .wp-block-post-template,
body.archive .wp-block-post-template,
body.search .wp-block-post-template{ gap:16px!important; }
/* Polish had pushed .tdt-grid to auto-fill 260px; cohere with system 248px base */
.tdt-grid{ grid-template-columns:repeat(auto-fill,minmax(248px,1fr))!important; }
.tdt-grid.tdt-deal-grid{ grid-template-columns:repeat(auto-fill,minmax(280px,1fr))!important; }

/* ---- 4. Tags: tokenized backgrounds that survive dark mode ---- */
.tdt-tag--freemium{ background:var(--inhouse-bg)!important; color:var(--accent)!important; }
.tdt-tag--paid,.tdt-tag--onetime{ background:var(--wash)!important; color:var(--sub)!important; }
.tdt-tag--tax{ background:var(--wash)!important; color:var(--ink-2)!important; }
.tdt-tag--tax:hover{ background:var(--solid)!important; color:var(--solid-ink)!important; }
.tdt-code-chip--link{ background:var(--accent)!important; color:var(--accent-ink)!important; }

/* ---- 5. Buttons: single pill hierarchy (999px) ---- */
.tdt-btn,.tdt-cta{ border-radius:999px!important; }
.tdt-see-all{ border-radius:999px!important; font-weight:var(--fw-semi)!important; }
.tdt-load-more{ border-radius:999px!important; font-weight:var(--fw-semi)!important; }
.tdt-btn:hover{ box-shadow:0 4px 14px rgba(36,84,255,.28)!important; }
.tdt-see-all:hover{ box-shadow:0 4px 12px rgba(36,84,255,.25)!important; }

/* ---- 6. Borders: replace literals with tokens ---- */
.tdt-card:hover,.tdt-card__cover,.tdt-empty,.tdt-swap__row:hover,.tdt-adv-card:hover{
  border-color:var(--line-hover)!important;
}
.tdt-card__arrow{ border-color:var(--line)!important; }

/* ---- 7. Container widths: blog/single hug --max with measure only on prose ---- */
.blog main .wp-block-query,
.archive main .wp-block-query,
.search main .wp-block-query,
.blog main h1{ max-width:var(--max)!important; padding-left:var(--gutter)!important; padding-right:var(--gutter)!important; }
.single-post .wp-block-post-content,
.single-post .entry-content{ max-width:68ch!important; }
:root{ --wp--style--global--content-size:820px; }

/* ---- 8. Section rhythm: remove double gap before first heading ---- */
.elementor-widget-tdt_section_heading:first-child{ margin-top:0!important; }
.tdt-section-head{ margin-bottom:20px!important; }
.tdt-section-head::after{ opacity:.6; }
.tdt-section-head h2{ font-size:var(--fs-xl)!important; }

/* ---- 9. Header pill + nav: unify glass vs solid ---- */
.tdt-header-inner{ gap:16px!important; }

/* ---- 10. Newsletter: shared radius, no hover lift incoherence ---- */
.tdt-newsletter{ border-radius:14px!important; }

/* ---- 11. Dark-mode fixes for remaining literals ---- */
:root[data-theme="dark"] .tdt-card{ border-color:rgba(255,255,255,.10)!important; }
:root[data-theme="dark"] .tdt-tag--freemium{ background:rgba(125,155,255,.16)!important; color:var(--accent)!important; }
:root[data-theme="dark"] .tdt-tag--paid,
:root[data-theme="dark"] .tdt-tag--onetime,
:root[data-theme="dark"] .tdt-tag--tax{ background:rgba(255,255,255,.07)!important; color:var(--ink-2)!important; }
:root[data-theme="dark"] .tdt-newsletter__form button{ background:var(--accent)!important; color:var(--accent-ink)!important; }
:root[data-theme="dark"] .tdt-empty{ background:rgba(255,255,255,.04)!important; border-color:rgba(255,255,255,.10)!important; }

/* ---- 12. Focus ring floor already 0 spec via :where; ensure token contrast ---- */
:where(a,button,input,select,textarea):focus-visible{
  outline:2px solid var(--accent)!important; outline-offset:2px!important;
}

/* ---- 13. Empty / placeholder: same wash surface ---- */
.tdt-card.tdt-card--placeholder{ background:var(--wash)!important; border-color:var(--line)!important; }
.tdt-deal-card.tdt-deal-card--placeholder{ background:var(--wash)!important; }
.tdt-deals-empty{ background:var(--wash)!important; }

/* ---- 14. Footer head contrast: bereits 4.83 but ensure token ---- */
.tdt-footer-col h3{ color:var(--footer-head)!important; }

/* ---- 15. Prose link underline already tokenized — enforce none on cards ---- */
.tdt-card a,.tdt-disc-card,.tdt-cat-tile{ text-decoration:none!important; }