/* WebFTR v24.58 AudioFFT Plugin Only Cleanup
   Local, reusable Audio-FFT visual plugin. No external tiles/APIs/CDNs/fonts/libs.
   FT8 uses this plugin as the only AudioFFT renderer and feeds live levels centrally. */
.webftr-plugin-audiofft.audiofft-wrap,
.webftr-plugin-audiofft .audiofft-wrap{
  margin:8px 0 16px;
  padding:13px 14px 16px;
  border:1px solid rgba(0,232,255,.42);
  background:
    radial-gradient(circle at 18% 0%, rgba(0,232,255,.14), transparent 42%),
    radial-gradient(circle at 90% 20%, rgba(255,179,62,.12), transparent 38%),
    linear-gradient(180deg,rgba(0,10,16,.98),rgba(0,0,6,.98));
  box-shadow:0 0 20px rgba(0,232,255,.10),0 0 28px rgba(255,179,62,.08),inset 0 0 24px rgba(0,232,255,.045);
  color:#dffcff;
}
.webftr-plugin-audiofft .audiofft-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
  padding-bottom:8px;
  border-bottom:1px solid rgba(0,232,255,.16);
}
.webftr-plugin-audiofft .audiofft-label{
  display:inline-flex;
  align-items:center;
  gap:8px;
  color:#9ffcff;
  text-shadow:0 0 10px rgba(0,232,255,.35);
  letter-spacing:.10em;
  font-size:12px;
}
.webftr-plugin-audiofft .audiofft-label:before{
  content:attr(data-ft-mode) "-DECODE";
  display:inline-block;
  border:1px solid rgba(0,232,255,.48);
  background:rgba(0,45,55,.44);
  color:#9ffcff;
  box-shadow:0 0 10px rgba(0,232,255,.12);
  padding:3px 7px;
  font-size:10px;
  letter-spacing:.08em;
}
.webftr-plugin-audiofft .audioPeakBadge{
  color:#ffd18f;
  border:1px solid rgba(255,179,62,.62);
  background:rgba(70,32,0,.44);
  box-shadow:0 0 14px rgba(255,179,62,.14);
  padding:3px 8px;
  font-size:11px;
  white-space:nowrap;
}
.webftr-plugin-audiofft .audiofft-grid{
  display:grid;
  grid-template-columns:64px minmax(0,1fr);
  gap:9px;
  margin-top:8px;
  align-items:stretch;
}
.webftr-plugin-audiofft canvas.audiofft{
  display:block;
  width:100%;
  height:142px;
  border:1px solid rgba(0,232,255,.28);
  background:#000003;
  box-shadow:inset 0 0 18px rgba(0,232,255,.06),0 0 14px rgba(0,232,255,.08);
}
.webftr-plugin-audiofft.audio-muted canvas.audiofft{
  opacity:.34;
  filter:saturate(.5) brightness(.72);
}
.webftr-plugin-audiofft .audioDbScale{
  height:142px;
  display:grid;
  grid-template-rows:repeat(7,1fr);
  align-items:center;
  color:#9ffcff;
  border-right:1px solid rgba(0,232,255,.28);
  text-shadow:0 0 8px rgba(0,232,255,.22);
  font-size:10px;
  font-family:Consolas,monospace;
}
.webftr-plugin-audiofft .audioDbScale span{
  position:relative;
  padding-right:6px;
  text-align:right;
}
.webftr-plugin-audiofft .audioDbScale span:after{
  content:"";
  position:absolute;
  left:100%;
  right:-999px;
  top:50%;
  border-top:1px solid rgba(0,232,255,.28);
  opacity:.38;
}
.webftr-plugin-audiofft .audiofft-bottom{
  display:grid;
  grid-template-columns:minmax(0,1fr) auto;
  gap:12px;
  align-items:center;
  margin-top:12px;
  padding-top:10px;
  border-top:1px solid rgba(0,232,255,.12);
}
.webftr-plugin-audiofft .audioInfoPanel{
  display:grid;
  grid-template-columns:auto minmax(0,1fr) auto minmax(0,1fr);
  gap:4px 8px;
  align-items:center;
  color:#bfefff;
  font-size:10.5px;
}
.webftr-plugin-audiofft .audioInfoPanel b{
  color:#ffd18f;
  text-shadow:0 0 7px rgba(255,179,62,.22);
  font-weight:500;
}
.webftr-plugin-audiofft .audioControlPanel{
  min-width:300px;
}
.webftr-plugin-audiofft .audiofft-toggle-row{
  display:flex;
  justify-content:flex-end;
  align-items:center;
  gap:12px;
}
.webftr-plugin-audiofft .audioModeToggle,
.webftr-plugin-audiofft .audioBtn,
.webftr-plugin-audiofft .speakerBtn{
  border:1px solid rgba(0,232,255,.44);
  background:linear-gradient(180deg,rgba(0,38,50,.94),rgba(0,12,18,.98));
  color:#dffcff;
  font-size:11px;
  font-weight:400;
  letter-spacing:.06em;
  padding:7px 10px;
  cursor:pointer;
  box-shadow:0 0 12px rgba(0,232,255,.10);
}
.webftr-plugin-audiofft .audioBtn.active{
  border-color:rgba(255,179,62,.72);
  background:linear-gradient(180deg,rgba(90,42,0,.95),rgba(20,9,0,.98));
  color:#ffd18f;
  box-shadow:0 0 16px rgba(255,179,62,.18);
}
.webftr-plugin-audiofft .audioBtn.off{
  border-color:rgba(66,214,138,.70);
  background:linear-gradient(180deg,rgba(0,52,28,.94),rgba(0,14,9,.98));
  color:#d6ffe4;
}
.webftr-plugin-audiofft .speakerBtn{
  width:38px;
  min-width:38px;
  height:31px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  padding:0;
}
.webftr-plugin-audiofft .speakerIcon svg{
  width:18px;
  height:18px;
  fill:currentColor;
}
.webftr-plugin-audiofft .speakerBtn.active{
  border-color:rgba(255,179,62,.78);
  color:#ffd18f;
}
.webftr-plugin-audiofft .speakerBtn.off{
  color:#b8f8ff;
}
.webftr-plugin-audiofft .speakerOn .slash{display:none;}
.webftr-plugin-audiofft .audioInfoIcon{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:20px;
  height:20px;
  border:1px solid rgba(255,179,62,.55);
  color:#ffd18f;
  border-radius:50%;
  font-size:11px;
  box-shadow:0 0 10px rgba(255,179,62,.12);
}
@media(max-width:800px){
  .webftr-plugin-audiofft .audiofft-bottom{grid-template-columns:1fr;align-items:start;}
  .webftr-plugin-audiofft .audioControlPanel{min-width:0;}
  .webftr-plugin-audiofft .audiofft-toggle-row{justify-content:flex-start;flex-wrap:wrap;}
  .webftr-plugin-audiofft .audioInfoPanel{grid-template-columns:auto minmax(0,1fr);}
}

