/* JDServer typography v1. Approved homepage hierarchy, shared by every surface. */
:root { --jd-font: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans", Ubuntu, Cantarell, "Helvetica Neue", Inter, Arial, "Liberation Sans", sans-serif; --font-sans: var(--jd-font); --wm-font: var(--jd-font); --sans: var(--jd-font); }
html body { font-family: var(--jd-font) !important; font-weight: 400; }
html body :is(button,input,select,textarea) { font-family: var(--jd-font) !important; }
html body :is(h1,h2,h3,h4,h5,h6) { font-family: var(--jd-font) !important; font-weight: 600 !important; line-height: 1.3 !important; letter-spacing: normal !important; }
html body h1 { font-weight: 750 !important; letter-spacing: -.025em !important; line-height: 1.2 !important; }
html body svg text { font-family: var(--jd-font) !important; }

/* Explicit family declarations in modules, tables and maps. */
html body #compartir,
html body #compartir .wm-current,
html body #exportdata .btn,
html body #exportdata .metric-label,
html body #exportdata .od-button,
html body #exportdata .od-control,
html body #forecast-wxsim .fc-date,
html body #forecast-wxsim .fc-line,
html body #forecast-wxsim .fc-sky,
html body #forecast-wxsim .pr-badge,
html body #groupwebs .gw-foot,
html body #groupwebs .gw-head,
html body #groupwebs .gw-ph,
html body #meteo-assistant-root,
html body #radar-rv .leaflet-container,
html body #radar-rv .leaflet-control-attribution,
html body .alert-badge,
html body .alerts-meta,
html body .am-controls button,
html body .am-controls select,
html body .atlas-chart svg text,
html body .brand,
html body .brand small,
html body .cc-duel-btn,
html body .cc-st-name,
html body .cc-table,
html body .cf-chip,
html body .cf-hint,
html body .chart svg text,
html body .chart-legend,
html body .chart-legend .lg,
html body .cmp-duel-btn,
html body .cmp-slug-text,
html body .cmp-updated,
html body .co-label,
html body .co-main,
html body .co-sub,
html body .co-unit,
html body .dual-legend,
html body .dual-legend .lg,
html body .duel-badge,
html body .duel-badge-row-label,
html body .duel-badge-row-station,
html body .duel-chart-foot,
html body .duel-chart-name,
html body .duel-chart-title,
html body .duel-chart-val,
html body .duel-chip,
html body .duel-details-summary,
html body .duel-empty,
html body .duel-error,
html body .duel-faceoff-caption,
html body .duel-faceoff-card span,
html body .duel-faceoff-card strong,
html body .duel-footer-note,
html body .duel-h2h-coverage,
html body .duel-h2h-help,
html body .duel-h2h-name,
html body .duel-h2h-result,
html body .duel-h2h-score,
html body .duel-h2h-score-label,
html body .duel-h2h-tie-label,
html body .duel-h2h-tie-score,
html body .duel-h2h-title,
html body .duel-kicker,
html body .duel-league-dynamic,
html body .duel-league-stat span,
html body .duel-league-stat strong,
html body .duel-league-subtitle,
html body .duel-league-title,
html body .duel-loading,
html body .duel-mini-empty,
html body .duel-mini-title,
html body .duel-network-card span,
html body .duel-network-card strong,
html body .duel-picker-label,
html body .duel-picker-select,
html body .duel-pos,
html body .duel-rank-sub,
html body .duel-rank-title h4,
html body .duel-region-tag,
html body .duel-scoreboard-sub,
html body .duel-scoreboard-title,
html body .duel-section-title,
html body .duel-st-name,
html body .duel-st-sub,
html body .duel-standings-help,
html body .duel-story p,
html body .duel-story-line,
html body .duel-subtitle,
html body .duel-swap,
html body .duel-tab,
html body .duel-table,
html body .duel-title,
html body .duel-val span,
html body .duel-val strong,
html body .duel-win-label,
html body .duel-win-meta,
html body .duel-win-station,
html body .duel-win-value span,
html body .duel-win-value strong,
html body .duels-brand-subtitle,
html body .duels-brand-title,
html body .duels-footer-pill,
html body .duels-footer-text,
html body .duels-link,
html body .duels-love-mark,
html body .duels-pill,
html body .duels-season,
html body .fc-date,
html body .fc-line,
html body .fc-sky,
html body .fx-list,
html body .jd-hunter-block h3,
html body .jd-hunter-block p,
html body .jd-hunter-caption,
html body .jd-hunter-lightbox-caption,
html body .jd-hunter-lightbox-meta,
html body .jd-hunter-meta,
html body .jd-skip-link,
html body .jd-visits-label,
html body .jd-visits-mini-label,
html body .jd-visits-mini-value,
html body .jd-visits-note,
html body .jd-visits-pill,
html body .jd-visits-sub,
html body .jd-visits-title,
html body .jd-visits-updated,
html body .jd-visits-value,
html body .jd-vts-meta,
html body .jd-vts-sub,
html body .jd-vts-tab,
html body .jd-vts-tip .t1,
html body .jd-vts-tip .t2,
html body .jd-vts-title,
html body .jd-vts-upd,
html body .kpi-top h2,
html body .kpi-value,
html body .live-box-head h3,
html body .mini-chart svg text,
html body .model-meta,
html body .model-tab,
html body .model-title,
html body .ms-label,
html body .ms-main,
html body .ms-main .ms-unit,
html body .ms-sub,
html body .ms-updated,
html body .nearcams-caption,
html body .nearcams-lb-caption,
html body .nearcams-lb-close,
html body .network-foot,
html body .network-foot small,
html body .pair-values strong,
html body .pr-badge,
html body .radar-attrib,
html body .radar-rv-attrib,
html body .radar-rv-btn,
html body .radar-rv-legend-label,
html body .radar-rv-legend-ticks,
html body .radar-rv-meta-label,
html body .radar-rv-meta-value,
html body .radar-rv-rangehead,
html body .radar-rv-rangeinfo,
html body .radar-rv-select,
html body .radar-rv-speedlabel,
html body .radar-subtitle,
html body .range-btn,
html body .rank-value,
html body .recent-row>span,
html body .row-details dt,
html body .row-details summary,
html body .row-details-toolbar small,
html body .row-details-toolbar strong,
html body .rt-metrics,
html body .rt-tip,
html body .sh-label,
html body .sh-value,
html body .smc-meta,
html body .smc-open,
html body .smc-sub,
html body .smc-title,
html body .station-voice-climate-label,
html body .station-voice-climate-text,
html body .station-voice-kicker,
html body .station-voice-meta,
html body .station-voice-text,
html body .trend-compare,
html body .trend-comparison-legend,
html body .trend-foot,
html body .trend-range button,
html body .trend-title,
html body .trend-tooltip,
html body .web-card-head h3,
html body .web-stats strong,
html body .web-total>strong,
html body .wr-cardinal,
html body .wr-grid-text,
html body .ys-label,
html body .ys-main,
html body .ys-main .ys-unit,
html body .ys-sub,
html body .ys-updated,
html body footer .container,
html body h1,
html body h2,
html body h3 { font-family: var(--jd-font) !important; }

/* Exact approved homepage adjustments. */
/* Propuesta aislada: solo tipografia. Las reglas no actuan en modo Actual. */
html :is(button, input, select, textarea) {
  font-family: var(--jd-font) !important;
}
/* Titulos de seccion: misma jerarquia, sin una negrita excesiva. */
html main.container h3 {
  font-family: var(--jd-font) !important;
  font-size: clamp(1.1rem, 1.5vw, 1.2rem) !important;
  font-weight: 600 !important;
  line-height: 1.3 !important;
  letter-spacing: normal !important;
}
html #site-header .brand-title strong {
  font-weight: 750 !important;
  letter-spacing: -.025em !important;
}
html :is(.station-voice-kicker, .station-voice-climate-label) {
  font-family: var(--jd-font);
  font-weight: 600;
  letter-spacing: .035em;
}
html .station-voice-text {
  font-family: var(--jd-font);
  font-weight: 500;
  font-size: .95rem !important;
  line-height: 1.5 !important;
  letter-spacing: normal;
}
html .station-voice-climate-text {
  font-family: var(--jd-font);
  font-weight: 400;
  font-size: .78rem;
  line-height: 1.45;
  letter-spacing: normal;
}
html :is(.station-voice-meta, .station-voice-meta strong) { font-weight: 500; }
html :is(.wx-name, .fc-date, .nearby-temp-name, .footer-logo-name, .gw-head) {
  font-family: var(--jd-font);
  font-weight: 600;
  letter-spacing: normal;
}
/* Lecturas secundarias con el peso normal que ya usamos en Live. */
html :is(.wx-temps, .fc-temps strong, .nearby-temp-value) {
  font-family: var(--jd-font);
  font-weight: 400;
  font-variant-numeric: tabular-nums;
  letter-spacing: normal;
}
html :is(.wx-weather-pill, .fc-weather-pill, .fc-period, .fc-temps span) { font-weight: 500; }
html :is(.wx-desc, .fc-sky) { font-weight: 400; line-height: 1.45; }
html :is(.trend-title, .model-title, .smc-title, .nearcams-name, .network-foot) {
  font-family: var(--jd-font);
  font-weight: 600;
}
html :is(.trend-hint, .trend-legend, .model-meta, .smc-sub, .smc-meta, .radar-rv-meta-value, .radar-rv-attrib, .network-foot small, .gw-foot, footer .container) {
  font-family: var(--jd-font);
  font-weight: 400;
}
html :is(.extremes-efemeride-btn, .jd-fab, .btn, .model-link, .smc-link) { font-weight: 500; }
html #extremes .extreme-line--m_temp > .extreme-label { font-weight: 600; }
/* Live, sus cifras, iconos, medidas y animaciones mantienen sus reglas actuales. */

