:root {
  --type-micro: 0.7rem;
  --type-label: 0.76rem;
  --type-control: 0.86rem;
  --type-body: 0.9rem;
  --type-title: 1.72rem;
}

html {
  font-size: 18px;
  -webkit-text-size-adjust: 100%;
}

/* Shared top bars */
.desktop-brand,
.maps-brand,
.harmonics-brand,
.weather-brand {
  font-size: 0.88rem;
}

.maps-title strong,
.topbar-title strong,
.system-state {
  font-size: 0.72rem;
}

.maps-title span,
.topbar-title span,
.maps-user small,
.topbar-user small,
.user-sector span {
  font-size: var(--type-micro);
}

.maps-user strong,
.topbar-user strong,
.user-sector strong {
  font-size: 0.82rem;
}

.source-warning {
  min-height: 40px;
  font-size: var(--type-micro);
}

/* Portal, authentication and administration */
.auth-kicker,
.eyebrow,
.auth-footer,
.workspace-meta,
.desktop-telemetry,
.admin-identity span,
.admin-overview span,
th,
.user-cell span,
.status-badge,
.generated-key span {
  font-size: var(--type-micro);
}

.auth-tab,
.auth-form label > span,
.key-form label > span,
.form-status,
.window-bar strong,
.admin-nav,
td,
.generated-key strong,
.key-row,
.portal-toast {
  font-size: var(--type-control);
}

.auth-heading p:last-child,
.module-placeholder p {
  font-size: var(--type-body);
}

.auth-form input,
.key-form input,
.key-form select,
.primary-control,
.secondary-control {
  min-height: 54px;
  font-size: var(--type-control);
}

.app-grid {
  width: min(760px, 82vw);
  grid-template-columns: repeat(4, minmax(132px, 1fr));
}

.app-icon {
  min-height: 154px;
}

.app-icon strong {
  font-size: 0.96rem;
}

.app-icon small {
  font-size: var(--type-micro);
}

.app-glyph {
  width: 72px;
  height: 72px;
}

.desktop-topbar {
  height: 64px;
}

.desktop-workspace {
  padding-top: 124px;
}

.table-actions button,
.key-actions button {
  min-height: 34px;
  font-size: 0.7rem;
}

/* Maps */
.maps-shell {
  --workspace-top: calc(var(--topbar) + 40px);
}

.maps-shell.warning-dismissed {
  --workspace-top: var(--topbar);
}

.planner-panel,
.analysis-panel {
  width: min(460px, calc(100vw - 32px));
}

.panel-heading > span,
.section-rule span,
.readiness-card > div > span,
.control-card > header span,
.chart-card > header span,
.analysis-grid article > header span,
.hourly-card > header span,
.hero-copy > span,
.recommendation-head > span,
.equipment-card header span,
.compatibility-card > div:nth-child(2) > span,
.intersection-card > header span,
.spectrum-card header > div > span,
.harmonics-card header span,
.engineering-card header span,
.signal-config-card header span {
  font-size: var(--type-micro);
}

.panel-heading h1 {
  font-size: var(--type-title);
}

.panel-heading p,
.local-note,
.provider-note,
.signal-config-card > p,
.readiness-card p,
.relay-card p,
.antenna-card > p,
.weather-state p,
.checklist small,
.flow-help,
.calculation-note,
.legal-note,
.autosave-note,
.external-warning,
.recommendation-head p {
  font-size: var(--type-label);
}

label > span,
.coordinate-grid label > span {
  font-size: var(--type-label);
  line-height: 1.35;
}

input,
select {
  min-height: 43px;
  font-size: var(--type-control);
}

.field-grid em,
.radio-fields em,
.signal-height-grid em,
label em,
label > div em {
  font-size: var(--type-micro);
}

.point-switch button,
.point-actions button,
.panel-button,
.plan-actions button,
.relay-card button,
.map-tools button,
.analysis-tabs button,
.primary-control,
.secondary-control {
  min-height: 40px;
  font-size: var(--type-label);
}

.nav-points strong,
.nav-points > div button,
.nav-points > p,
.nav-points li,
.signal-config-card h2,
.chain-node,
.chain-node small,
.battery-values span,
.insight,
.radio-advanced summary,
.antenna-values dt,
.antenna-values dd,
.signal-head strong,
.tech-list dt,
.tech-list dd,
.frequency-advisor summary,
.frequency-advisor > p,
.frequency-advisor > small,
.checklist strong {
  font-size: var(--type-label);
}

.signal-config-card h2,
.terrain-card h2,
.readiness-card h2,
.battery-card h3,
.antenna-card h3 {
  line-height: 1.25;
}

.metric-grid article > span,
.weather-grid article > span {
  font-size: var(--type-micro);
}

.maps-command-dock button {
  width: 88px;
  min-width: 88px;
  min-height: 66px;
  grid-template-rows: 29px auto;
}