/* v24.58: visible FT8 plugin recursion hotfix host/fallback states */
.webftr-audiofft-plugin-host{
  display:block;
  width:100%;
}
.audiofft-plugin-loading{
  margin:16px 0 14px;
  padding:12px 14px;
  border:1px solid rgba(0,232,255,.28);
  background:linear-gradient(180deg,rgba(0,22,34,.80),rgba(0,5,10,.95));
  color:#bffaff;
  font-size:12px;
  letter-spacing:.08em;
  text-transform:uppercase;
  box-shadow:0 0 18px rgba(0,232,255,.08) inset,0 0 16px rgba(0,232,255,.06);
}
.audiofft-plugin-error{
  border-color:rgba(255,88,54,.50);
  color:#ffd0c7;
  background:linear-gradient(180deg,rgba(72,12,4,.88),rgba(12,2,1,.96));
}


/* v25.46: compact, calmer Audio-FFT info strip. */
.webftr-plugin-audiofft .audiofft-bottom{grid-template-columns:minmax(0,1fr) auto!important;gap:8px!important;margin-top:8px!important;padding-top:7px!important;align-items:start!important;}
.webftr-plugin-audiofft .audioInfoPanel{display:flex!important;flex-wrap:wrap!important;gap:5px!important;font-size:9.6px!important;line-height:1.1!important;max-width:100%;overflow:hidden;}
.webftr-plugin-audiofft .audioInfoPanel span{display:inline-flex;align-items:center;min-height:20px;padding:2px 6px;border:1px solid rgba(0,232,255,.18);background:rgba(0,22,28,.42);white-space:nowrap;}
.webftr-plugin-audiofft .audioInfoPanel b{font-size:9px!important;letter-spacing:.05em!important;}
.webftr-plugin-audiofft .audioModeHint{max-width:280px;overflow:hidden;text-overflow:ellipsis;}
.webftr-plugin-audiofft .audioControlPanel{min-width:250px!important;}
.webftr-plugin-audiofft .audiofft-toggle-row{gap:7px!important;}

/* v25.48: AudioFFT controls use the same compact height family as S-Meter toggles. */
.webftr-plugin-audiofft .audioModeToggle,
.webftr-plugin-audiofft .audioInfoIcon,
.webftr-plugin-audiofft .audioBtn,
.webftr-plugin-audiofft .speakerBtn{height:30px!important;min-height:30px!important;line-height:28px!important;border-radius:0!important;padding-top:0!important;padding-bottom:0!important;align-items:center!important;justify-content:center!important;box-sizing:border-box!important;}
.webftr-plugin-audiofft .audioModeToggle{min-width:116px!important;padding-left:9px!important;padding-right:9px!important;font-size:9.8px!important;}
.webftr-plugin-audiofft .audioInfoIcon{width:30px!important;min-width:30px!important;font-size:10px!important;}
.webftr-plugin-audiofft .audioBtn{min-width:98px!important;padding-left:9px!important;padding-right:9px!important;font-size:9.8px!important;}
.webftr-plugin-audiofft .speakerBtn{width:36px!important;min-width:36px!important;padding:0!important;}
.webftr-plugin-audiofft .speakerIcon svg{width:17px!important;height:17px!important;}

/* v25.52: Audio-FFT Monitor Widget Cleanup
   - Info button is green.
   - Speaker button sits before AUDIO-FFT toggle via plugin markup.
   - Long hint text is removed from the rendered info panel.
   - Frames/rate/buffer values are short numeric widgets to prevent content jumping. */