/* Shared editorial hierarchy; hero sizes continue to adapt to their own layout. */
html body :is(.jd-section-title,.duel-league-title,.duel-h2h-title,.wm-h2,.wm-h2--minimal,.panel-heading h2,.section-header h2) { font-size:clamp(1.1rem,1.5vw,1.2rem) !important; font-weight:600 !important; line-height:1.3 !important; letter-spacing:normal !important; }
html body :is(.jd-hero-title,.duel-title,.duels-brand-title,.wm-hero__title,.auth-card h1,.page-heading h1,.mast .brand,.brand-copy strong,.auth-brand strong) { font-weight:750 !important; letter-spacing:-.025em !important; }
html body :is(.jd-hero-subtitle,.jd-section-subtitle,.jd-project-card p,.jd-tech-card p,.jd-contact-content,.duel-subtitle,.duel-league-subtitle,.duel-league-dynamic,.duel-h2h-help,.duel-standings-help,.duel-scoreboard-sub,.duel-story p,.duel-story-line,.intro,.wm-hero__lead,.wm-p,.wm-article p,.auth-card-intro > p:not(.section-kicker),.page-heading > p,.section-description,.field-help,.form-help) { font-weight:400 !important; line-height:1.5 !important; letter-spacing:normal !important; }
html body :is(.jd-section-subtitle,.duel-subtitle,.intro,.wm-hero__lead,.auth-card-intro > p:not(.section-kicker),.page-heading > p) { font-size:.95rem !important; }
html body :is(.jd-network-name,.duel-scoreboard-title,.duel-mini-title,.duel-section-title,.duel-chart-title,.wm-cat__t,.wm-miniItem__t,.wm-result__t,.wm-catgroup__title,.wm-label,.wm-howtoTitle,.nav-item strong,.form-grid label > span,.section-kicker,.eyebrow,.kpi-label,.duel-picker-label) { font-weight:600 !important; letter-spacing:normal !important; }
html body :is(.jd-btn,.jd-project-link,.jd-network-link,.button,.wm-btn,.wm-levelBtn,.wm-qchip,.duel-tab,.duels-pill,.duel-picker-select,.duel-swap,.auth-submit,.theme-button) { font-weight:500 !important; }
html body :is(.kpi-value,.rank-value,.web-total > strong,.web-stats strong,.pair-values strong,.jd-network-metric strong,.wm-kpi__v,.duel-network-card strong,.duel-faceoff-card strong,.duel-league-stat strong,.duel-win-value strong,.kpi-summary-grid strong,.kpi-foot-grid strong,.kpi-vitals-grid > article > strong) { font-weight:400 !important; font-variant-numeric:tabular-nums; letter-spacing:normal !important; }
html body :is(.subtle,.footnote,.kpi-note,.wm-help,.wm-hint,.wm-miniItem__s,.wm-result__s,.wm-cat__d,.wm-relatedCard__s,.jd-network-location,.duel-chart-foot,.duel-footer-note,.duels-footer-text,.auth-footer,.nav-item small) { font-weight:400 !important; line-height:1.45 !important; }
/* Preserve semantic emphasis and technical monospace; no blanket descendant override. */