.maps-command-dock strong {
  font-size: 0.7rem;
  line-height: 1.1;
}

.maps-command-dock small {
  font-size: var(--type-micro);
}

.map-stage > .maps-status {
  font-size: var(--type-label);
  line-height: 1.45;
}

.map-mode strong,
.fit-route {
  font-size: var(--type-micro);
}

.leaflet-control-attribution {
  font-size: 11px !important;
}

/* Harmonics */
.harmonics-shell {
  grid-template-columns: 340px minmax(560px, 1fr) 370px;
}

.vtx-tabs button span,
.vtx-tabs button small,
.equipment-card header b,
.carrier-toggle b,
.model-note,
.advanced-card summary,
.advanced-card p,
.compatibility-score span,
.pair-readout span,
.intersection-card > header b,
.intersection-verdict span,
.intersection-verdict em,
.signal-overview > div > span,
.receiver-gate span,
.signal-source,
.signal-process span,
.lane-labels,
.lane-node span,
.lane-node strong,
.lane-distance em,
.spectrum-legend,
.spectrum-card footer,
.harmonics-card header b,
.product-status,
.recommendation-row > b,
.recommendation-row strong,
.recommendation-row span,
.recommendation-row button,
.recommendation-empty,
.engineering-note,
.metrics-card span,
.metrics-card strong,
.sources-card summary,
.sources-card a,
.sources-card a span,
.sources-card p {
  font-size: var(--type-micro);
}

.carrier-toggle b {
  font-size: var(--type-micro) !important;
}

.autosave-note strong {
  font-size: var(--type-micro);
}

.equipment-card h2,
.compatibility-card p,
.intersection-verdict strong,
.receiver-gate strong,
.engineering-card h3 {
  font-size: var(--type-label);
}

.harmonics-card td {
  font-size: var(--type-label);
}

.harmonics-card th {
  font-size: var(--type-micro);
}

.recommendation-row {
  grid-template-columns: 48px minmax(0, 1fr) auto;
  padding: 10px;
}

.recommendation-row button {
  min-height: 34px;
}

/* Weather Window */
.weather-shell {
  grid-template-columns: 370px minmax(0, 1fr);
}

.control-panel {
  padding-inline: 21px;
}

.inline-status,
.readiness-ring span,
.hero-meta span,
.current-grid span,
.current-grid small,
.day-tabs strong,
.day-tabs small,
.chart-legend,
.window-rank,
.window-copy small,
.risk-item strong,
.hourly-card > header > strong,
.hourly-head,
.hour-row {
  font-size: var(--type-micro);
}

.hero-copy p,
.window-copy strong,
.risk-item span,
.empty-state {
  font-size: var(--type-label);
}

.current-grid article {
  min-height: 94px;
}

.current-grid strong {
  font-size: 1.1rem;
}

.day-tabs {
  grid-template-columns: repeat(7, minmax(96px, 1fr));
}

.day-tabs button {
  min-height: 66px;
}

.day-tabs strong {
  font-size: 0.7rem;
}

.day-tabs span {
  font-size: 1.08rem;
}

.window-item {
  min-height: 48px;
}

.hourly-head,
.hour-row {
  min-width: 790px;
  grid-template-columns: 64px 64px repeat(5, minmax(86px, 1fr));
}

.hour-row {
  min-height: 42px;
}

@media (max-width: 1320px) {
  .harmonics-shell {
    height: auto;
    min-height: 100vh;
    grid-template-columns: 340px minmax(560px, 1fr);
  }

  .recommendations-panel {
    grid-column: 1 / -1;
    border-top: 1px solid var(--line);
    border-left: 0;
  }

  .recommendation-list {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 1180px) {
  .weather-shell {
    grid-template-columns: 340px minmax(0, 1fr);
  }

  .current-grid {
    grid-template-columns: repeat(3, 1fr);
  }
}

@media (max-width: 900px) {
  .app-grid {
    width: min(620px, 92vw);
    grid-template-columns: repeat(3, minmax(126px, 1fr));
  }
}

@media (max-width: 820px) {
  .harmonics-shell,
  .weather-shell {
    display: block;
  }

  .recommendation-list {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 760px) {
  .planner-panel,
  .analysis-panel {
    right: 8px;
    left: 8px;
    width: auto;
  }

  .maps-command-dock button {
    width: 82px;
    min-width: 82px;
  }
}

@media (max-width: 640px) {
  .app-grid {
    width: min(390px, 94vw);
    grid-template-columns: repeat(2, minmax(132px, 1fr));
  }

  .desktop-topbar {
    height: 60px;
  }
}

@media (max-width: 560px) {
  html {
    font-size: 17px;
  }

  .weather-brand,
  .maps-brand,
  .harmonics-brand {
    font-size: 0.76rem;
  }

  .current-grid article {
    min-height: 88px;
  }

  .two-columns {
    grid-template-columns: 1fr;
  }
}