.webftr-plugin-audiofft .audioInfoPanel{
  display:flex!important;
  flex-wrap:wrap!important;
  gap:6px!important;
  align-items:center!important;
  max-width:100%!important;
  overflow:hidden!important;
}
.webftr-plugin-audiofft .audioInfoPanel .audioInfoKey,
.webftr-plugin-audiofft .audioInfoPanel .audioInfoValue{
  display:inline-flex!important;
  align-items:center!important;
  justify-content:center!important;
  min-height:22px!important;
  height:22px!important;
  box-sizing:border-box!important;
  border-radius:0!important;
  white-space:nowrap!important;
  line-height:1!important;
}
.webftr-plugin-audiofft .audioInfoPanel .audioInfoKey{
  padding:0 6px!important;
  border:1px solid rgba(0,232,255,.22)!important;
  background:linear-gradient(180deg,rgba(0,42,54,.62),rgba(0,13,20,.84))!important;
  color:#9ffcff!important;
  font-size:8.8px!important;
  letter-spacing:.07em!important;
  text-transform:uppercase!important;
  box-shadow:inset 0 0 8px rgba(0,232,255,.045)!important;
}
.webftr-plugin-audiofft .audioInfoPanel .audioInfoValue{
  min-width:38px!important;
  padding:0 8px!important;
  border:1px solid rgba(66,214,138,.46)!important;
  background:linear-gradient(180deg,rgba(0,54,28,.78),rgba(0,14,9,.94))!important;
  color:#dfffe9!important;
  font-family:Consolas,monospace!important;
  font-size:10px!important;
  box-shadow:0 0 10px rgba(66,214,138,.10), inset 0 0 8px rgba(66,214,138,.045)!important;
}
.webftr-plugin-audiofft[data-audio-monitor="off"] .audioMonitorStatus{
  border-color:rgba(0,232,255,.42)!important;
  background:linear-gradient(180deg,rgba(0,42,58,.78),rgba(0,12,18,.95))!important;
  color:#bffaff!important;
}
.webftr-plugin-audiofft[data-audio-monitor="on"] .audioMonitorStatus{
  border-color:rgba(66,255,138,.58)!important;
  background:linear-gradient(180deg,rgba(0,68,34,.86),rgba(0,18,9,.96))!important;
  color:#d6ffe4!important;
}
.webftr-plugin-audiofft .audioModeHint{display:none!important;}
.webftr-plugin-audiofft .audioInfoIcon,
#card_FT8 .webftr-plugin-audiofft .audioInfoIcon,
#card_FT4 .webftr-plugin-audiofft .audioInfoIcon,
#card_JS8 .webftr-plugin-audiofft .audioInfoIcon{
  border-color:rgba(66,255,138,.78)!important;
  color:#d6ffe4!important;
  background:linear-gradient(180deg,rgba(0,96,42,.96),rgba(0,39,18,.98))!important;
  box-shadow:0 0 14px rgba(66,255,138,.22), inset 0 0 10px rgba(255,255,255,.04)!important;
}
.webftr-plugin-audiofft .audioInfoIcon:hover,
.webftr-plugin-audiofft .audioInfoIcon:focus,
#card_FT8 .webftr-plugin-audiofft .audioInfoIcon:hover,
#card_FT4 .webftr-plugin-audiofft .audioInfoIcon:hover,
#card_JS8 .webftr-plugin-audiofft .audioInfoIcon:hover,
#card_FT8 .webftr-plugin-audiofft .audioInfoIcon:focus,
#card_FT4 .webftr-plugin-audiofft .audioInfoIcon:focus,
#card_JS8 .webftr-plugin-audiofft .audioInfoIcon:focus{
  border-color:rgba(96,255,164,.96)!important;
  color:#ffffff!important;
  background:linear-gradient(180deg,rgba(0,124,52,.98),rgba(0,52,24,.99))!important;
  box-shadow:0 0 18px rgba(66,255,138,.32), inset 0 0 12px rgba(255,255,255,.06)!important;
  outline:0!important;
}
@media(max-width:800px){
  .webftr-plugin-audiofft .audioInfoPanel{gap:5px!important;}
  .webftr-plugin-audiofft .audioInfoPanel .audioInfoKey{font-size:8.2px!important;padding:0 5px!important;}
  .webftr-plugin-audiofft .audioInfoPanel .audioInfoValue{font-size:9.4px!important;padding:0 6px!important;min-width:32px!important;}
}

/* v25.64: flatter speaker status glyph. */
.webftr-plugin-audiofft .speakerIcon svg{stroke-linecap:square!important;stroke-linejoin:miter!important;}
.webftr-plugin-audiofft .speakerIcon .speakerBase{fill:currentColor!important;stroke:currentColor!important;opacity:.94!important;}
.webftr-plugin-audiofft .speakerIcon .wave1,
.webftr-plugin-audiofft .speakerIcon .wave2{fill:none!important;stroke:currentColor!important;stroke-width:1.9!important;opacity:.92!important;}
.webftr-plugin-audiofft .speakerIcon .slash{fill:none!important;stroke:currentColor!important;stroke-width:2.15!important;opacity:.98!important;}
.webftr-plugin-audiofft .speakerOff .wave1,
.webftr-plugin-audiofft .speakerOff .wave2{display:none!important;}
.webftr-plugin-audiofft .speakerOn .wave1,
.webftr-plugin-audiofft .speakerOn .wave2{display:block!important;}
.webftr-plugin-audiofft .speakerOn .slash{display:none!important;}

/* v25.98/v25.99: AudioFFT Ice Blue Scope visual polish.
   Pure plugin rendering/style update only. No SDR, audio backend, decoder,
   JS8 runtime, DAB removal, or hardware-locking behavior is changed. */
.webftr-plugin-audiofft{
  border-color:rgba(162,236,255,.48)!important;
  background:
    radial-gradient(circle at 50% 0%,rgba(210,246,255,.105),rgba(0,66,130,.045) 36%,rgba(0,0,6,0) 72%),
    linear-gradient(180deg,rgba(3,18,29,.96),rgba(0,5,13,.985) 48%,rgba(0,1,6,.995))!important;
  box-shadow:
    0 0 0 1px rgba(255,255,255,.025) inset,
    0 0 22px rgba(0,186,255,.10),
    0 0 42px rgba(0,72,180,.10),
    inset 0 0 24px rgba(0,186,255,.06)!important;
}
.webftr-plugin-audiofft .audiofft-head{
  padding:2px 2px 5px!important;
  border-bottom:1px solid rgba(150,232,255,.105)!important;
}
.webftr-plugin-audiofft .audiofft-label{
  color:#eefcff!important;
  letter-spacing:.105em!important;
  text-shadow:0 0 7px rgba(210,246,255,.42),0 0 16px rgba(0,186,255,.22)!important;
}
.webftr-plugin-audiofft .audiofft-label:after{
  content:" · ICE BLUE SCOPE";
  color:#8fe8ff!important;
  text-shadow:0 0 10px rgba(0,186,255,.42)!important;
  font-weight:400!important;
}
.webftr-plugin-audiofft .audioPeakBadge{
  border-color:rgba(210,246,255,.52)!important;
  background:linear-gradient(180deg,rgba(16,64,92,.88),rgba(0,14,27,.96))!important;
  color:#f7fdff!important;
  box-shadow:0 0 15px rgba(0,186,255,.20),inset 0 0 10px rgba(255,255,255,.055)!important;
  text-shadow:0 0 8px rgba(210,246,255,.45)!important;
}
.webftr-plugin-audiofft .audiofft-grid{
  grid-template-columns:64px minmax(0,1fr)!important;
  gap:9px!important;
  margin-top:8px!important;
}
.webftr-plugin-audiofft .audioDbScale{
  height:154px!important;
  color:#dffaff!important;
  border-right:1px solid rgba(150,232,255,.34)!important;
  background:linear-gradient(180deg,rgba(8,34,52,.42),rgba(0,9,18,.24))!important;
  box-shadow:inset -8px 0 20px rgba(0,186,255,.045)!important;
  text-shadow:0 0 8px rgba(210,246,255,.32)!important;
}
.webftr-plugin-audiofft .audioDbScale span:after{
  border-top-color:rgba(150,232,255,.24)!important;
  opacity:.58!important;
}
.webftr-plugin-audiofft canvas.audiofft,
#card_FT8 .webftr-plugin-audiofft canvas.audiofft,
#card_FT4 .webftr-plugin-audiofft canvas.audiofft,
#card_JS8 .webftr-plugin-audiofft canvas.audiofft{
  height:154px!important;
  border-color:rgba(190,242,255,.44)!important;
  background:#00050d!important;
  box-shadow:
    inset 0 0 0 1px rgba(255,255,255,.035),
    inset 0 0 28px rgba(0,186,255,.12),
    0 0 18px rgba(0,186,255,.14),
    0 0 34px rgba(0,70,180,.09)!important;
}
.webftr-plugin-audiofft .audiofft-bottom{
  border-top-color:rgba(150,232,255,.15)!important;
}
.webftr-plugin-audiofft .audioInfoPanel .audioInfoKey{
  border-color:rgba(150,232,255,.32)!important;
  background:linear-gradient(180deg,rgba(10,54,78,.72),rgba(0,17,30,.90))!important;
  color:#c9f6ff!important;
}
.webftr-plugin-audiofft .audioInfoPanel .audioInfoValue{
  border-color:rgba(156,238,255,.42)!important;
  background:linear-gradient(180deg,rgba(5,52,82,.78),rgba(0,16,32,.94))!important;
  color:#f1fdff!important;
  box-shadow:0 0 10px rgba(0,186,255,.12), inset 0 0 8px rgba(210,246,255,.04)!important;
}
.webftr-plugin-audiofft .audioModeToggle,
.webftr-plugin-audiofft .audioBtn,
.webftr-plugin-audiofft .speakerBtn{
  border-color:rgba(150,232,255,.50)!important;
  background:linear-gradient(180deg,rgba(10,62,88,.94),rgba(0,17,28,.98))!important;
  color:#f1fdff!important;
  box-shadow:0 0 13px rgba(0,186,255,.15),inset 0 0 10px rgba(255,255,255,.035)!important;
  text-shadow:0 0 7px rgba(210,246,255,.25)!important;
}
.webftr-plugin-audiofft .audioBtn.active{
  border-color:rgba(238,252,255,.72)!important;
  background:linear-gradient(180deg,rgba(18,82,112,.96),rgba(0,25,44,.99))!important;
  color:#ffffff!important;
  box-shadow:0 0 18px rgba(210,246,255,.24),0 0 30px rgba(0,186,255,.15),inset 0 0 10px rgba(255,255,255,.055)!important;
}
.webftr-plugin-audiofft .audioBtn.off{
  border-color:rgba(66,214,138,.68)!important;
  background:linear-gradient(180deg,rgba(0,62,36,.94),rgba(0,17,12,.98))!important;
  color:#ddffe9!important;
}
.webftr-plugin-audiofft .speakerBtn.active{
  border-color:rgba(238,252,255,.72)!important;
  color:#ffffff!important;
}
.webftr-plugin-audiofft.audio-muted canvas.audiofft{
  opacity:.42!important;
  filter:saturate(.62) brightness(.70)!important;
}
@media(max-width:760px){
  #card_FT4 .webftr-plugin-audiofft .audioDbScale,
  #card_JS8 .webftr-plugin-audiofft .audioDbScale{
    height:118px!important;
  }
  #card_FT4 .webftr-plugin-audiofft canvas.audiofft,
  #card_JS8 .webftr-plugin-audiofft canvas.audiofft,
  #card_FT4 .webftr-plugin-audiofft .audiofft,
  #card_JS8 .webftr-plugin-audiofft .audiofft{
    height:118px!important;
  }
}


/* v25.99: Peak Glow Monitor Cleanup.
   Peak/Gesamtbandbreite-Hoeren controls are intentionally removed from the
   plugin markup. Speaker monitor remains, fixed to clean USB-positive audio. */
.webftr-plugin-audiofft .audioModeToggle,
.webftr-plugin-audiofft .audioInfoIcon{
  display:none!important;
}
.webftr-plugin-audiofft .audiofft-toggle-row.audiofft-monitor-fixed{
  gap:9px!important;
  align-items:center!important;
}
.webftr-plugin-audiofft .audioMonitorFixedBadge{
  display:inline-flex!important;
  align-items:center!important;
  justify-content:center!important;
  height:30px!important;
  min-height:30px!important;
  padding:0 10px!important;
  border:1px solid rgba(210,246,255,.50)!important;
  background:linear-gradient(180deg,rgba(14,68,96,.86),rgba(0,18,32,.96))!important;
  color:#f6fdff!important;
  font-size:9.8px!important;
  line-height:1!important;
  letter-spacing:.075em!important;
  text-shadow:0 0 8px rgba(210,246,255,.36),0 0 16px rgba(0,186,255,.18)!important;
  box-shadow:0 0 14px rgba(0,186,255,.17),inset 0 0 10px rgba(255,255,255,.045)!important;
  white-space:nowrap!important;
}
.webftr-plugin-audiofft .audioPeakBadge{
  border-color:rgba(238,252,255,.64)!important;
  box-shadow:0 0 20px rgba(210,246,255,.26),0 0 34px rgba(0,186,255,.18),inset 0 0 12px rgba(255,255,255,.07)!important;
}
.webftr-plugin-audiofft canvas.audiofft{
  image-rendering:auto!important;
}
@media(max-width:760px){
  .webftr-plugin-audiofft .audioMonitorFixedBadge{font-size:8.8px!important;padding:0 7px!important;}
}

/* v26.04: AudioFFT Lean Performance Guard.
   Performance-first visual rollback after v26.03 overloaded the page.
   Keep the IceScope character, but remove expensive glow/shadow load. */
.webftr-plugin-audiofft{
  border-color:rgba(150,232,255,.34)!important;
  background:linear-gradient(180deg,rgba(3,18,28,.96),rgba(0,5,12,.99))!important;
  box-shadow:0 0 12px rgba(0,186,255,.055), inset 0 0 10px rgba(0,186,255,.035)!important;
  contain:layout paint style!important;
}
.webftr-plugin-audiofft .audiofft-head{
  border-bottom-color:rgba(150,232,255,.10)!important;
}
.webftr-plugin-audiofft .audioPeakBadge{
  border-color:rgba(170,236,255,.42)!important;
  background:linear-gradient(180deg,rgba(12,54,78,.78),rgba(0,15,28,.94))!important;
  color:#eefcff!important;
  box-shadow:0 0 8px rgba(0,186,255,.09)!important;
  text-shadow:none!important;
}
.webftr-plugin-audiofft .audiofft-grid{
  margin-top:7px!important;
}
.webftr-plugin-audiofft .audioDbScale,
#card_FT8 .webftr-plugin-audiofft .audioDbScale,
#card_FT4 .webftr-plugin-audiofft .audioDbScale,
#card_JS8 .webftr-plugin-audiofft .audioDbScale{
  height:128px!important;
  background:rgba(0,14,24,.38)!important;
  box-shadow:none!important;
  text-shadow:none!important;
}
.webftr-plugin-audiofft canvas.audiofft,
#card_FT8 .webftr-plugin-audiofft canvas.audiofft,
#card_FT4 .webftr-plugin-audiofft canvas.audiofft,
#card_JS8 .webftr-plugin-audiofft canvas.audiofft{
  height:128px!important;
  background:#020914!important;
  box-shadow:inset 0 0 10px rgba(0,186,255,.055)!important;
  image-rendering:auto!important;
}
.webftr-plugin-audiofft .audiofft-bottom{
  gap:8px!important;
  margin-top:8px!important;
  padding-top:7px!important;
  border-top-color:rgba(150,232,255,.10)!important;
}
.webftr-plugin-audiofft .audioInfoPanel{
  gap:6px!important;
}
.webftr-plugin-audiofft .audioInfoPanel .audioInfoKey{
  border-color:rgba(150,232,255,.26)!important;
  background:linear-gradient(180deg,rgba(9,48,70,.72),rgba(0,17,28,.92))!important;
  color:#c9f6ff!important;
  box-shadow:none!important;
  text-shadow:none!important;
}
.webftr-plugin-audiofft .audioInfoPanel .audioInfoValue{
  border-color:rgba(150,232,255,.36)!important;
  background:linear-gradient(180deg,rgba(5,46,72,.72),rgba(0,14,28,.94))!important;
  color:#f0fcff!important;
  box-shadow:0 0 6px rgba(0,186,255,.07)!important;
  text-shadow:none!important;
}
.webftr-plugin-audiofft[data-audio-monitor="on"] .audioMonitorStatus{
  border-color:rgba(104,232,176,.48)!important;
  background:linear-gradient(180deg,rgba(0,70,46,.78),rgba(0,18,13,.96))!important;
  color:#e6fff3!important;
}
.webftr-plugin-audiofft .audioMonitorFrames{
  border-color:rgba(126,218,255,.34)!important;
}
.webftr-plugin-audiofft .audioMonitorRate{
  border-color:rgba(190,236,255,.36)!important;
}
.webftr-plugin-audiofft .audioMonitorBuffer{
  border-color:rgba(170,198,255,.36)!important;
}
.webftr-plugin-audiofft .audioMonitorFixedBadge{
  display:none!important;
}
.webftr-plugin-audiofft .audiofft-toggle-row.audiofft-monitor-fixed{
  gap:8px!important;
}
.webftr-plugin-audiofft .audioModeToggle,
.webftr-plugin-audiofft .audioBtn,
.webftr-plugin-audiofft .speakerBtn{
  box-shadow:0 0 7px rgba(0,186,255,.07)!important;
  text-shadow:none!important;
}
.webftr-plugin-audiofft .audioBtn.active,
.webftr-plugin-audiofft .speakerBtn.active{
  box-shadow:0 0 9px rgba(190,242,255,.11)!important;
}
@media(max-width:760px){
  #card_FT4 .webftr-plugin-audiofft .audioDbScale,
  #card_JS8 .webftr-plugin-audiofft .audioDbScale,
  #card_FT4 .webftr-plugin-audiofft canvas.audiofft,
  #card_JS8 .webftr-plugin-audiofft canvas.audiofft,
  #card_FT4 .webftr-plugin-audiofft .audiofft,
  #card_JS8 .webftr-plugin-audiofft .audiofft{
    height:112px!important;
  }
}


/* v26.05: AudioFFT Badge Color Polish.
   CSS-only badge refresh, still lean: no heavy filters/animations/shadows. */
.webftr-plugin-audiofft .audioInfoPanel{
  gap:8px!important;
  row-gap:7px!important;
}
.webftr-plugin-audiofft .audioInfoPanel .audioInfoKey,
.webftr-plugin-audiofft .audioInfoPanel .audioInfoValue{
  min-height:25px!important;
  height:25px!important;
  padding-left:9px!important;
  padding-right:9px!important;
  font-size:10.2px!important;
}
.webftr-plugin-audiofft .audioInfoPanel .audioInfoKey{
  border-color:rgba(0,232,255,.42)!important;
  background:linear-gradient(180deg,rgba(0,74,96,.78),rgba(0,19,34,.95))!important;
  color:#dffbff!important;
}
.webftr-plugin-audiofft .audioMonitorStatus{
  min-width:52px!important;
  border-color:rgba(104,232,176,.54)!important;
  background:linear-gradient(180deg,rgba(0,86,54,.82),rgba(0,22,16,.97))!important;
  color:#ecfff5!important;
}
.webftr-plugin-audiofft[data-audio-monitor="off"] .audioMonitorStatus{
  border-color:rgba(255,179,62,.50)!important;
  background:linear-gradient(180deg,rgba(96,48,0,.82),rgba(25,10,0,.97))!important;
  color:#ffe2ad!important;
}
.webftr-plugin-audiofft[data-audio-monitor="on"] .audioMonitorStatus{
  border-color:rgba(104,232,176,.58)!important;
  background:linear-gradient(180deg,rgba(0,96,58,.84),rgba(0,24,16,.97))!important;
  color:#ecfff5!important;
}
.webftr-plugin-audiofft .audioMonitorFrames{
  min-width:54px!important;
  border-color:rgba(0,232,255,.52)!important;
  background:linear-gradient(180deg,rgba(0,82,116,.82),rgba(0,20,42,.96))!important;
  color:#e8fbff!important;
}
.webftr-plugin-audiofft .audioMonitorRate{
  min-width:58px!important;
  border-color:rgba(255,179,62,.54)!important;
  background:linear-gradient(180deg,rgba(104,54,0,.82),rgba(24,12,0,.96))!important;
  color:#ffe5ba!important;
}
.webftr-plugin-audiofft .audioMonitorBuffer{
  min-width:58px!important;
  border-color:rgba(170,198,255,.52)!important;
  background:linear-gradient(180deg,rgba(42,72,126,.82),rgba(8,20,54,.96))!important;
  color:#eef4ff!important;
}
.webftr-plugin-audiofft .audioMonitorFixedBadge{
  display:none!important;
}
@media(max-width:760px){
  .webftr-plugin-audiofft .audioInfoPanel{gap:6px!important;}
  .webftr-plugin-audiofft .audioInfoPanel .audioInfoKey,
  .webftr-plugin-audiofft .audioInfoPanel .audioInfoValue{
    min-height:23px!important;
    height:23px!important;
    padding-left:7px!important;
    padding-right:7px!important;
    font-size:9.4px!important;
  }
}


/* v26.06: compact, low-cost AudioFFT controls and badges.
   - Toggle now hides/shows the actual scope body instead of only greying it.
   - MONITOR and AUS/EIN info badges under the scope are removed from markup.
   - Frames/kHz/KiB are merged label+value badges in one orange badge each.
   - PEAK badge is red; ICE BLUE SCOPE suffix is suppressed. */
.webftr-plugin-audiofft{
  contain:layout paint style;
}
.webftr-plugin-audiofft.audiofft-collapsed{
  margin-bottom:10px!important;
}
.webftr-plugin-audiofft .audiofft-head{
  display:grid!important;
  grid-template-columns:auto minmax(120px,auto) auto!important;
  align-items:center!important;
  gap:8px!important;
}
.webftr-plugin-audiofft .audiofft-label:after{
  content:""!important;
  display:none!important;
}
.webftr-plugin-audiofft .audioControlPanelTop{
  min-width:0!important;
  justify-self:end!important;
}
.webftr-plugin-audiofft .audiofft-body-hidden{
  display:none!important;
}
.webftr-plugin-audiofft .audiofft-bottom{
  grid-template-columns:1fr!important;
  margin-top:8px!important;
  padding-top:7px!important;
}
.webftr-plugin-audiofft .audioInfoPanelCompact{
  display:flex!important;
  flex-wrap:wrap!important;
  gap:8px!important;
  align-items:center!important;
}
.webftr-plugin-audiofft .audioInfoPanelCompact .audioInfoBadge{
  display:inline-flex!important;
  align-items:center!important;
  justify-content:center!important;
  gap:7px!important;
  min-height:28px!important;
  height:28px!important;
  padding:0 11px!important;
  border:1px solid rgba(255,179,62,.58)!important;
  background:
    linear-gradient(180deg,rgba(124,58,0,.88),rgba(34,16,0,.96))!important;
  color:#fff2ce!important;
  box-shadow:0 0 13px rgba(255,179,62,.14), inset 0 0 8px rgba(255,255,255,.045)!important;
  font-family:Consolas,monospace!important;
  font-size:11px!important;
  line-height:1!important;
  letter-spacing:.035em!important;
  white-space:nowrap!important;
}
.webftr-plugin-audiofft .audioInfoPanelCompact .audioInfoBadge b{
  color:#ffe0a0!important;
  font-family:Arial,Helvetica,sans-serif!important;
  font-size:10px!important;
  font-weight:900!important;
  letter-spacing:.05em!important;
  text-transform:none!important;
  text-shadow:0 0 7px rgba(255,179,62,.20)!important;
}
.webftr-plugin-audiofft .audioInfoPanelCompact .audioInfoBadge em{
  color:#ffffff!important;
  font-style:normal!important;
  font-weight:900!important;
  text-shadow:0 0 8px rgba(255,220,140,.30)!important;
}
.webftr-plugin-audiofft .audioPeakBadge{
  border-color:rgba(255,72,72,.72)!important;
  background:linear-gradient(180deg,rgba(130,18,18,.92),rgba(44,0,0,.98))!important;
  color:#fff2f2!important;
  box-shadow:0 0 14px rgba(255,64,64,.20), inset 0 0 8px rgba(255,255,255,.05)!important;
  text-shadow:0 0 8px rgba(255,92,92,.34)!important;
}
@media(max-width:760px){
  .webftr-plugin-audiofft .audiofft-head{
    grid-template-columns:1fr!important;
    align-items:start!important;
  }
  .webftr-plugin-audiofft .audioControlPanelTop{
    justify-self:start!important;
  }
  .webftr-plugin-audiofft .audioInfoPanelCompact .audioInfoBadge{
    min-height:26px!important;
    height:26px!important;
    padding:0 9px!important;
    font-size:10px!important;
  }
}


/* v26.26: AudioFFT Lite Browser Performance Polish.
   Lower visual height, fewer paint effects and no expensive glow/shadow overlays. */
.webftr-plugin-audiofft[data-webftr-plugin="audiofft"]{
  contain:layout paint style!important;
}
.webftr-plugin-audiofft .audiofft-grid{
  min-height:96px!important;
}
.webftr-plugin-audiofft canvas.audiofft,
#card_FT8 .webftr-plugin-audiofft canvas.audiofft,
#card_FT4 .webftr-plugin-audiofft canvas.audiofft,
#card_JS8 .webftr-plugin-audiofft canvas.audiofft{
  height:96px!important;
  min-height:96px!important;
  box-shadow:inset 0 0 0 1px rgba(0,210,255,.16)!important;
  filter:none!important;
}
.webftr-plugin-audiofft .audiofft-grid,
.webftr-plugin-audiofft canvas.audiofft{
  background:#030812!important;
}
.webftr-plugin-audiofft .audioDbScale span{
  text-shadow:none!important;
}
@media(max-width:760px){
  .webftr-plugin-audiofft .audiofft-grid{min-height:86px!important;}
  .webftr-plugin-audiofft canvas.audiofft,
  #card_FT8 .webftr-plugin-audiofft canvas.audiofft,
  #card_FT4 .webftr-plugin-audiofft canvas.audiofft,
  #card_JS8 .webftr-plugin-audiofft canvas.audiofft{height:86px!important;min-height:86px!important;}
}

/* v26.27: AudioFFT Scope-Line Ultra-Lite Polish.
   The canvas no longer paints a per-frame background/grid/bars/fill/glow. CSS provides the static scope surface. */
.webftr-plugin-audiofft[data-audiofft-renderer="scope-line"],
.webftr-plugin-audiofft[data-audiofft-scope="1"]{
  contain:layout paint style!important;
}
.webftr-plugin-audiofft[data-audiofft-renderer="scope-line"] .audiofft-grid,
.webftr-plugin-audiofft[data-audiofft-scope="1"] .audiofft-grid{
  min-height:78px!important;
  grid-template-columns:54px minmax(0,1fr)!important;
}
.webftr-plugin-audiofft[data-audiofft-renderer="scope-line"] canvas.audiofft,
.webftr-plugin-audiofft[data-audiofft-scope="1"] canvas.audiofft,
#card_FT8 .webftr-plugin-audiofft[data-audiofft-renderer="scope-line"] canvas.audiofft,
#card_FT4 .webftr-plugin-audiofft[data-audiofft-renderer="scope-line"] canvas.audiofft,
#card_JS8 .webftr-plugin-audiofft[data-audiofft-renderer="scope-line"] canvas.audiofft{
  height:78px!important;
  min-height:78px!important;
  background:
    linear-gradient(180deg,rgba(0,12,20,.96),rgba(0,5,10,.98))!important;
  box-shadow:inset 0 0 0 1px rgba(0,210,255,.16)!important;
  filter:none!important;
}
.webftr-plugin-audiofft[data-audiofft-renderer="scope-line"] .audioDbScale,
.webftr-plugin-audiofft[data-audiofft-scope="1"] .audioDbScale{
  height:78px!important;
  font-size:9px!important;
  opacity:.75!important;
}
.webftr-plugin-audiofft[data-audiofft-renderer="scope-line"] .audioDbScale span:after,
.webftr-plugin-audiofft[data-audiofft-scope="1"] .audioDbScale span:after{
  display:none!important;
}
.webftr-plugin-audiofft[data-audiofft-renderer="scope-line"] .audioPeakBadge,
.webftr-plugin-audiofft[data-audiofft-scope="1"] .audioPeakBadge{
  min-width:92px!important;
  text-align:center!important;
}
@media(max-width:760px){
  .webftr-plugin-audiofft[data-audiofft-renderer="scope-line"] .audiofft-grid,
  .webftr-plugin-audiofft[data-audiofft-scope="1"] .audiofft-grid{min-height:70px!important;grid-template-columns:48px minmax(0,1fr)!important;}
  .webftr-plugin-audiofft[data-audiofft-renderer="scope-line"] canvas.audiofft,
  .webftr-plugin-audiofft[data-audiofft-scope="1"] canvas.audiofft{height:70px!important;min-height:70px!important;}
  .webftr-plugin-audiofft[data-audiofft-renderer="scope-line"] .audioDbScale,
  .webftr-plugin-audiofft[data-audiofft-scope="1"] .audioDbScale{height:70px!important;font-size:8px!important;}
}

/* v26.30: Audio-Scope Idle/Quality Polish.
   Slightly richer oscilloscope look while keeping the render path cheap: CSS owns
   the dark grid/scan surface; JS draws only reference lines and one scope path. */
.webftr-plugin-audiofft[data-audiofft-renderer="scope-polish"],
.webftr-plugin-audiofft[data-audiofft-renderer="scope-line"],
.webftr-plugin-audiofft[data-audiofft-scope="1"]{
  contain:layout paint style!important;
}
.webftr-plugin-audiofft[data-audiofft-renderer="scope-polish"] .audiofft-grid,
.webftr-plugin-audiofft[data-audiofft-scope="1"] .audiofft-grid{
  min-height:90px!important;
  grid-template-columns:54px minmax(0,1fr)!important;
}
.webftr-plugin-audiofft[data-audiofft-renderer="scope-polish"] canvas.audiofft,
.webftr-plugin-audiofft[data-audiofft-scope="1"] canvas.audiofft,
#card_FT8 .webftr-plugin-audiofft[data-audiofft-renderer="scope-polish"] canvas.audiofft,
#card_FT4 .webftr-plugin-audiofft[data-audiofft-renderer="scope-polish"] canvas.audiofft,
#card_JS8 .webftr-plugin-audiofft[data-audiofft-renderer="scope-polish"] canvas.audiofft{
  height:90px!important;
  min-height:90px!important;
  background:
    linear-gradient(90deg,rgba(0,232,255,.055) 1px,transparent 1px),
    linear-gradient(180deg,rgba(0,232,255,.045) 1px,transparent 1px),
    radial-gradient(circle at 50% 12%,rgba(0,232,255,.10),transparent 54%),
    linear-gradient(180deg,rgba(1,16,25,.98),rgba(0,5,10,.99))!important;
  background-size:42px 100%,100% 18px,100% 100%,100% 100%!important;
  border:1px solid rgba(0,232,255,.20)!important;
  box-shadow:inset 0 0 0 1px rgba(255,179,62,.06),0 0 10px rgba(0,232,255,.055)!important;
  filter:none!important;
}
.webftr-plugin-audiofft[data-audiofft-renderer="scope-polish"] .audioDbScale,
.webftr-plugin-audiofft[data-audiofft-scope="1"] .audioDbScale{
  height:90px!important;
  font-size:9px!important;
  opacity:.78!important;
}
.webftr-plugin-audiofft[data-audiofft-renderer="scope-polish"] .audioPeakBadge,
.webftr-plugin-audiofft[data-audiofft-scope="1"] .audioPeakBadge{
  min-width:104px!important;
  text-align:center!important;
}
.webftr-plugin-audiofft[data-audiofft-renderer="scope-polish"] .audiofft-label{
  color:#e7fbff!important;
  text-shadow:0 0 8px rgba(0,232,255,.22)!important;
}
@media(max-width:760px){
  .webftr-plugin-audiofft[data-audiofft-renderer="scope-polish"] .audiofft-grid,
  .webftr-plugin-audiofft[data-audiofft-scope="1"] .audiofft-grid{min-height:78px!important;grid-template-columns:48px minmax(0,1fr)!important;}
  .webftr-plugin-audiofft[data-audiofft-renderer="scope-polish"] canvas.audiofft,
  .webftr-plugin-audiofft[data-audiofft-scope="1"] canvas.audiofft{height:78px!important;min-height:78px!important;}
  .webftr-plugin-audiofft[data-audiofft-renderer="scope-polish"] .audioDbScale,
  .webftr-plugin-audiofft[data-audiofft-scope="1"] .audioDbScale{height:78px!important;font-size:8px!important;}
}

/* v26.53: cooler lightweight Audio-Scope badge. CSS-only meter, no extra canvas work. */
.webftr-plugin-audiofft .audioScopeBadgeV2653,
.webftr-plugin-audiofft[data-audiofft-scope="1"] .audioScopeBadgeV2653,
.webftr-plugin-audiofft .audioPeakBadge.audioScopeBadgeV2653{
  --scope-level:0%;
  display:inline-grid!important;
  grid-template-columns:auto auto 46px!important;
  align-items:center!important;
  gap:7px!important;
  min-width:176px!important;
  min-height:28px!important;
  padding:0 9px!important;
  border-color:rgba(0,232,255,.58)!important;
  background:
    linear-gradient(90deg,rgba(0,232,255,.10),transparent 38%),
    linear-gradient(180deg,rgba(0,36,52,.92),rgba(0,8,14,.98))!important;
  color:#eafdff!important;
  box-shadow:0 0 13px rgba(0,232,255,.14),inset 0 0 10px rgba(0,232,255,.05)!important;
  text-shadow:none!important;
}
.webftr-plugin-audiofft .audioScopeBadgeV2653 b{
  color:#ffb33e!important;
  font-family:Arial,Helvetica,sans-serif!important;
  font-size:9.5px!important;
  font-weight:1000!important;
  letter-spacing:.11em!important;
}
.webftr-plugin-audiofft .audioScopeBadgeV2653 em{
  color:#f8ffff!important;
  font-family:Consolas,monospace!important;
  font-style:normal!important;
  font-size:11px!important;
  font-weight:1000!important;
  letter-spacing:.025em!important;
}
.webftr-plugin-audiofft .audioScopeBadgeV2653 i{
  display:block!important;
  width:46px!important;
  height:7px!important;
  border:1px solid rgba(57,255,20,.28)!important;
  background:linear-gradient(90deg,rgba(57,255,20,.88) var(--scope-level),rgba(0,22,12,.95) 0)!important;
  box-shadow:inset 0 0 6px rgba(57,255,20,.08)!important;
}
@media(max-width:760px){.webftr-plugin-audiofft .audioScopeBadgeV2653{min-width:150px!important;grid-template-columns:auto auto!important}.webftr-plugin-audiofft .audioScopeBadgeV2653 i{display:none!important;}}
