/*
 * Remote Station — face avant d'après l'interface « bureau » de RigPlane Core (licence MIT, voir TIERS.md).
 * Les couleurs viennent de rp-tokens.css (--v2-*).
 */
@font-face {
  font-family: 'Roboto Mono';
  font-style: normal;
  font-weight: 100 700;
  font-display: swap;
  src: url('../fonts/roboto-mono-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Roboto Mono';
  font-style: normal;
  font-weight: 100 700;
  font-display: swap;
  src: url('../fonts/roboto-mono-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+1E00-1E9F, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}


:root {
  color-scheme: dark;
  /* Verdana (Windows) : 0 et 8 bien distincts même en petit ; DejaVu Sans en est l'équivalent libre (Linux) */
  --mono: Verdana, 'DejaVu Sans', 'Bitstream Vera Sans', Arial, sans-serif;
  --main: var(--v2-receiver-main-accent);
  --sub: var(--v2-receiver-sub-accent);
  --btn-h: 30px;
}
* { box-sizing: border-box; }
html, body { margin: 0; }
body {
  min-height: calc(100vh / var(--zoom, 1));
  background:
    radial-gradient(1200px 600px at 50% -10%, rgba(0, 120, 200, .14), transparent 60%),
    radial-gradient(900px 500px at -10% 110%, rgba(0, 90, 160, .12), transparent 60%),
    #070b11;
  color: var(--v2-text-primary);
  font-family: var(--mono);
  font-size: 12px;
  -webkit-font-smoothing: antialiased;
}
button, input, select { font: inherit; color: inherit; }
:focus-visible { outline: none; box-shadow: var(--v2-focus-ring-shadow) !important; }

/* ------------------------------------------------------------ cadre */
.app {
  max-width: 1500px;
  margin: 18px auto;
  padding: 10px;
  border-radius: 14px;
  background: var(--v2-bg-app);
  border: 1px solid var(--v2-border);
  box-shadow: var(--v2-shadow-lg), 0 0 0 1px rgba(0, 212, 255, .05);
  display: grid;
  gap: 10px;
}

/* ------------------------------------------------------------ boutons (famille RigPlane) */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: var(--btn-h);
  padding: 4px 10px;
  border-radius: 3px;
  border: 1px solid var(--v2-border-dark);
  background: linear-gradient(180deg, var(--v2-control-button-gradient-top), var(--v2-control-button-gradient-bottom));
  box-shadow: inset 0 1px 0 var(--v2-control-button-highlight);
  color: var(--v2-text-subdued);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: .04em;
  text-transform: uppercase;
  white-space: nowrap;
  cursor: pointer;
  transition: background-color 150ms ease, border-color 150ms ease, color 150ms ease, box-shadow 150ms ease;
}
.btn:hover:not(:disabled) { background: var(--v2-bg-gradient-start); color: var(--v2-text-bright); }
.btn:disabled { opacity: .45; cursor: not-allowed; color: var(--v2-text-dim); }
.btn[aria-pressed='true'], .btn.on {
  background: linear-gradient(180deg,
    color-mix(in srgb, #fff 10%, var(--v2-control-button-gradient-top)) 0%,
    color-mix(in srgb, #fff 4%, var(--v2-control-button-gradient-top)) 14%,
    color-mix(in srgb, var(--v2-bg-card) 28%, var(--v2-control-button-gradient-bottom)) 52%,
    color-mix(in srgb, var(--v2-bg-darkest) 18%, var(--v2-control-button-gradient-bottom)) 100%);
  border-color: color-mix(in srgb, #fff 10%, var(--v2-border-dark));
  color: var(--v2-text-bright);
  box-shadow: inset 0 1px 0 color-mix(in srgb, #fff 16%, transparent), inset 0 -1px 0 rgba(0,0,0,.5), 0 4px 10px rgba(0,0,0,.35);
  opacity: 1;
}
.btn.accent[aria-pressed='true'] {
  background-color: color-mix(in srgb, var(--main) 14%, var(--v2-bg-darker));
  border-color: color-mix(in srgb, var(--main) 48%, transparent);
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--main) 12%, transparent), 0 0 8px color-mix(in srgb, var(--main) 7%, transparent), inset 0 1px 0 var(--v2-control-button-highlight);
}
.btn.btn-tx { color: #ffc4b8; }
.btn.btn-tx.busy { color: #fff; background: rgba(132, 25, 13, .85); border-color: var(--v2-accent-red); box-shadow: 0 0 12px rgba(255, 32, 32, .35); }
.btn-off { color: var(--v2-accent-red-alt); border-color: rgba(241, 76, 66, .35); }
.btn-primary { background: linear-gradient(180deg, #0f4a6e, #0b3552); border-color: rgba(0, 212, 255, .45); color: #e8fbff; min-height: 36px; }
.seg { display: inline-flex; flex-wrap: wrap; gap: 4px; }
.seg-fill { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 4px; width: 100%; }

/* ------------------------------------------------------------ barre du haut */
.topbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 6px 10px;
  border-radius: 8px;
  background: linear-gradient(180deg, var(--v2-vfo-header-gradient-top), var(--v2-vfo-header-gradient-bottom));
  border: 1px solid var(--v2-vfo-header-border);
}
.tb-left, .tb-right { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.tb-title { color: var(--v2-text-header); letter-spacing: 1px; font-size: 16px; white-space: nowrap; display: flex; align-items: center; justify-content: center; gap: 0; }
/* Logo du club ON5VL avant et après le titre (fond blanc rendu transparent) */
.tb-logo { height: 40px; width: auto; margin: -6px 14px; flex: none; }
@media (max-width: 1280px) { .tb-logo { height: 30px; margin: -4px 8px; } }
.tb-title b { color: var(--v2-text-bright); }
.tb-title #stationCall { color: var(--main); font-weight: 700; margin-right: 10px; }
.tb-title #stationCall, .tb-title b { display: inline-block; white-space: nowrap; }
.tb-call { color: var(--main); font-weight: 700; }
.lamp { display: inline-flex; align-items: center; gap: 6px; color: var(--v2-text-dim); font-size: 10px; text-transform: uppercase; letter-spacing: .06em; }
.lamp i { width: 8px; height: 8px; border-radius: 50%; background: var(--v2-tx-idle); }
.lamp.on i { background: var(--v2-accent-green); box-shadow: 0 0 8px rgba(0, 204, 102, .6); }
.lamp.on { color: var(--v2-text-secondary); }
.lamp.warn i { background: var(--v2-accent-yellow); box-shadow: 0 0 8px rgba(255, 242, 26, .5); }
.lamp.tx i { background: var(--v2-accent-red); box-shadow: 0 0 10px rgba(255, 32, 32, .7); }

/* ------------------------------------------------------------ disposition */
.workspace {
  display: grid;
  grid-template-columns: 236px minmax(0, 1fr) 220px;
  grid-template-rows: auto 1fr;
  gap: 10px;
  align-items: start;
}
.side-left { grid-column: 1; grid-row: 1 / span 2; }
.center { grid-column: 2; grid-row: 1 / span 2; }
.side-right { grid-column: 3; grid-row: 1; }
.side-far { grid-column: 3; grid-row: 2; }
.side { display: grid; gap: 10px; min-width: 0; align-content: start; }
.center { display: grid; gap: 10px; min-width: 0; grid-template-rows: auto auto minmax(160px, 1fr); align-self: stretch; }
.seg-fill .btn, .ctl-row .btn { min-width: 0; width: 100%; padding-inline: 4px; overflow: hidden; text-overflow: ellipsis; }

/* journal d'activité (à la place du spectre) */
.activity { display: flex; flex-direction: column; min-height: 0; }
.activity .panel-b { flex: 1; min-height: 0; overflow: auto; align-content: start; gap: 0; padding-top: 6px; }
.ev { display: grid; grid-template-columns: 64px 1fr; gap: 10px; padding: 5px 0; border-bottom: 1px solid var(--v2-border-dark); font-size: 11px; color: var(--v2-text-secondary); }
.ev time { color: var(--v2-text-dim); }
.ev b { color: var(--v2-text-bright); font-weight: 700; }
.ev.tx b, .ev.tx { color: #ffc4b8; }
.ev.warn { color: var(--v2-accent-yellow); }
.ev.ok { color: var(--v2-accent-cyan-bright); }
.ev-empty { color: var(--v2-text-dim); font-size: 11px; }

.panel {
  border-radius: var(--v2-panel-radius);
  background: linear-gradient(180deg, var(--v2-panel-bg-gradient-top), var(--v2-panel-bg-gradient-bottom));
  border: 1px solid var(--v2-border-panel);
  box-shadow: var(--v2-shadow-sm);
}
.panel-h {
  margin: 0;
  padding: 9px 12px 7px;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 1.4px;
  text-transform: uppercase;
  color: var(--v2-text-bright); /* titres des cadres en blanc : ils guident l'œil */
  border-bottom: 1px solid var(--v2-border-dark);
}
.panel-h::before { content: '▾'; display: inline-block; width: 10px; color: var(--v2-text-dim); margin-right: 6px; transition: transform .15s; }
/* Panneaux repliables : clic sur le titre */
.panel > .panel-h { cursor: pointer; user-select: none; }
.panel > .panel-h:hover { color: var(--v2-accent-cyan-bright); }
.panel > .panel-h:hover::before { color: var(--v2-accent-cyan-bright); }
.panel > .panel-h:focus-visible { outline: 1px solid var(--v2-accent-cyan); outline-offset: -2px; }
.panel.collapsed > .panel-h { border-bottom-color: transparent; }
.panel.collapsed > .panel-h::before { transform: rotate(-90deg); }
.panel.collapsed > :not(.panel-h) { display: none !important; }
.panel.activity.collapsed { align-self: start; }
.panel-b { padding: 10px 12px 12px; display: grid; gap: 10px; }
.panel-b > div:empty { display: none; }
.sub-h { font-size: 10px; color: var(--v2-text-dim); }
.sub-h b { color: var(--v2-text-secondary); }
.grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 5px; }
.note, .hint { margin: 0; font-size: 10px; color: var(--v2-text-dim); line-height: 1.5; }

/* contrôles générés */
.ctl { display: grid; gap: 5px; }
.ctl + .ctl { margin-top: 2px; }
.ctl-head { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }
.ctl-label { font-size: 10px; letter-spacing: .06em; text-transform: uppercase; color: var(--v2-text-muted); }
.ctl-val { font-size: 12px; font-weight: 700; color: var(--v2-text-bright); }
.ctl-foot { font-size: 10px; color: var(--v2-text-dim); }
.ctl.unavail { opacity: .4; }
.ctl.unavail.nar { opacity: 1; }
.ctl.unavail.nar .ctl-label, .ctl.unavail.nar input { opacity: .4; }
.ctl-val.ctl-nar { color: #22d3ee; cursor: pointer; border: 1px solid #22d3ee; border-radius: 3px; padding: 0 5px; font-size: 11px; }
.ctl-val.ctl-nar:hover { background: rgba(34, 211, 238, .18); }
.ctl-row { display: grid; grid-template-columns: 1fr 1fr; gap: 5px; }
input[type='range'] {
  -webkit-appearance: none;
  appearance: none;
  width: 100%;
  height: 22px;
  background: transparent;
  margin: 0;
}
input[type='range']::-webkit-slider-runnable-track {
  height: 6px; border-radius: 3px;
  background: linear-gradient(180deg, #05080c, #0d131b);
  border: 1px solid var(--v2-border-dark);
}
input[type='range']::-moz-range-track { height: 6px; border-radius: 3px; background: #0a0f15; border: 1px solid var(--v2-border-dark); }
input[type='range']::-webkit-slider-thumb {
  -webkit-appearance: none;
  width: 12px; height: 20px; margin-top: -8px;
  border-radius: 2px;
  background: linear-gradient(180deg, #d9e1ea, #8796a6);
  border: 1px solid #2a3440;
  box-shadow: 0 2px 4px rgba(0,0,0,.6);
}
input[type='range']::-moz-range-thumb { width: 12px; height: 20px; border-radius: 2px; background: linear-gradient(180deg, #d9e1ea, #8796a6); border: 1px solid #2a3440; }
input[type='range']:disabled { opacity: .45; }

/* ------------------------------------------------------------ VFO */
.vfo-row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 8px; }
.vfo {
  position: relative;
  display: grid;
  gap: 5px;
  align-content: start;
  padding: 8px 12px 8px;
  border-radius: var(--v2-panel-radius);
  background: radial-gradient(120% 120% at 30% 0%, #0b1320 0%, var(--v2-bg-darkest) 70%);
  border: 1px solid var(--v2-border-panel);
  cursor: pointer;
  min-width: 0;
  container-type: inline-size; /* la taille des chiffres suit la largeur de l'écran VFO */
}
/* Cadre lumineux : VFO désigné pour l'émission (TX). Le VFO réglé (molette, bandes) a son nom souligné. */
.vfo.txsel.vfo-main { border-color: var(--v2-vfo-main-control-border); box-shadow: 0 0 0 1px var(--v2-vfo-main-control-glow), 0 0 22px -8px var(--v2-vfo-main-panel-glow-outer); }
.vfo.txsel.vfo-sub { border-color: var(--v2-vfo-sub-control-border); box-shadow: 0 0 0 1px var(--v2-vfo-sub-control-glow), 0 0 22px -8px var(--v2-vfo-sub-panel-glow-outer); }
.vfo.target .vfo-tag b { color: var(--v2-accent-cyan-bright); text-decoration: underline; text-underline-offset: 3px; }
.vfo .badge.b-tx, .vfo .badge.b-rx { cursor: pointer; }
.vfo .badge.b-tx:hover, .vfo .badge.b-rx:hover { filter: brightness(1.3); }
.vfo.on-air { border-color: var(--v2-accent-red) !important; box-shadow: 0 0 0 1px rgba(255,32,32,.3), 0 0 26px -6px rgba(255,32,32,.55) !important; }
.vfo-top { display: flex; align-items: center; gap: 6px; }
.vfo-top .txon { margin-left: auto; white-space: nowrap; }
.vfo-top .txon[hidden] { display: none; }
.vfo-top .badge, .vfo-name { white-space: nowrap; }
.vfo-top .badge.bw { cursor: ns-resize; }
/* MAIN / SUB : le côté actif (choisi par MAIN / SUB ou RX) sur fond coloré */
.side-tag { display: inline-block; padding: 1px 7px; border-radius: 3px; border: 1px solid transparent; }
.vfo-main .side-tag.on { background: var(--main); color: #00141c; border-color: var(--main); box-shadow: 0 0 10px rgba(0, 212, 255, .55); }
.vfo-sub .side-tag.on { background: var(--sub); color: #1c0a00; border-color: var(--sub); box-shadow: 0 0 10px rgba(255, 106, 0, .55); }
.vfo-top .badge.bw:hover { border-color: var(--v2-accent-cyan-bright); color: var(--v2-text-bright); }
@container (max-width: 400px) { .vfo-top .txon-sfx { display: none; } .vfo-top { gap: 4px; } }
.vfo-name { margin-left: auto; font-size: 11px; font-weight: 700; letter-spacing: 1.2px; color: var(--v2-text-header); text-transform: uppercase; }
.vfo-mid { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 8px; }
/* Écran VFO étroit : la fréquence passe sur sa propre ligne */
@container (max-width: 320px) {
  .vfo-mid { grid-template-columns: auto auto; justify-content: space-between; }
  .vfo-mid .freq-wrap { grid-column: 1 / -1; grid-row: 2; }
  .vfo-mid .freq { font-size: clamp(26px, calc((100cqi - 70px) / 7), 44px); }
}
.vfo-id { display: grid; gap: 4px; justify-items: start; }
.vfo-tag { font-size: 11px; color: var(--v2-text-secondary); letter-spacing: .08em; }
.vfo-tag b { font-size: 15px; color: var(--v2-text-bright); }
.vfo-side { margin-left: auto; display: grid; gap: 3px; justify-items: end; }
.clar-line { display: flex; gap: 6px; align-items: center; }
.clar-val { font-size: 11px; color: var(--v2-text-dim); min-width: 5.8em; text-align: right; }
.clar-val.on { color: var(--v2-accent-yellow); }

.badge {
  display: inline-flex; align-items: center; justify-content: center;
  min-height: 20px; padding: 1px 7px;
  border-radius: 3px;
  font-size: 10px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  border: 1px solid var(--v2-badge-inactive-border);
  color: var(--v2-badge-inactive-text);
  background: rgba(10, 14, 20, .6);
}
.badge.b-info, .badge.b-mode { color: var(--v2-text-bright); border-color: var(--v2-border-soft); background: var(--v2-vfo-filter-badge-bg); }
.badge.b-mode { background: var(--v2-vfo-mode-badge-bg); border-color: var(--v2-border-cyan); }
.badge.b-tx, .badge.b-rx { color: var(--v2-badge-muted-text); border-color: var(--v2-badge-muted-border); min-width: 30px; }
.badge.b-tx.armed { color: #ffb3ab; border-color: var(--v2-accent-red); background: rgba(179, 21, 15, .45); }
.badge.b-rx.on { color: #d8ffe6; border-color: var(--v2-accent-green); background: rgba(0, 150, 75, .4); box-shadow: 0 0 8px rgba(0, 204, 102, .35); }
.badge.b-tx.live { color: #fff; border-color: var(--v2-accent-red); background: #b3150f; box-shadow: 0 0 12px rgba(255, 32, 32, .55); }
.badge.amber { color: var(--v2-badge-amber-text); border-color: var(--v2-badge-amber-border); background: var(--v2-badge-amber-bg); box-shadow: 0 0 8px var(--v2-badge-amber-glow); }
.badge.green { color: var(--v2-badge-green-text); border-color: var(--v2-badge-green-border); background: var(--v2-badge-green-bg); box-shadow: 0 0 8px var(--v2-badge-green-glow); }
.badge.cyan { color: var(--v2-badge-cyan-text); border-color: var(--v2-badge-cyan-border); background: var(--v2-badge-cyan-bg); box-shadow: 0 0 8px var(--v2-badge-cyan-glow); }
.vfo-badges { display: flex; flex-wrap: wrap; gap: 4px; }
.vfo-badges:empty { display: none; }

/* S-mètre segmenté */
.smeter { display: grid; grid-template-columns: 1fr auto; grid-template-rows: auto auto; column-gap: 10px; row-gap: 3px; align-items: center; }
.sm-scale { display: flex; justify-content: space-between; font-size: 9px; color: var(--v2-text-muted); }
.sm-scale .hot { color: var(--v2-meter-red); }
.sm-bars { grid-column: 1; display: grid; grid-template-columns: repeat(30, 1fr); gap: 2px; height: 10px; }
.sm-bars i { background: var(--v2-meter-unlit); border-radius: 1px; }
.sm-bars i.lit { background: var(--v2-meter-blue); box-shadow: 0 0 4px rgba(88, 160, 255, .5); }
.sm-bars i.lit.hot { background: var(--v2-meter-red); box-shadow: 0 0 4px rgba(226, 54, 44, .5); }
.sm-read {
  grid-column: 2; grid-row: 1 / 3;
  min-width: 46px; padding: 4px 6px;
  border: 1px solid var(--v2-border-soft); border-radius: 3px;
  font-weight: 700; font-size: 12px; text-align: center;
  background: var(--v2-vfo-meter-tag-bg);
}
.smeter-dim { opacity: .35; }

/* fréquence */
.freq-wrap { display: flex; align-items: baseline; justify-content: flex-end; gap: 6px; margin-top: 0; }
.freq {
  display: flex;
  font-weight: 700;
  font-size: clamp(30px, 3.6vw, 52px);
  /* 9 chiffres + 2 séparateurs + « MHz » doivent tenir dans l'écran VFO */
  /* 9 chiffres + 2 séparateurs + « MHz » entre « VFO / mode » et RIT / XIT */
  font-size: clamp(18px, calc((100cqi - 190px) / 7.9), 46px);
  line-height: 1;
  letter-spacing: 0;
  user-select: none;
  touch-action: none;
  font-variant-numeric: tabular-nums;
}
.freq .d { cursor: ns-resize; padding: 0 .01em; border-bottom: 2px solid transparent; }
.freq .d.lead { display: none; }
.freq .d.cur { border-bottom-color: currentColor; }
.freq .sep { display: inline-block; width: .42em; margin: 0; text-align: center; }
.vfo-main .freq { color: var(--v2-vfo-main-freq-active); text-shadow: var(--v2-vfo-main-freq-glow); }
.vfo-sub .freq { color: var(--v2-vfo-sub-freq-active); text-shadow: var(--v2-vfo-sub-freq-glow); }
.vfo:not(.live) .freq { color: var(--v2-text-muted); text-shadow: none; }
/* VFO inutilisé (ni RX ni TX, ex. VFO B hors SPLIT) : fréquence grisée */
.vfo.idle .freq { color: #5d6b7a; text-shadow: none; }
/* En émission : chiffres du VFO qui émet en rouge */
.vfo.on-air .freq { color: #ff4a3d; text-shadow: 0 0 12px rgba(255, 40, 30, .55); }
.unit { font-size: 11px; color: var(--v2-text-dim); }

/* colonne DUAL */
.dual {
  display: grid;
  align-content: start;
  gap: 4px;
  padding: 6px 8px;
  border-radius: var(--v2-panel-radius);
  background: linear-gradient(180deg, var(--v2-panel-bg-gradient-top), var(--v2-panel-bg-gradient-bottom));
  border: 1px solid var(--v2-border-panel);
}
.dual-h { visibility: hidden; /* place du bouton ⧉ du cadre */ text-align: center; font-size: 9px; line-height: 12px; letter-spacing: 1.4px; text-transform: uppercase; color: var(--v2-text-dim); }
.dual-b { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 4px; --btn-h: 22px; }
.dual-b .btn { width: 100%; font-size: 10px; padding-inline: 2px; letter-spacing: 0; }
.dual-b .ctl { gap: 0; }
/* Trois boutons par ligne : MAIN SUB SPLIT · A→B B→A A⇄B · décalage LOCK (RIT / XIT / CLEAR : sur les VFO) */
.dual-b .ctl-row { display: contents; }
.dual-b > *, .dual-b .ctl-row > * { order: 2; }
.dual-b [data-ctl='vfoSel'] { grid-column: span 2; order: 0; }
.dual-b [data-ctl='split'] { order: 1; }
.dual-b [data-ctl='clar'] { grid-column: span 2; order: 4; }
.dual-b [data-ctl='clar'] .ctl-head { white-space: nowrap; gap: 4px; }
.dual-b [data-ctl='clar'] .ctl-val { font-size: 11px; }
.dual-b [data-ctl='lock'] { order: 5; align-self: end; }

/* MAIN / SUB / SPLIT · A → B · B → A · A ⇄ B · LOCK : sur la ligne des bandes (plus de colonne entre les VFO) */
.band-row { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; }
.band-row .bands { flex: 0 1 auto; }
.band-warn { flex: 1 1 260px; margin: 0 0 0 6px; text-align: left; color: var(--v2-accent-yellow); font-size: 12px; letter-spacing: .02em; line-height: 1.35; }
.band-warn b { color: inherit; font-weight: 700; }
.dg-back { min-width: 30px; padding-inline: 6px; font-size: 15px; line-height: 1; }
.band-warn.lock { color: var(--v2-accent-red-alt); }
.band-warn:not([hidden]) { animation: bandWarn 1s ease-in-out 3; }
@keyframes bandWarn { 50% { opacity: .35; } }
@media (prefers-reduced-motion: reduce) { .band-warn:not([hidden]) { animation: none; } }
.dual-inline { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; margin-left: auto; --btn-h: 28px; }
.dual-inline .ctl, .dual-inline .ctl-row { display: contents; }
.dual-inline .seg, .dual-inline .seg-fill { display: inline-flex; width: auto; }
.dual-inline .seg-fill .btn, .dual-inline .ctl-row .btn { width: auto; min-width: 40px; }
.dual-inline .btn { width: auto; font-size: 10.5px; padding-inline: 8px; }
.dual-inline [data-ctl='split'] { margin-right: 6px; }
.dual-inline [data-ctl='swap'] { margin-right: 6px; }

/* bande d'accord */
.tune-panel { padding: 10px 12px; display: grid; gap: 10px; }
.toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; }
.tl { font-size: 10px; letter-spacing: .08em; text-transform: uppercase; color: var(--v2-text-dim); margin-left: 4px; }
.goto { display: inline-flex; gap: 4px; margin-left: auto; }
.goto input, .login input {
  min-height: var(--btn-h);
  padding: 4px 8px;
  border-radius: 3px;
  border: 1px solid var(--v2-border);
  background: var(--v2-bg-input);
  color: var(--v2-text-bright);
}
.goto input { width: 7.5rem; }
.bands { display: flex; flex-wrap: wrap; gap: 4px; }
.bands .btn { min-width: 46px; padding-inline: 6px; }
.msg { margin: 0; min-height: 1.4em; font-size: 11px; color: var(--v2-accent-cyan-bright); }
.msg.warn { color: var(--v2-accent-yellow); }
.msg.error { color: var(--v2-accent-red-alt); }

/* ------------------------------------------------------------ TX */
.rxtx {
  display: flex; align-items: center; justify-content: center; gap: 8px;
  min-height: 28px; border-radius: 3px;
  border: 1px solid var(--v2-border-dark); background: var(--v2-bg-darker);
  font-weight: 700; font-size: 11px; letter-spacing: .1em; color: var(--v2-text-secondary);
}
.rxtx i { width: 8px; height: 8px; border-radius: 50%; border: 1px solid var(--v2-text-dim); }
.rxtx.tx { color: #fff; border-color: var(--v2-accent-red); background: rgba(132, 25, 13, .82); }
.rxtx.tx i { background: var(--v2-accent-red); border-color: var(--v2-accent-red); box-shadow: 0 0 8px var(--v2-accent-red); }
.ptt {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px;
  width: 100%; min-height: 64px;
  border-radius: 4px;
  border: 1px solid var(--v2-accent-red-alt);
  background: linear-gradient(180deg, rgba(60, 10, 8, .75), rgba(30, 6, 5, .85));
  color: #ffd6cf;
  font-weight: 700; font-size: 16px; letter-spacing: .2em;
  cursor: pointer; user-select: none; touch-action: none;
  box-shadow: 0 0 14px -4px rgba(255, 32, 32, .45), inset 0 1px 0 rgba(255,255,255,.05);
}
.ptt small { font-size: 9px; letter-spacing: .02em; font-weight: 400; color: rgba(255, 214, 207, .7); text-align: center; }
/* aussi sous la souris : le survol des boutons (.btn:hover) ne doit pas effacer le rouge de l'émission */
.ptt.held, .ptt.on-air, .ptt.held:hover:not(:disabled), .ptt.on-air:hover:not(:disabled) { font-weight: 800; background: linear-gradient(180deg, #d61f17, #8e140d); color: #fff; box-shadow: 0 0 26px rgba(255, 32, 32, .6); }
.ptt:disabled { border-color: var(--v2-border); background: var(--v2-bg-darker); color: var(--v2-text-dim); box-shadow: none; cursor: not-allowed; }
.ptt:disabled small { color: var(--v2-text-dim); }

/* opérateurs */
.ctrl-text { margin: 0; font-size: 11px; color: var(--v2-text-secondary); }
/* Décompte de la main (barre du haut) : libération sans action, ou passage au membre qui attend */
.ctl-timer { font: 600 12px/1 ui-monospace, 'Roboto Mono', monospace; color: var(--v2-text-secondary); padding: 4px 6px; border-radius: 4px; white-space: nowrap; cursor: help; }
.ctl-timer.low { color: #f59e0b; }
.ctl-timer.fair { color: #fff; background: #b91c1c; }
.who { display: flex; flex-wrap: wrap; gap: 4px; }
.who span { padding: 2px 7px; border-radius: 3px; border: 1px solid var(--v2-border); font-size: 10px; color: var(--v2-text-secondary); }
.who span.me { color: var(--main); border-color: var(--v2-border-cyan); }
.who span.ctrl { color: var(--v2-badge-amber-text); border-color: var(--v2-badge-amber-border); background: var(--v2-badge-amber-bg); }

/* ------------------------------------------------------------ mesures */
/* Panneau de la colonne de gauche : 2 colonnes de mesures */
.meters-h { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; font-size: 10px; letter-spacing: 1.4px; text-transform: uppercase; color: var(--v2-text-header); }
.m-mode { color: var(--v2-text-bright); font-weight: 700; }
.m-mode.tx { color: var(--v2-accent-red); }
.meters-row { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; }
.meters .mt { padding: 6px 8px; }
.meters .mt-v { font-size: 15px; }
.mt {
  display: grid; gap: 4px;
  padding: 8px 10px;
  border-radius: 6px;
  border: 1px solid var(--v2-border-dark);
  background: var(--v2-bg-darkest);
}
.mt-l { font-size: 10px; letter-spacing: .06em; color: var(--v2-text-muted); }
.mt-v { font-size: 17px; font-weight: 500; color: var(--v2-text-muted); }
.mt.live .mt-v { color: var(--v2-text-bright); }
.mt-bar { display: block; height: 3px; border-radius: 2px; background: var(--v2-meter-unlit); overflow: hidden; }
.mt-bar i { display: block; height: 100%; width: 0; background: var(--v2-accent-cyan); border-radius: 2px; }
#mtSwr .mt-bar i { background: var(--v2-meter-swr-fill); }
#mtAlc .mt-bar i { background: var(--v2-meter-alc-fill); }
#mtPo .mt-bar i { background: var(--v2-meter-power-fill); }
#mtId .mt-bar i { background: var(--v2-meter-id-fill); }
#mtVd .mt-bar i { background: var(--v2-meter-vd-fill); }
#mtComp .mt-bar i { background: var(--v2-meter-comp-fill); }
#mtS .mt-bar i { background: var(--v2-meter-s-fill); }
.txtimer { font-size: 10px; letter-spacing: 0; text-transform: none; color: var(--v2-accent-red-alt); text-align: right; }

/* ------------------------------------------------------------ messages pré-enregistrés (bas de page) */
.msgs { padding: 10px 12px 12px; border-radius: var(--v2-panel-radius); background: linear-gradient(180deg, var(--v2-panel-bg-gradient-top), var(--v2-panel-bg-gradient-bottom)); border: 1px solid var(--v2-border-panel); display: grid; gap: 6px; }
.msgs-h { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; font-size: 10px; color: var(--v2-text-dim); }
.msgs-t { font-size: 10px; font-weight: 700; letter-spacing: 1.4px; text-transform: uppercase; color: var(--v2-text-header); }
.msgs-h label { display: inline-flex; align-items: center; gap: 6px; text-transform: uppercase; letter-spacing: .8px; }
.msgs-h input::placeholder { color: var(--v2-text-muted); font-weight: 400; text-transform: none; opacity: .8; }
.msgs-h input { font: inherit; font-size: 12px; font-weight: 700; color: var(--v2-accent-cyan-bright); background: var(--v2-bg-input); border: 1px solid var(--v2-border); border-radius: 4px; padding: 3px 6px; text-transform: uppercase; width: 100px; letter-spacing: 0; }
#dxGrid { width: 70px; }
#dxRpt { width: 52px; }
.msgs-note { margin-left: auto; }
.msgs-note b { color: var(--v2-accent-cyan-bright); }
.msgs-row { display: grid; grid-template-columns: 74px minmax(0, 1fr); gap: 8px; align-items: center; }
.msgs-l { font-size: 10px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; color: var(--v2-text-secondary); }
.msgs-b { display: flex; flex-wrap: wrap; gap: 4px; }
.msgs-b .btn { font-size: 10px; padding: 5px 8px; white-space: nowrap; }
.msgs-b .btn small { color: var(--v2-text-dim); margin-right: 5px; font-weight: 700; }
.msgs-b .btn.sel { border-color: var(--v2-accent-red-alt); color: #ffc4b8; }

/* ------------------------------------------------------------ connexion */
.login { position: fixed; inset: 0; display: grid; place-items: center; padding: 16px; background: var(--v2-modal-backdrop); z-index: 10; }
.login[hidden] { display: none; }
.login form {
  width: min(380px, 100%);
  display: grid; gap: 12px;
  padding: 22px;
  border-radius: 10px;
  background: linear-gradient(180deg, var(--v2-modal-bg-top), var(--v2-modal-bg-bottom));
  border: 1px solid var(--v2-border-cyan);
  box-shadow: 0 0 40px var(--v2-modal-glow), var(--v2-shadow-lg);
}
.login h1 { margin: 0; font-size: 15px; letter-spacing: 1.4px; text-transform: uppercase; color: var(--v2-text-bright); }
.login p { margin: 0; color: var(--v2-text-secondary); font-size: 11px; line-height: 1.5; }
.login label { display: grid; gap: 5px; font-size: 10px; letter-spacing: .06em; text-transform: uppercase; color: var(--v2-text-muted); }
.login input { min-height: 36px; font-size: 13px; }
.login input[name='call'] { text-transform: uppercase; }
.login .err { color: var(--v2-accent-red-alt); min-height: 1.3em; }

/* ------------------------------------------------------------ largeurs intermédiaires */
@media (max-width: 1280px) {
  .workspace { grid-template-columns: 214px minmax(0, 1fr) 200px; }
  /* Colonnes étroites : un peu de place pour « RF FRONT END  A · MAIN  ⧉ » sur une ligne */
  .panel-h { padding-left: 9px; padding-right: 8px; }
  .panel-h .detach-btn { margin-left: 4px; }
  .meters-row { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 1080px) {
  .workspace { grid-template-columns: minmax(0, 1fr) 240px; }
  .side-left { grid-column: 1 / -1; grid-row: 2; grid-template-columns: repeat(3, minmax(0, 1fr)); align-items: start; }
  .center { grid-column: 1; grid-row: 1; }
  .side-right { grid-column: 2; grid-row: 1; }
  .side-far { grid-column: 1 / -1; grid-row: 3; }
}
/* ------------------------------------------------------------ téléphone */
@media (max-width: 820px) {
  .app { margin: 0; border-radius: 0; border: 0; padding: 8px 8px 110px; }
  .topbar { flex-wrap: wrap; }
  .tb-title { order: -1; width: 100%; white-space: normal; font-size: 15px; }
  .workspace { grid-template-columns: minmax(0, 1fr); }
  .center, .side-left, .side-right, .side-far { grid-column: 1; grid-row: auto; }
  .center { order: -1; grid-template-rows: auto; }
  .activity .panel-b { max-height: 260px; }
  .side-left { grid-template-columns: minmax(0, 1fr); }
  .vfo-row { grid-template-columns: minmax(0, 1fr); }
  .dual { order: 3; }
  .dual-b { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .vfo-mid { grid-template-columns: auto auto; justify-content: space-between; }
  .vfo-mid .freq-wrap { grid-column: 1 / -1; grid-row: 2; }
  .freq { font-size: clamp(26px, calc((100cqi - 70px) / 7), 44px); }
  .meters-row { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .msgs-row { grid-template-columns: minmax(0, 1fr); }
  .goto { margin-left: 0; }
  .ptt { position: fixed; left: 8px; right: 8px; bottom: calc(8px + env(safe-area-inset-bottom)); width: auto; z-index: 5; min-height: 72px; }
  .txtimer { position: static; margin-top: 6px; }
}
@media (prefers-reduced-motion: reduce) { * { transition: none !important; } }

/* ------------------------------------------------------------ écran large (1920 × 1080 et plus) : tout sur un écran */
@media (min-width: 1800px) and (min-height: 860px) {
  body { overflow: hidden; }
  .app { max-width: none; height: calc(100vh / var(--zoom, 1)); margin: 0; box-sizing: border-box; border-radius: 0; border: 0;
    grid-template-rows: auto minmax(0, 1fr) auto; padding: 8px 10px; gap: 8px; }
  .workspace { grid-template-columns: 236px minmax(0, 1fr) 236px; grid-template-rows: minmax(0, 1fr); min-height: 0; align-items: stretch; gap: 8px; }
  /* Plus compact pour tout faire tenir en hauteur */
  :root { --btn-h: 26px; }
  .panel-h { padding: 7px 10px 5px; }
  .panel-b { padding: 8px 10px 9px; gap: 7px; }
  .tune-panel { padding: 8px 10px; gap: 6px; }
  .tune-panel .hint, .tune-panel .msg:empty { display: none; }
  .meters-row { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 4px; }
  .meters .mt { padding: 4px 6px; gap: 2px; }
  .meters .mt-v { font-size: 13px; }
  .meters #mtS { grid-column: auto; }
  #dgWf { height: 130px; }
  /* Messages pré-enregistrés : dans la 4e colonne, sous les opérateurs (déplacés par panels.js) */
  .side-far .msgs { border-radius: var(--v2-panel-radius); }
  .side-far .msgs-row { grid-template-columns: minmax(0, 1fr); gap: 4px; }
  .side-far .msgs-note { margin-left: 0; }
  .side-far .msgs-b .btn { white-space: normal; text-align: left; justify-content: flex-start; }
  .side-left, .center, .side-right, .side-far { grid-row: 1; min-height: 0; overflow-y: auto; overflow-x: hidden; scrollbar-width: thin; }
  .side-left { grid-column: 1; } .center { grid-column: 2; } .side-right { grid-column: 3; } .side-far { grid-column: 4; }
  .side { gap: 8px; }
  .center { grid-template-rows: auto auto minmax(0, 1fr); gap: 8px; overflow: hidden; }
  .center > .activity { min-height: 0; }
  .center .activity:not(.collapsed) { display: flex; flex-direction: column; }
  .dg { min-height: 0; flex: 1; overflow: hidden; }
  .dg-cols, .rt-grid { min-height: 0; flex: 1; }
  .ws-col { min-height: 0; }
  .dg-col { min-height: 0; }
  .dg-list, .rt-rx, .ws-list { max-height: none; }
  .rt-rx { min-height: 0; }
  .activity .panel-b { min-height: 0; }
  /* Opérateurs : toute la hauteur de la 4e colonne, discussion extensible */
  .side-far .panel[data-panel='ops']:not(.collapsed) { display: flex; flex-direction: column; box-sizing: border-box; flex: 1; min-height: 260px; }
  .side-far { display: flex; flex-direction: column; }
  .side-far .panel[data-panel='ops'] > .panel-b { flex: 1; display: flex; flex-direction: column; min-height: 0; }
  .side-far .chat { max-height: none; flex: 1; min-height: 120px; }
}

/* ------------------------------------------------------------ avertissement d'inactivité */
.idle-banner {
  position: fixed;
  left: 50%;
  bottom: 24px;
  transform: translateX(-50%);
  z-index: 50;
  display: flex;
  align-items: center;
  gap: 12px;
  max-width: calc(100vw - 32px);
  padding: 12px 16px;
  border: 1px solid var(--v2-border);
  border-radius: 6px;
  background: var(--v2-bg-app);
  box-shadow: var(--v2-shadow-lg);
  color: var(--v2-text-primary);
  font-size: 13px;
}
.idle-banner[hidden] { display: none; }

/* ------------------------------------------------------------ choix du TRX (barre du haut) */
.tb-station { position: relative; display: inline-flex; }
.lamp-btn { background: none; border: 0; padding: 2px 0; font: inherit; cursor: default; }
.lamp-btn.admin { cursor: pointer; }
.lamp-btn.admin:hover span, .lamp-btn[aria-expanded='true'] span { color: var(--v2-text-bright); text-decoration: underline; text-underline-offset: 3px; }
.rig-list { display: inline-flex; gap: 8px; }
.rig-list .rig { color: var(--v2-text-dim); }
.rig-list .rig.cur { color: var(--v2-text-bright); font-weight: 700; }
.rig-list .rig.cur::before { content: '✓ '; color: var(--v2-accent-green); }
.rig-menu {
  position: absolute;
  top: calc(100% + 8px);
  left: 0;
  z-index: 40;
  min-width: 260px;
  padding: 8px;
  border: 1px solid var(--v2-border);
  border-radius: 6px;
  background: var(--v2-bg-app);
  box-shadow: var(--v2-shadow-lg);
  font-size: 11px;
}
.rig-menu[hidden] { display: none; }
.rig-menu h3 { margin: 2px 4px 8px; font-size: 10px; letter-spacing: .08em; text-transform: uppercase; color: var(--v2-text-header); font-weight: 400; }
.rig-menu .rig-opt { display: flex; justify-content: space-between; align-items: center; gap: 12px; width: 100%; margin-bottom: 4px; text-align: left; }
.rig-menu .rig-opt small { color: var(--v2-text-dim); font-size: 10px; text-transform: none; letter-spacing: 0; }
.rig-menu .rig-opt.cur small { color: var(--v2-accent-green); }
.rig-menu p { margin: 6px 4px 2px; color: var(--v2-text-dim); font-size: 10px; line-height: 1.5; }

/* ------------------------------------------------------------ messages entre membres */
.ask-btn { width: 100%; margin-top: 8px; }
.ask-btn[hidden] { display: none; }
.chat { margin-top: 10px; max-height: 210px; overflow-y: auto; display: flex; flex-direction: column; gap: 5px; font-size: 11px; line-height: 1.45; }
.chat-empty { margin: 0; color: var(--v2-text-dim); font-size: 11px; }
.chat .cm { overflow-wrap: anywhere; color: var(--v2-text-secondary); }
.chat .cm time { color: var(--v2-text-dim); margin-right: 6px; }
.chat .cm b { color: var(--v2-text-bright); margin-right: 4px; }
.chat .cm.me b { color: var(--main); }
.chat .cm.ask { color: var(--v2-accent-yellow); }
.chat .cm.give { color: var(--v2-accent-cyan-bright); }
.chat .cm .btn { display: block; margin-top: 4px; width: 100%; }
.chat-form { display: flex; gap: 4px; margin-top: 8px; }
.chat-beep { padding-inline: 8px; }
/* Nouveau message : bouton 👥 et indicatif de l'auteur qui clignotent */
@keyframes rs-blink { 0%, 100% { background: transparent; } 50% { background: rgba(241, 76, 66, .55); } }
.users-btn.chat-new { animation: rs-blink 1s ease-in-out infinite; border-color: var(--v2-accent-red-alt); }
#usersList b.blink { animation: rs-blink 1s ease-in-out infinite; border-radius: 3px; padding: 0 3px; }
.chat-form input {
  flex: 1;
  min-width: 0;
  height: var(--btn-h);
  padding: 0 8px;
  border: 1px solid var(--v2-border-dark);
  border-radius: 4px;
  background: var(--v2-bg-input, #0b0f14);
  color: var(--v2-text-primary);
  font: inherit;
  font-size: 11px;
}

.login-call { color: var(--main); }
.clar-ghost { visibility: hidden; }
.vfo-side.na { visibility: hidden; }
.vfo-side { gap: 2px; }
.vfo .badge.b-clar { min-height: 18px; min-width: 34px; padding: 0 5px; cursor: pointer; }
.vfo .badge.b-clar:hover { filter: brightness(1.3); }
.vfo .badge.b-clr { min-width: 0; width: 100%; color: var(--v2-text-secondary); }
.vfo .clar-line:last-child { width: 100%; }
.clar-val { cursor: ns-resize; }

/* ------------------------------------------------------------ écoute de la BF */
.listen { display: grid; gap: 8px; margin-top: 8px; }
.listen-btn { width: 100%; }
.listen-btn[aria-pressed='true'] { color: var(--v2-accent-green); border-color: var(--v2-accent-green); }

/* éléments cachés (ex. TUNER/TUNE sans boîte d’accord) */
.btn[hidden], .ctl[hidden] { display: none !important; }

/* ------------------------------------------------------------ membres connectés (barre du haut) */
.tb-users { position: relative; display: inline-flex; }
.users-btn b { color: var(--v2-text-bright); margin-left: 2px; }
.users-menu { left: 0; right: auto; min-width: 220px; }
.users-menu .u { display: flex; justify-content: space-between; gap: 12px; padding: 5px 6px; border-radius: 4px; font-size: 12px; color: var(--v2-text-secondary); }
.users-menu .u b { color: var(--v2-text-bright); }
.users-menu .u.me b { color: var(--main); }
.users-menu .u small { color: var(--v2-text-dim); font-size: 10px; }
.users-menu .u.ctrl small { color: var(--v2-badge-amber-text); }

/* ------------------------------------------------------------ navigateur requis (fenêtre de connexion) */
.login p.browser-req { padding: 8px 10px; border: 1px solid var(--v2-badge-amber-border); border-radius: 4px; background: var(--v2-badge-amber-bg); color: var(--v2-badge-amber-text); font-size: 12px; }
.login p.browser-req b, .login p.browser-bad b { font-weight: 700; }
.login p.browser-bad { padding: 8px 10px; border: 1px solid var(--v2-accent-red-alt); border-radius: 4px; color: var(--v2-accent-red-alt); font-size: 12px; }
.login p.browser-bad[hidden] { display: none; }

.panel[hidden] { display: none !important; }

/* ===================================================================== fenêtres du centre (onglets) */
.ctabs { display: flex; gap: 2px; padding: 6px 10px 0; border-bottom: 1px solid var(--v2-border-dark); }
.ctab {
  font: inherit; font-size: 10px; font-weight: 700; letter-spacing: 1.2px; text-transform: uppercase;
  color: var(--v2-text-dim); background: transparent; border: 1px solid transparent; border-bottom: 0;
  border-radius: 5px 5px 0 0; padding: 6px 14px; cursor: pointer; margin-bottom: -1px;
}
.ctab:hover { color: var(--v2-text-bright); }
.ctab[aria-selected='true'] { color: var(--v2-accent-cyan-bright); background: var(--v2-bg-darker); border-color: var(--v2-border-dark); }
.ctab-pane[hidden] { display: none !important; }
.dg-soon { padding: 16px 14px; font-size: 11px; color: var(--v2-text-secondary); }

/* ===================================================================== FT8 / FT4 */
.dg { display: flex; flex-direction: column; gap: 8px; padding: 10px 12px 12px; min-height: 560px; flex: 1; }
.dg-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.dg-bar select {
  font: inherit; font-size: 11px; color: var(--v2-text-bright); background: var(--v2-bg-input);
  border: 1px solid var(--v2-border); border-radius: 5px; padding: 6px 8px; min-width: 170px;
}
.dg-clock { margin-left: auto; font-size: 11px; color: var(--v2-accent-cyan-bright); white-space: pre; }
.dg-status { flex-basis: 100%; font-size: 11px; color: var(--v2-text-dim); }
.dg-status.warn { color: var(--v2-accent-yellow); }
/* État de la BF et heure UTC sur la même ligne (FT8 / FT4 / FT2) */
.dg-tl { margin-left: auto; flex: 1 1 320px; min-width: 0; display: flex; align-items: center; justify-content: flex-end; gap: 12px; }
.dg-tl .dg-status { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dg-tl .dg-clock { margin-left: 0; flex: none; }
.dg-wf { border: 1px solid var(--v2-border-dark); border-radius: 6px; overflow: hidden; background: #05080d; }
.dg-wf canvas { display: block; width: 100%; cursor: crosshair; }
#dgWf { height: 140px; }
#dgScale { height: 44px; }
.dg-wf { position: relative; }
/* Réglages de la cascade : gain, zéro, fond plat, couleurs */
.wf-ctl { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 14px; padding: 3px 8px; font-size: 10.5px; color: var(--v2-text-secondary); background: rgba(0, 0, 0, .35); border-bottom: 1px solid var(--v2-border-dark); }
.wf-ctl label { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
.wf-ctl input[type='range'] { width: 110px; }
.wf-ctl select { font: inherit; font-size: 10.5px; padding: 1px 4px; height: 20px; }
.wf-ctl .dg-mini { margin-left: auto; }
.dg-grip { position: absolute; left: 0; right: 0; bottom: 0; height: 8px; cursor: ns-resize; z-index: 3; touch-action: none;
  background: linear-gradient(to bottom, transparent 3px, rgba(255, 255, 255, .18) 3px, rgba(255, 255, 255, .18) 5px, transparent 5px); }
.dg-grip:hover { background: linear-gradient(to bottom, transparent 2px, rgba(0, 212, 255, .7) 2px, rgba(0, 212, 255, .7) 6px, transparent 6px); }
.dg-mk { position: absolute; top: 44px; bottom: 0; pointer-events: none; }
.dg-mk-rx { border-left: 3px solid rgba(78, 211, 123, .95); background: rgba(0, 204, 102, .10); }
.dg-mk-tx { border-left: 3px solid rgba(255, 90, 74, .95); background: rgba(255, 32, 32, .09); }
.dg-split { display: inline-flex; align-items: center; gap: 6px; margin-left: 6px; }
.dg-f { font-size: 11px; color: var(--v2-text-secondary); white-space: nowrap; }
.dg-f b { font-weight: 700; }
.dg-f.rx b { color: var(--v2-accent-green-bright); }
.dg-f.tx b { color: #ff7a6a; }
.dg-cols { display: grid; grid-template-columns: minmax(240px, var(--dg-left, 1fr)) 10px minmax(240px, 1fr); gap: 0; flex: 1; min-height: 260px; }
.dg-vsplit { cursor: col-resize; position: relative; touch-action: none; }
.dg-vsplit::after { content: ''; position: absolute; left: 4px; top: 30%; bottom: 30%; width: 2px; border-radius: 1px; background: var(--v2-border); }
.dg-vsplit:hover::after { background: var(--v2-accent-cyan-bright, #00d4ff); }
.dg-col { display: flex; flex-direction: column; min-width: 0; min-height: 0; border: 1px solid var(--v2-border-dark); border-radius: 6px; background: var(--v2-bg-darker); }
.dg-h { display: flex; justify-content: space-between; align-items: center; gap: 8px; padding: 6px 8px; font-size: 10px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; color: var(--v2-text-header); border-bottom: 1px solid var(--v2-border-dark); }
.dg-h b { color: var(--v2-accent-green-bright); font-weight: 700; }
.dg-note { font-weight: 400; text-transform: none; letter-spacing: 0; color: var(--v2-text-dim); }
.dg-mini { font: inherit; font-size: 9px; letter-spacing: .8px; text-transform: uppercase; color: var(--v2-text-dim); background: none; border: 1px solid var(--v2-border); border-radius: 4px; padding: 2px 6px; cursor: pointer; }
.dg-mini:hover { color: var(--v2-text-bright); }
.dg-h .dg-mini { color: #fff; font-weight: 700; } /* « Effacer » des listes : blanc gras */
.dg-th, .dg-row { display: grid; grid-template-columns: 62px 34px 36px 44px 1fr; gap: 6px; padding: 2px 8px; font-size: 12.5px; }
.dg-th { color: var(--v2-text-dim); font-size: 10px; letter-spacing: .8px; text-transform: uppercase; border-bottom: 1px solid var(--v2-border-dark); padding-block: 4px; }
.dg-th.ft { color: #FFFFFF; font-weight: 700; }
.dg-th span:nth-child(-n+4), .dg-row span:nth-child(-n+4) { text-align: right; }
.dg-list { flex: 1; overflow: auto; min-height: 0; max-height: var(--dg-list-max, 360px); }
.dg-row { color: var(--v2-text-secondary); cursor: pointer; white-space: nowrap; }
.dg-row span:last-child, .dg-row span.msg { overflow: hidden; text-overflow: ellipsis; color: var(--v2-text-bright); }
.dg-row:hover { background: rgba(0, 212, 255, .08); }
.dg-row.cq { background: rgba(0, 204, 102, .14); }
.dg-row.cq span:last-child, .dg-row.cq span.msg { color: #8ff0b6; }
/* Déjà contacté sous le TX CALL actuel (même bande, même mode) : vert barré */
.dg-row.wkd { background: rgba(0, 120, 60, .12); }
.dg-row.wkd span:last-child, .dg-row.wkd span.msg { color: #3fcf7f; text-decoration: line-through; text-decoration-thickness: 1px; opacity: .85; }
.dg-row.wkd .dg-call { text-decoration: line-through; }
.dg-row.me { background: rgba(255, 32, 32, .2); }
.dg-row.me span:last-child, .dg-row.me span.msg { color: #ffc4b8; font-weight: 700; }
.dg-sep { font-size: 11px; font-weight: 600; line-height: 14px; color: var(--v2-accent-cyan-bright); text-align: center; padding: 0; margin-top: 1px; letter-spacing: .8px; background: rgba(0, 212, 255, .10); border-top: 1px solid rgba(0, 212, 255, .55); }
.dg-tx { margin: 0; font-size: 11.5px; color: var(--v2-text-dim); }
.dg-tx.on { font-size: 12px; color: var(--v2-badge-amber-text); }
.dg-tx.air { color: #ff6b5e; font-weight: 700; }
.dg-row.tx { background: rgba(255, 196, 0, .16); }
.dg-row.tx span:last-child, .dg-row.tx span.msg { color: #ffd76a; font-weight: 700; }
.dg-row.tx span:nth-child(2) { color: #ff6b5e; font-weight: 700; }
/* FT8 / FT4 / FT2 : pays DXCC, distance et azimut après le message (comme JTDX) */
/* FT8 / FT4 / FT2 : le message garde la place (3/4 du reste), le pays prend le reste et se colle à la colonne km ;
   colonnes un peu plus serrées (écart 4 px) pour lire la ligne entière dans la fenêtre de droite */
.dg-th.ft, .dg-row.ft { grid-template-columns: 56px 30px 30px 40px minmax(130px, 3fr) minmax(0, 1.3fr) minmax(0, 46px) minmax(0, 34px); gap: 4px; padding-inline: 6px; }
.dg-th.ft span { overflow: hidden; }
.dg-th.ft span:nth-child(n+7), .dg-row.ft span.x { text-align: right; }
.dg-row.ft span.x.x { color: var(--v2-text-dim); font-weight: 400; text-decoration: none; opacity: 1; overflow: hidden; text-overflow: ellipsis; font-size: 11.5px; }
.dg-row.ft span.x.cty { text-align: right; color: #9fb6cc; }
.dg-th.ft span:nth-child(6) { text-align: right; }
.dg-th.ft span:nth-child(5), .dg-row.ft span:nth-child(5) { padding-left: 10px; } /* un peu d'air entre la fréquence et le message */
select.dg-par { width: auto; min-width: 0; }
.dg-chk { display: inline-flex; align-items: center; gap: 4px; font-size: 11px; color: var(--v2-text-secondary); white-space: nowrap; cursor: pointer; }
.dg-prog { position: relative; height: 14px; margin: 6px 0 2px; border-radius: 3px; background: rgba(255, 255, 255, .05); border: 1px solid var(--v2-border-dark); overflow: hidden; }
.dg-prog i { position: absolute; left: 0; top: 0; bottom: 0; width: 0; background: linear-gradient(90deg, rgba(0, 204, 102, .35), rgba(0, 204, 102, .75)); }
.dg-prog.tx i { background: linear-gradient(90deg, rgba(255, 50, 40, .4), rgba(255, 50, 40, .85)); }
.dg-prog span { position: relative; display: block; text-align: center; font-size: 10px; line-height: 14px; color: var(--v2-text-bright); letter-spacing: .5px; }
.qso-b { display: grid; gap: 10px; padding: 14px 16px; }
.qso-b h3 { margin: 0; color: var(--v2-text-bright); }
.qso-b p { margin: 0; line-height: 1.6; }
.rt-txline { color: #ff8a7a; font-weight: 700; }
/* RTTY : texte en attente d'émission (gris), lettres déjà émises (rouge) ; reste non émis après « Arrêter » barré */
.rt-txline .rt-todo { color: #7d8794; font-weight: 400; }
.rt-txline .rt-todo.rt-cut { text-decoration: line-through; }
.btn.btn-tx.on-air { background: rgba(255, 50, 40, .25); border-color: #ff5a4a; color: #fff; }
/* CW : ARRÊTER, visible seulement pendant l'émission */
.btn.cw-stop { margin-left: 10px; background: linear-gradient(180deg, #d61f17, #8e140d); border-color: #ff5a4a; color: #fff; font-weight: 700; letter-spacing: .04em; animation: cwStopPulse 1s ease-in-out infinite; }
.btn.cw-stop:hover { filter: brightness(1.15); }
.btn.cw-stop[hidden] { display: none; }
@keyframes cwStopPulse { 50% { box-shadow: 0 0 14px rgba(255, 40, 30, .75); } }
#jtTxState.air, #rtTxState.air { color: #ff6b5e; font-weight: 700; }
#dgStop { color: #fff; font-weight: 700; opacity: 1; background: #4a1714; border-color: rgba(255, 90, 74, .7); } /* « Arrêter » toujours lisible */
#dgStop:disabled { color: #f3d6d3; cursor: default; }
#dgStop:not(:disabled) { background: #c0221a; border-color: #ff6b5b; color: #fff; }
.dg-tx b { color: var(--v2-accent-cyan-bright); }
@media (max-width: 900px) { .dg-cols { grid-template-columns: 1fr; gap: 10px; } .dg-vsplit { display: none; } }

/* ===================================================================== onglets : espace, fenêtre séparée, synchro */
.ctabs { align-items: flex-end; }
.ctab-gap { flex: 1; }
.ctab-detach {
  font: inherit; font-size: 11px; color: var(--v2-text-dim); background: none; border: 1px solid var(--v2-border);
  border-radius: 5px; padding: 3px 9px; margin: 0 0 4px 8px; cursor: pointer; white-space: nowrap;
}
.ctab-detach:hover { color: var(--v2-accent-cyan-bright); border-color: var(--v2-accent-cyan-teal); }
.dg-soon p { margin: 0 0 8px; line-height: 1.6; }
.dg-sync { padding: 12px; display: grid; gap: 12px; }
.sy-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 10px; }
.sy-box { display: grid; gap: 4px; padding: 10px 12px; border: 1px solid var(--v2-border-dark); border-radius: 6px; background: var(--v2-bg-darker); }
.sy-box span { font-size: 9px; letter-spacing: 1px; text-transform: uppercase; color: var(--v2-text-dim); }
.sy-box b { font-size: 22px; color: var(--v2-text-bright); font-weight: 700; }
.sy-box b.ok { color: var(--v2-accent-green-bright); }
.sy-box b.warn { color: var(--v2-accent-yellow); }
.sy-box small { font-size: 10px; color: var(--v2-text-secondary); }
.sy-note { margin: 0; font-size: 10px; line-height: 1.6; color: var(--v2-text-dim); }
/* fenêtre séparée */
body.digi-popup { padding: 10px; min-height: 100vh; box-sizing: border-box; }
body.digi-popup #centerPanel { min-height: calc(100vh - 20px); }
body.digi-popup .dg { min-height: calc(100vh - 80px); }
body.digi-popup .dg-list { max-height: none; }
/* FT8 / FT4 / FT2 : la fenêtre tient dans l'écran, chaque liste de messages a son ascenseur
   (les listes ne poussent plus le bas de la page) */
body.digi-popup #centerPanel:has(.ctab-pane.dg-ftx:not([hidden])) { height: calc(100vh - 20px); min-height: 560px; display: flex; flex-direction: column; }
body.digi-popup .ctab-pane.dg-ftx:not([hidden]) { flex: 1 1 0; min-height: 0; }
body.digi-popup .dg-ftx > :not(.dg-cols) { flex-shrink: 0; }
body.digi-popup .dg-ftx .dg-cols { flex: 1 1 0; min-height: 180px; }
body.digi-popup .dg-ftx .dg-col { min-height: 0; }
.dg-ftx .dg-list { overflow-y: scroll; scrollbar-width: thin; scrollbar-color: #5d6c80 rgba(0, 0, 0, .25); }
.dg-orphan { margin: 0 0 10px; padding: 10px 12px; border: 1px solid var(--v2-accent-yellow); border-radius: 6px; color: var(--v2-accent-yellow); font-size: 12px; }
.dg-toast { position: fixed; left: 50%; bottom: 14px; transform: translateX(-50%); margin: 0; font-size: 12px; color: var(--v2-accent-yellow); background: var(--v2-bg-darker); border-radius: 6px; padding: 0 12px; }
.dg-toast:not(:empty) { padding: 8px 12px; border: 1px solid var(--v2-border); }

/* ===================================================================== RTTY */
.dg-wf-slot:empty { display: none; }
.dg-wf.is-rtty .dg-mk-rx { border-left: 0; background: rgba(224, 168, 0, .22); box-shadow: inset 0 0 0 2px rgba(224, 168, 0, .95); }
.dg-wf.is-rtty .dg-mk-tx { border-left: 0; background: rgba(0, 102, 255, .22); box-shadow: inset 0 0 0 2px rgba(0, 102, 255, .95); }
.rt-sq { display: inline-flex; align-items: center; gap: 6px; font-size: 10px; color: var(--v2-text-dim); text-transform: uppercase; letter-spacing: .8px; }
.rt-sq input { width: 90px; }
.rt-sq output { font-size: 11px; color: var(--v2-text-bright); min-width: 18px; }
#rtDial { font: inherit; font-size: 11px; color: var(--v2-text-bright); background: var(--v2-bg-input); border: 1px solid var(--v2-border); border-radius: 5px; padding: 6px 8px; }
#rtShift, #rtBaud { font: inherit; font-size: 11px; color: var(--v2-text-bright); background: var(--v2-bg-input); border: 1px solid var(--v2-border); border-radius: 5px; padding: 6px 8px; }
.rt-tune { display: inline-flex; align-items: center; gap: 4px; font-size: 10px; color: var(--v2-text-dim); }
.rt-tune i { display: inline-block; width: 46px; height: 8px; border-radius: 3px; background: var(--v2-bg-darker); border: 1px solid var(--v2-border-dark); overflow: hidden; }
.rt-tune i b { display: block; height: 100%; width: 0; transition: width .15s; }
#rtM { background: #F2CF4A; }
#rtS { background: #00D4FF; }
.rt-grid { display: grid; grid-template-columns: 3fr 2fr; gap: 10px; flex: 1; min-height: 280px; }
.rt-rx { flex: 1; margin: 0; padding: 8px 10px; overflow-x: hidden; overflow-y: scroll; scrollbar-width: thin; scrollbar-color: #7a8494 rgba(0, 0, 0, .35); white-space: pre-wrap; word-break: break-word; font: inherit; font-size: 13px; line-height: 1.5; color: #e9f7ff; min-height: 220px; max-height: 380px; }
.rt-call { display: inline-flex; align-items: center; gap: 6px; text-transform: none; letter-spacing: 0; font-weight: 400; }
.rt-call input { width: 110px; font: inherit; font-size: 12px; font-weight: 700; color: var(--v2-accent-cyan-bright); background: var(--v2-bg-input); border: 1px solid var(--v2-border); border-radius: 4px; padding: 3px 6px; text-transform: uppercase; }
.rt-macros { display: flex; flex-wrap: wrap; gap: 4px; padding: 8px 8px 0; }
.rt-tx-col textarea { margin: 8px; flex: 1; min-height: 90px; resize: vertical; font: inherit; font-size: 13px; color: #ffd9d0; background: #07090d; border: 1px solid var(--v2-border); border-radius: 5px; padding: 8px; text-transform: uppercase; }
.rt-tx-act { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; padding: 0 8px 8px; }
body.digi-popup .rt-rx { max-height: none; }
@media (max-width: 900px) { .rt-grid { grid-template-columns: 1fr; } }
.meters #mtS { grid-column: 1 / -1; }

/* ===================================================================== WSPR */
.ws-col { flex: 1; min-height: 260px; }
.ws-th, .ws-row { display: grid; grid-template-columns: 44px 32px 36px 118px 44px minmax(70px, 1fr) 60px 128px 82px; gap: 6px; padding: 2px 8px; font-size: 11px; }
.ws-th { color: var(--v2-text-dim); font-size: 9px; letter-spacing: .8px; text-transform: uppercase; border-bottom: 1px solid var(--v2-border-dark); padding-block: 4px; }
.ws-th span:nth-child(-n+5), .ws-row span:nth-child(-n+5), .ws-th span:nth-child(n+8), .ws-row span:nth-child(n+8) { text-align: right; }
.ws-row { color: var(--v2-text-secondary); white-space: nowrap; }
.ws-row span { overflow: hidden; text-overflow: ellipsis; }
.ws-row span:nth-child(6) { color: var(--v2-text-bright); font-weight: 700; }
.ws-row span:nth-child(7) { color: var(--v2-accent-cyan-bright); }
.ws-row:hover { background: rgba(154, 120, 224, .1); }
.ws-row.me { background: rgba(255, 32, 32, .2); }
.ws-list { max-height: 380px; }
body.digi-popup .ws-list { max-height: none; }

/* ------------------------------------------------------------ cadres détachables (panels.js) */
.detach-btn {
  float: right; margin: -2px -2px 0 8px; font: inherit; font-size: 10px; line-height: 1; letter-spacing: 0; text-transform: none;
  color: var(--v2-text-dim); background: none; border: 1px solid transparent; border-radius: 4px; padding: 2px 5px; cursor: pointer;
}
.detach-btn:hover { color: var(--v2-accent-cyan-bright); border-color: var(--v2-border); }
.msgs-h .detach-btn, .toolbar .detach-btn { float: none; margin: 0 0 0 auto; }
.msgs-h .msgs-note + .detach-btn { margin-left: 8px; }
.detach-btn.floating { position: absolute; top: 4px; right: 4px; z-index: 2; float: none; margin: 0; }
.vfo-row { position: relative; }
/* Cadre STEP / BANDS : bouton ⧉ dans le coin haut droit (il ne passe plus seul sur une ligne vide) */
.tune-panel { position: relative; }
.tune-panel > .toolbar { padding-right: 12px; }
.tune-panel > .toolbar > .detach-btn { position: absolute; top: 1px; right: 1px; margin: 0; padding: 1px 4px; z-index: 2; }
.vfo-row > .detach-btn.floating { top: -2px; right: 50%; transform: translateX(50%); }
.detached-ph { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 8px 10px; font-size: 10px; color: var(--v2-text-dim); border-style: dashed; }
.detached-ph .btn { --btn-h: 24px; }
body.panel-popup { padding: 8px; min-height: 100vh; box-sizing: border-box; overflow: auto; }
body.panel-popup > [data-panel] { width: 100%; box-sizing: border-box; margin: 0; }
body.panel-popup .chat { max-height: none; }
body.panel-popup .msgs-row { grid-template-columns: 74px minmax(0, 1fr); }
.msgs { position: relative; }
.msgs-h { padding-right: 34px; }
.msgs-h .detach-btn, .msgs-h .msgs-note + .detach-btn { position: absolute; top: 8px; right: 8px; margin: 0; }

/* ------------------------------------------------------------ macros (FLDIGI) et correspondant */
#dxName { width: 110px; } #dxQth { width: 240px; } #dxRst, #dxRstRx { width: 42px; } #dxRptRx { width: 52px; }
/* Ligne Correspondant : paire de reports selon l'onglet (dB en FT8… / RST 599 en RTTY, CW…) */
#msgs:not([data-rk="rst"]) .rk-rst { display: none; }
#msgs[data-rk="rst"] .rk-db { display: none; }
.msgs-b .btn.mini { padding-inline: 6px; color: var(--v2-text-dim); }
.macro-dlg { width: min(720px, 94vw); padding: 0; border: 1px solid var(--v2-border); border-radius: 10px; background: var(--v2-bg-app); color: var(--v2-text-secondary); font: inherit; box-shadow: var(--v2-shadow-lg); }
.macro-dlg::backdrop { background: rgba(0, 0, 0, .55); }
.macro-dlg form { display: grid; gap: 10px; padding: 14px 16px; }
.macro-dlg h3 { margin: 0; font-size: 12px; letter-spacing: 1.4px; text-transform: uppercase; color: var(--v2-text-header); }
.macro-dlg label { display: grid; gap: 4px; font-size: 10px; text-transform: uppercase; letter-spacing: .8px; color: var(--v2-text-dim); }
.macro-dlg input, .macro-dlg textarea { font: inherit; font-size: 13px; color: var(--v2-text-bright); background: #07090d; border: 1px solid var(--v2-border); border-radius: 5px; padding: 6px 8px; text-transform: uppercase; letter-spacing: 0; }
.macro-dlg textarea { resize: vertical; min-height: 110px; }
.md-keys { display: flex; flex-wrap: wrap; gap: 4px; }
.md-keys .btn { font-size: 10px; }
.md-tags { display: flex; flex-wrap: wrap; gap: 4px; }
.md-tag { font: inherit; font-size: 10px; color: var(--v2-accent-cyan-bright); background: var(--v2-bg-input); border: 1px solid var(--v2-border); border-radius: 4px; padding: 3px 6px; cursor: pointer; }
.md-tag:hover { border-color: var(--v2-accent-cyan-teal); }
.md-prev { margin: 0; font-size: 11px; color: #ffd9d0; white-space: pre-wrap; word-break: break-word; }
.md-act { display: flex; gap: 6px; align-items: center; }
.md-act span { flex: 1; }
@media (min-width: 1800px) and (min-height: 860px) {
  /* Opérateurs plus compact : la place va aux messages pré-enregistrés */
  .side-far .panel[data-panel='ops']:not(.collapsed) { flex: 0 0 auto; min-height: 0; }
  .side-far .chat { flex: none; max-height: 150px; min-height: 60px; }
  .side-far .msgs { flex: 1 1 auto; min-height: 0; overflow-y: auto; scrollbar-width: thin; }
  .side-far .msgs-h label { flex: 1 1 40%; }
  .side-far .msgs-h input { width: 100%; box-sizing: border-box; }
  .side-far .msgs-b .btn { font-size: 10px; }
}
.rt-macros .btn small { color: var(--v2-text-dim); margin-right: 5px; font-weight: 700; }
.rt-macros .btn.mini { padding-inline: 6px; color: var(--v2-text-dim); }
/* Macro <TX> : part directement à l'émission (petit liseré rouge à gauche) */
.rt-macros .btn.mac-tx, .msgs-b .btn.mac-tx { box-shadow: inset 3px 0 0 var(--v2-accent-red-alt); }
@media (min-width: 1800px) and (min-height: 860px) {
  .side-far .msgs { align-content: start; }
  /* Correspondant sur toute la largeur ; nom | QTH ; locator | report | RST ; note en dessous */
  .side-far .msgs-h { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 8px 8px; align-items: end; padding-bottom: 10px; border-bottom: 1px solid var(--v2-border-dark); }
  .side-far .msgs-h .msgs-t, .side-far .msgs-h .msgs-note { grid-column: 1 / -1; }
  .side-far .msgs-h label { display: grid; gap: 3px; flex: none; grid-column: span 2; font-size: 9.5px; }
  .side-far .msgs-h label:nth-of-type(1) { grid-column: 1 / -1; }
  .side-far .msgs-h label:nth-of-type(2), .side-far .msgs-h label:nth-of-type(3) { grid-column: span 3; }
  .side-far .msgs-h label:nth-of-type(1) input { font-size: 14px; padding: 5px 8px; }
  .side-far .msgs-h input { padding: 4px 6px; }
  .side-far .msgs-h .msgs-note { font-size: 10px; line-height: 1.45; color: var(--v2-text-dim); }
  .side-far .msgs-row { margin-top: 10px; gap: 5px; }
  .side-far .msgs-h { padding-right: 0; }
  .side-far .msgs-t { letter-spacing: .9px; padding-right: 30px; }
  .side-far .msgs-h label input { width: 100%; }
  .side-far .msgs-l { font-size: 10px; font-weight: 700; letter-spacing: 1.2px; color: var(--v2-text-header); text-transform: uppercase; }
}

/* ------------------------------------------------------------------ JTTY */
.jt-th, .jt-row { display: grid; grid-template-columns: 54px 30px 40px minmax(0, 1fr); gap: 6px; padding: 2px 8px; font-size: 11px; }
.jt-th { color: var(--v2-text-dim); font-size: 9px; letter-spacing: .8px; text-transform: uppercase; border-bottom: 1px solid var(--v2-border-dark); padding-block: 4px; }
.jt-th span:nth-child(-n+3), .jt-row span:nth-child(-n+3) { text-align: right; }
.dg-row.jt-row span:nth-child(4) { white-space: normal; overflow-wrap: anywhere; text-align: left; }
.dg-row.jt-row.live span:nth-child(4) { color: var(--v2-accent-cyan-bright); }
.dg-row.jt-row.live.me span:nth-child(4) { color: #ffc4b8; }
.jt-chat .jt-row { padding-block: 3px; }
.jt-tx { display: flex; flex-direction: column; gap: 6px; border: 1px solid var(--v2-border-dark); border-radius: 6px; background: var(--v2-bg-darker); padding-bottom: 8px; }
.jt-tx .dg-tx { padding: 0 8px; }
.jt-tx-row { display: flex; gap: 6px; padding: 0 8px; }
.jt-tx-row input { flex: 1; min-width: 0; font: inherit; font-size: 13px; color: #ffd9d0; background: #07090d; border: 1px solid var(--v2-border); border-radius: 5px; padding: 6px 8px; text-transform: uppercase; }

/* ------------------------------------------------------------------ CW */
.cw-lvl { display: inline-flex; align-items: center; gap: 6px; font-size: 11px; color: var(--v2-text-secondary); }
.cw-led { width: 10px; height: 10px; border-radius: 50%; background: #2a3442; box-shadow: inset 0 0 0 1px #3a4656; }
.cw-led.on { background: #F2CF4A; box-shadow: 0 0 8px rgba(242, 207, 74, .8); }
.cw-bar { position: relative; width: 90px; height: 8px; border-radius: 4px; background: #0b1018; border: 1px solid var(--v2-border-dark); overflow: hidden; }
.cw-bar b { position: absolute; inset: 0 auto 0 0; width: 0; background: linear-gradient(90deg, #4ED37B, #F2CF4A); transition: width .12s; }
.cw-bar b.low { background: #4a5566; }
#cwDb { min-width: 36px; text-align: right; }
#cwSpeed { width: 64px; }

/* ------------------------------------------------------------------ SSTV */
.ss-grid { display: grid; grid-template-columns: minmax(220px, var(--ss-left, 1fr)) 10px minmax(260px, 1fr); gap: 0; flex: 1; min-height: 0; }
.ss-vsplit { cursor: col-resize; position: relative; touch-action: none; }
.ss-vsplit::after { content: ''; position: absolute; left: 4px; top: 30%; bottom: 30%; width: 2px; border-radius: 1px; background: var(--v2-border); }
.ss-vsplit:hover::after { background: var(--v2-accent-cyan-bright, #00d4ff); }
.ss-rx, .ss-tx { min-height: 0; overflow: hidden; }
.ss-view { position: relative; flex: 1; min-height: 150px; margin: 8px; border-radius: 5px; overflow: hidden; background: #05080d; }
.ss-view canvas { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; display: block; }
.ss-empty[hidden] { display: none; }
.ss-empty { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; margin: 0; color: var(--v2-text-dim); font-size: 12px; }
.ss-gal { display: flex; gap: 6px; padding: 0 8px 8px; overflow-x: auto; scrollbar-width: thin; flex: none; }
.ss-thumb { flex: none; border: 1px solid var(--v2-border-dark); border-radius: 4px; cursor: pointer; background: #05080d; }
.ss-gal .ss-thumb { height: 54px; width: auto; }
.ss-thumbs .ss-thumb { height: 36px; width: auto; }
.ss-thumb:hover { border-color: var(--v2-accent-cyan-bright); }
.ss-thumb.sel { border-color: #F2CF4A; box-shadow: 0 0 0 1px #F2CF4A; }
.ss-tx .dg-h select { font: inherit; font-size: 11px; text-transform: none; letter-spacing: 0; }
.ss-tx.drop { outline: 2px dashed var(--v2-accent-cyan-bright); outline-offset: -4px; }
.ss-src { display: flex; align-items: center; gap: 8px; padding: 8px 8px 0; flex: none; }
.ss-file { flex: none; cursor: pointer; }
.ss-thumbs { display: flex; gap: 5px; overflow-x: auto; scrollbar-width: thin; padding-bottom: 2px; }
.ss-txbody { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); gap: 8px; padding: 8px; flex: 1; min-height: 0; }
.ss-cview { position: relative; min-height: 120px; border-radius: 5px; overflow: hidden; border: 1px solid var(--v2-border-dark); background: #05080d; }
.ss-compose { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; display: block; }
/* Émission SSTV : partie de l'image pas encore émise, assombrie ; trait rouge = ligne en cours */
.ss-txmask { position: absolute; background: rgba(4, 8, 14, .62); border-top: 2px solid #ff4d3d; pointer-events: none; }
.ss-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; overflow-y: auto; scrollbar-width: thin; }
.ss-text label { display: flex; flex-direction: column; gap: 2px; font-size: 9px; color: var(--v2-text-dim); text-transform: uppercase; letter-spacing: .8px; }
.ss-text input[id^=ssT] { font: inherit; font-size: 12px; text-transform: none; letter-spacing: 0; color: var(--v2-text-bright); background: #07090d; border: 1px solid var(--v2-border); border-radius: 4px; padding: 4px 6px; min-width: 0; }
.ss-opt { display: flex; align-items: center; gap: 6px; }
.ss-opt input[type=color] { width: 34px; height: 24px; padding: 0; border: 1px solid var(--v2-border); background: none; border-radius: 4px; }
.ss-tags { display: flex; flex-wrap: wrap; gap: 4px; }
.ss-act { display: flex; flex-wrap: wrap; gap: 5px; margin-top: auto; }
.ss-note { padding: 0 8px 8px; flex: none; }
.ss-fmt { font-size: 11px; color: var(--v2-text-dim); align-self: center; white-space: nowrap; cursor: help; }
.ss-prog { display: inline-flex; align-items: center; gap: 6px; font-size: 11px; color: var(--v2-text-secondary); }
.ss-prog i { width: 110px; height: 8px; border-radius: 4px; background: #0b1018; border: 1px solid var(--v2-border-dark); overflow: hidden; position: relative; }
.ss-prog b { position: absolute; inset: 0 auto 0 0; width: 0; background: linear-gradient(90deg, #9a78e0, #F2CF4A); }
.dg.ss { min-height: 600px; }
@media (min-width: 1800px) and (min-height: 860px) { .dg.ss { min-height: 0; } }
@media (max-width: 1100px) { .ss-grid { grid-template-columns: 1fr; gap: 10px; } .ss-vsplit { display: none; } .ss-view { min-height: 240px; } .ss-cview { min-height: 200px; } }
.ctl-na .ctl-val { color: var(--v2-text-dim); font-weight: 400; font-size: 10px; }
.ctl-na .btn:disabled { opacity: .35; cursor: not-allowed; }
/* Cadre Antenne (en haut à gauche) */
.panel-ant .ctl:not(.ctl-na) .ctl-head { display: none; }
.panel-ant .ctl-na .ctl-label { display: none; }
.panel-ant .seg .btn { font-size: 13px; font-weight: 700; padding-block: 7px; }
.help-btn { text-decoration: none; display: inline-flex; align-items: center; justify-content: center; color: var(--v2-accent-cyan-bright, #00D4FF); font-weight: 700; }
.st-help { margin: -4px 0 10px; font-size: 13px; }
.st-help a { color: #00D4FF; }

/* ===================================================================== Logs online (carnet de trafic) */
.lg { display: flex; flex-direction: column; gap: 8px; padding: 10px 12px 12px; min-height: 560px; flex: 1; min-width: 0; }
.lg-form { display: flex; flex-direction: column; gap: 6px; padding: 8px 10px; border: 1px solid var(--v2-border-dark); border-radius: 6px; background: var(--v2-bg-darker); }
.lg-form.editing { border-color: var(--v2-badge-amber-border, #8a6d1a); }
.lg-row { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 6px 8px; }
.lg-row label { display: grid; gap: 3px; font-size: 9px; letter-spacing: .8px; text-transform: uppercase; color: var(--v2-text-dim); min-width: 0; }
.lg-row input, .lg-row select, .lg-bar input, .lg-dlg input, .lg-dlg select {
  font: inherit; font-size: 12px; color: var(--v2-text-bright); background: var(--v2-bg-input); border: 1px solid var(--v2-border);
  border-radius: 5px; padding: 5px 7px; min-width: 0; letter-spacing: 0; text-transform: none;
}
.lg-row input { width: 110px; }
.lg-call input { width: 120px; font-weight: 700; text-transform: uppercase; color: var(--v2-accent-cyan-bright); }
.lg-row .lg-w5 input { width: 62px; }
.lg-row .lg-w6 input { width: 76px; }
.lg-row .lg-w8 input { width: 96px; }
.lg-row .lg-wide { flex: 1 1 160px; }
.lg-row .lg-wide input { width: 100%; }
.lg-row input[type='date'] { width: 132px; }
.lg-row .btn { min-height: 28px; font-size: 10px; }
.lg-chk { display: flex !important; align-items: center; gap: 6px; font-size: 11px !important; text-transform: none !important; letter-spacing: 0 !important; color: var(--v2-text-secondary) !important; cursor: pointer; }
.lg-chk input { width: auto !important; }
.lg-chk.warn { color: var(--v2-accent-yellow) !important; }
.lg-act { justify-content: flex-end; align-items: center; }
.lg-fmsg { flex: 1; font-size: 11px; color: var(--v2-text-secondary); }
.lg-fmsg.ok { color: var(--v2-accent-green-bright); }
.lg-fmsg.warn { color: var(--v2-accent-yellow); }
.lg-fmsg.err { color: var(--v2-accent-red-alt); }
.lg-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.lg-search { width: 240px; max-width: 100%; }
.lg-count { font-size: 10px; color: var(--v2-text-dim); }
.lg-sp { flex: 1; }
.lg-menu { position: relative; }
.lg-mlist { position: absolute; right: 0; top: calc(100% + 4px); z-index: 20; display: grid; min-width: 210px; padding: 4px; background: var(--v2-bg-app); border: 1px solid var(--v2-border); border-radius: 6px; box-shadow: var(--v2-shadow-lg); }
.lg-mlist[hidden] { display: none; }
.lg-mlist button { font: inherit; font-size: 12px; text-align: left; color: var(--v2-text-secondary); background: transparent; border: 0; border-radius: 4px; padding: 7px 10px; cursor: pointer; }
.lg-mlist button:hover, .lg-mlist button:focus-visible { background: var(--v2-bg-input); color: var(--v2-text-bright); }
.lg-tw { flex: 1; min-height: 220px; overflow: auto; contain: inline-size; max-width: 100%; border: 1px solid var(--v2-border-dark); border-radius: 6px; background: var(--v2-bg-darker); }
.lg-table { width: 100%; table-layout: fixed; border-collapse: collapse; font-size: 11px; font-variant-numeric: tabular-nums; }
.lg-table th { position: sticky; top: 0; background: var(--v2-bg-card); color: #FFFFFF; font-weight: 700; font-size: 9px; letter-spacing: .8px; text-transform: uppercase; text-align: left; padding: 6px; border-bottom: 1px solid var(--v2-border-dark); white-space: nowrap; }
.lg-table td { padding: 4px 6px; border-bottom: 1px solid var(--v2-border-dark); color: var(--v2-text-secondary); white-space: nowrap; }
.lg-table tbody tr[data-id] { cursor: pointer; }
.lg-table tbody tr[data-id]:hover td { background: var(--v2-bg-input); }
.lg-table tr.sel td { background: rgba(242, 207, 74, .08); }
.lg-table .call { color: var(--v2-text-bright); font-weight: 700; }
/* Largeurs des colonnes : <colgroup> (réglables à la souris) ; texte trop long coupé, entier au survol */
.lg-table th, .lg-table td { overflow: hidden; text-overflow: ellipsis; }
/* Filtres de colonne : ▾ à côté du titre, menu des valeurs */
.lg-flt { display: inline-block; margin-left: 4px; padding: 0 2px; font-size: 9px; color: #9fb6cc; cursor: pointer; font-weight: 700; }
.lg-flt:hover { color: var(--v2-accent-cyan-bright, #00d4ff); }
.lg-table th.flt-on { color: var(--v2-accent-cyan-bright, #00d4ff); }
.lg-table th.flt-on .lg-flt { color: var(--v2-accent-cyan-bright, #00d4ff); }
.lg-fmenu { position: absolute; z-index: 50; width: 230px; max-height: 340px; display: flex; flex-direction: column; background: var(--v2-bg-card); border: 1px solid var(--v2-border); border-radius: 6px; box-shadow: 0 8px 24px rgba(0, 0, 0, .5); padding: 6px; }
.lg-fq { font: inherit; font-size: 12px; padding: 4px 6px; margin-bottom: 4px; background: var(--v2-bg-input); color: var(--v2-text-bright); border: 1px solid var(--v2-border); border-radius: 4px; }
.lg-fl { overflow: auto; min-height: 0; }
.lg-fi { display: flex; justify-content: space-between; gap: 8px; width: 100%; text-align: left; font: inherit; font-size: 12px; padding: 3px 6px; background: none; border: 0; border-radius: 3px; color: var(--v2-text-secondary); cursor: pointer; }
.lg-fi:hover { background: var(--v2-bg-input); color: var(--v2-text-bright); }
.lg-fi.cur { color: var(--v2-accent-cyan-bright, #00d4ff); font-weight: 700; }
.lg-fi small { color: var(--v2-text-dim); }
.lg-fw { margin: 4px 6px; color: var(--v2-text-dim); font-size: 12px; }
.lg-rz { position: absolute; top: 0; right: 0; width: 7px; height: 100%; cursor: col-resize; touch-action: none; }
.lg-rz::after { content: ''; position: absolute; right: 2px; top: 25%; bottom: 25%; width: 1px; background: var(--v2-border); }
.lg-rz:hover::after { background: var(--v2-accent-cyan-bright, #00d4ff); width: 2px; }
.lg-table .r { text-align: right; }
.lg-table .c { text-align: center; }
.lg-table td.ok { color: var(--v2-accent-green-bright); }
.lg-table td.ko { color: var(--v2-accent-red-alt); font-weight: 700; }
.lg-table td.no { color: var(--v2-text-disabled); }
.lg-table .sat { font-size: 9px; color: var(--v2-accent-violet); }
.lg-empty { padding: 18px !important; text-align: center; color: var(--v2-text-dim) !important; white-space: normal !important; }
.lg-job { margin: 0; min-height: 14px; font-size: 10px; color: var(--v2-text-dim); }
.lg-job.err { color: var(--v2-accent-red-alt); }

/* fenêtres Synchronisation / Exporter / Configuration */
.lg-dlg { width: min(640px, 94vw); }
.lg-dlg.lg-cfg { width: min(720px, 94vw); }
.lg-dlg label { text-transform: none; letter-spacing: 0; font-size: 11px; color: var(--v2-text-secondary); }
.lg-dlg label small { font-size: 10px; color: var(--v2-text-dim); }
.lg-dlg input { text-transform: none; }
.lg-tabs { display: flex; gap: 2px; border-bottom: 1px solid var(--v2-border-dark); }
.lg-tabs button { font: inherit; font-size: 10px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; color: var(--v2-text-dim); background: transparent; border: 1px solid transparent; border-bottom: 0; border-radius: 5px 5px 0 0; padding: 6px 12px; margin-bottom: -1px; cursor: pointer; }
.lg-tabs button[aria-selected='true'] { color: var(--v2-accent-cyan-bright); background: var(--v2-bg-darker); border-color: var(--v2-border-dark); }
.lg-pp { display: grid; gap: 10px; min-height: 260px; align-content: start; }
.lg-pp[hidden] { display: none; }
.lg-pp fieldset { display: flex; flex-wrap: wrap; gap: 10px; border: 1px solid var(--v2-border-dark); border-radius: 6px; padding: 6px 10px 10px; margin: 0; }
.lg-pp fieldset legend { font-size: 10px; color: var(--v2-text-dim); padding: 0 4px; }
.lg-pp .lg-w8 input { width: 90px; }
.lg-pw { display: flex; gap: 4px; align-items: center; }
.lg-pw input { flex: 1; }
.lg-eye, .lg-clr { font: inherit; font-size: 12px; line-height: 1; color: var(--v2-text-secondary); background: var(--v2-bg-input); border: 1px solid var(--v2-border); border-radius: 5px; padding: 6px 8px; cursor: pointer; }
.lg-clr { color: var(--v2-accent-red-alt); }
.lg-note { margin: 0; font-size: 11px; color: var(--v2-text-dim); }
.lg-note[hidden], .lg-pp label[hidden] { display: none; }
.lg-pend { margin: 0; font-size: 12px; color: var(--v2-accent-cyan-bright); }
.lg-pend.warn { color: var(--v2-accent-yellow); }
.lg-alt { padding: 8px 10px; border: 1px dashed var(--v2-border); border-radius: 6px; }
.lg-alt p { margin: 0 0 8px; font-size: 11px; color: var(--v2-text-secondary); }
.lg-btns { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.lg-tres { font-size: 11px; color: var(--v2-text-dim); }
.lg-tres.ok { color: var(--v2-accent-green-bright); }
.lg-tres.err { color: var(--v2-accent-red-alt); }
.lg-steps { margin: 0; padding: 0; list-style: none; display: grid; gap: 4px; }
.lg-steps li { font-size: 12px; color: var(--v2-text-dim); padding-left: 22px; position: relative; }
.lg-steps li::before { content: '○'; position: absolute; left: 4px; }
.lg-steps li.run { color: var(--v2-accent-cyan-bright); }
.lg-steps li.run::before { content: '◔'; }
.lg-steps li.ok { color: var(--v2-accent-green-bright); }
.lg-steps li.ok::before { content: '✓'; }
.lg-steps li.fail { color: var(--v2-accent-red-alt); }
.lg-steps li.fail::before { content: '✗'; }
.lg-steps li.skip { text-decoration: line-through; }
.lg-steps li.skip::before { content: '–'; }
.lg-prog { height: 6px; border-radius: 3px; background: var(--v2-bg-input); overflow: hidden; }
.lg-prog > div { height: 100%; width: 0; background: var(--v2-accent-green-medium); transition: width .3s; }
.lg-cnt { margin: 0; font-size: 11px; color: var(--v2-text-secondary); }
.lg-log { margin: 0; height: 170px; overflow: auto; padding: 6px 8px; font: 11px/1.45 var(--mono); color: var(--v2-text-secondary); background: #07090d; border: 1px solid var(--v2-border-dark); border-radius: 5px; white-space: pre-wrap; }
.lg-grid { width: 100%; border-collapse: collapse; font-size: 11px; }
.lg-grid th { text-align: left; font-size: 9px; letter-spacing: .8px; text-transform: uppercase; color: var(--v2-text-dim); padding: 4px; }
.lg-grid td { padding: 3px 4px; }
.lg-grid input, .lg-grid select { width: 100%; }
.lg-grid input[type='checkbox'] { width: auto; }
.lg-grid td:last-child { width: 1%; }
@media (max-width: 700px) {
  .lg-row input, .lg-row .lg-w8 input, .lg-call input { width: 100%; }
  .lg-row label { flex: 1 1 40%; }
  .lg-search { width: 100%; }
}
/* Fiche « Enregistrer le QSO » (RTTY, JTTY, CW…) */
.qso-log .ql-g { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px 10px; }
.qso-log .ql-wide { grid-column: span 4; }
.qso-log .ql-g input, .qso-log .ql-g select { width: 100%; min-width: 0; box-sizing: border-box; }
.qso-log select { font: inherit; font-size: 13px; color: var(--v2-text-bright); background: #07090d; border: 1px solid var(--v2-border); border-radius: 5px; padding: 5px 6px; }
.qso-log .ql-msg { color: #ffb4a8; min-height: 1em; margin: 0; }
.btn.btn-log { white-space: nowrap; }
.msgs-h .btn-log { font-size: 10px; padding: 4px 8px; align-self: end; }
@media (max-width: 640px) { .qso-log .ql-g { grid-template-columns: repeat(2, minmax(0, 1fr)); } .qso-log .ql-wide { grid-column: span 2; } }
.msgs-h .btn-log { border: 1px solid var(--v2-accent-cyan); color: var(--v2-accent-cyan-bright); background: rgba(0, 212, 255, .08); border-radius: 5px; font-weight: 700; letter-spacing: .8px; text-transform: uppercase; cursor: pointer; }
.rt-tx-act .btn-log, .jt-tx-row .btn-log { border-color: var(--v2-accent-cyan); color: var(--v2-accent-cyan-bright); }
@media (min-width: 1800px) and (min-height: 860px) { .side-far .msgs-h .btn-log { grid-column: 1 / -1; padding: 6px 8px; font-size: 10.5px; } }
/* RTTY : réception sur toute la largeur, émission dessous (macros F1 à F12 sur une ligne, comme JTTY) */
.rt-grid.rt-stack { display: flex; flex-direction: column; gap: 8px; }
.rt-stack .rt-rx-col { flex: 1; min-height: 160px; }
.rt-stack .rt-tx-col { flex: none; padding-bottom: 8px; gap: 6px; }
.rt-stack .rt-macros { padding: 6px 8px 0; }
.rt-tx-row { display: flex; gap: 8px; padding: 0 8px; align-items: stretch; }
.rt-stack .rt-tx-col textarea { margin: 0; flex: 1; min-width: 0; min-height: 52px; height: 58px; }
.rt-stack .rt-tx-act { flex-direction: column; flex-wrap: nowrap; align-items: stretch; padding: 0; gap: 4px; }
.rt-stack .rt-tx-act .btn { padding-block: 4px; }
.rt-tx-note { padding: 0 8px; }

/* ------------------------------------------------------------------ Opérateurs : volet sous le bouton 👥 du bandeau */
.ops-pop { width: 340px; max-width: calc(100vw - 24px); display: grid; gap: 8px; padding: 10px; font-size: 12px; }
.ops-pop .who { display: none; } /* la liste des membres (#usersList) suffit */
.ops-pop .chat { margin-top: 0; max-height: 260px; min-height: 60px; }
.ops-pop .chat-form { display: flex; gap: 6px; }
.ops-pop .chat-form input { flex: 1; min-width: 0; }
.ops-pop #sec-other:empty { display: none; }
.ops-pop h3 { margin: 0 0 4px; }
.users-btn { position: relative; }
.users-dot { position: absolute; top: 2px; right: 2px; width: 8px; height: 8px; border-radius: 50%; background: var(--v2-accent-red-alt); box-shadow: 0 0 6px rgba(241, 76, 66, .8); }

/* ------------------------------------------------------------------ Correspondant : une ligne sous les onglets des modes numériques */
.activity > .msgs { padding: 6px 10px; border: 0; border-bottom: 1px solid var(--v2-border-dark); border-radius: 0; background: transparent; gap: 0; }
.activity > .msgs .msgs-h { gap: 6px 12px; padding-right: 30px; }
.activity > .msgs .msgs-t { color: var(--v2-text-dim); }
.activity > .msgs .msgs-h input { width: 90px; padding: 3px 6px; }
.activity > .msgs #dxCall { width: 100px; }
.activity > .msgs #dxGrid { width: 64px; }
.activity > .msgs #dxRpt, .activity > .msgs #dxRst, .activity > .msgs #dxRptRx, .activity > .msgs #dxRstRx { width: 42px; }
.activity > .msgs .btn-log { font-size: 10px; padding: 4px 10px; }
.activity.collapsed > .msgs { display: none; }

/* Messages Tx1 à Tx7 dans l'onglet FT8 · FT4 · FT2 (comme WSJT-X) */
.ft-tx { border: 1px solid var(--v2-border-dark); border-radius: 6px; background: var(--v2-bg-darker); padding: 6px 8px; }
.ft-msgs .btn { font-size: 11px; padding: 5px 9px; }
.rt-stack .rt-tx-act { min-width: 170px; }
.rt-tx-act2 { display: flex; gap: 4px; }
.rt-tx-act2 .btn { flex: 1; }
.rt-stack .rt-tx-col { padding-top: 0; }
.activity > .msgs .msgs-h label { letter-spacing: .5px; }
@media (max-width: 1799px) {
  .activity > .msgs .msgs-h { gap: 6px 8px; }
  .activity > .msgs .msgs-h input { width: 76px; }
  .activity > .msgs #dxCall { width: 92px; }
  .activity > .msgs #dxGrid { width: 58px; }
  .activity > .msgs #dxRpt, .activity > .msgs #dxRst, .activity > .msgs #dxRptRx, .activity > .msgs #dxRstRx { width: 38px; }
}
/* Badges des écrans VFO réglables d'un clic (ATT, IPO / AMP1 / AMP2, AMP, NAR, NB, DNR, NOTCH, DNF) */
.vfo-badges .badge.clk { cursor: pointer; }
/* Survol : simple éclaircissement, sans changer les couleurs — l'état (allumé / éteint) reste visible sous la souris */
.vfo-badges .badge.clk:hover { filter: brightness(1.35); outline: 1px dotted rgba(255, 255, 255, .35); outline-offset: 1px; }
/* MAIN / SUB / SPLIT… sur la ligne des pas, après ◀ ▶ (plus de saisie « kHz / Aller ») */
.toolbar .dual-inline { margin-left: 14px; padding-left: 14px; border-left: 1px solid var(--v2-border-dark); }
@media (max-width: 1599px) { .toolbar .dual-inline { margin-left: 0; padding-left: 0; border-left: 0; } }
/* Console de lecture CAT (administrateurs) */
.cat-dlg .cat-row { display: flex; gap: 6px; }
.cat-dlg .cat-row input { flex: 1; }
.cat-dlg .cat-quick { display: flex; flex-wrap: wrap; gap: 4px; }
.cat-dlg .cat-quick .btn { font-size: 11px; padding: 4px 8px; }
.cat-dlg .cat-out { margin: 0; min-height: 120px; max-height: 260px; overflow: auto; padding: 8px; background: #07090d; border: 1px solid var(--v2-border); border-radius: 5px; font-size: 13px; color: var(--v2-accent-cyan-bright); white-space: pre-wrap; }
.cat-dlg .cat-test { width: 100%; }
/* Titre des cadres RF front end / Filtre / DSP : VFO réglé (FTX-1) */
.panel-h .ph-side { display: inline-block; white-space: nowrap; vertical-align: 1px; margin-left: 5px; padding: 1px 4px; border-radius: 3px; font-size: 9.5px; line-height: 1.3; letter-spacing: .2px; color: #061018; background: var(--v2-accent-cyan); }
.panel-h .ph-side.b { background: #ffb347; }
.panel-h:has(.ph-side) { white-space: nowrap; overflow: hidden; letter-spacing: 1.2px; }

/* Libellés des réglages : curseurs en jaune, groupes de touches (AGC, Puissance) et volume d'écoute en blanc */
:is([data-panel=rf], [data-panel=filter], [data-panel=audio], [data-panel=dsp], [data-panel=tx]) .ctl-label { color: var(--v2-text-bright); font-weight: 700; }
:is([data-panel=rf], [data-panel=filter], [data-panel=audio], [data-panel=dsp], [data-panel=tx]) .ctl:has(input[type=range]) .ctl-label { color: var(--v2-accent-yellow); }
[data-panel=audio] .listen .ctl:has(input[type=range]) .ctl-label { color: var(--v2-text-bright); }
/* Repères en jaune : Step, LOCK, onglets Activité / Synchro / Logs online, titres des listes des modes numériques */
.tune-panel .toolbar > .tl { color: var(--v2-accent-yellow); font-weight: 700; } /* STEP et VFO */
[data-ctl='lock']:not([aria-pressed='true']) { color: var(--v2-accent-yellow); }
.ctab:is([data-tab='events'], [data-tab='sync'], [data-tab='log']) { color: var(--v2-accent-yellow); }
.dg-h > span:first-child { color: var(--v2-accent-yellow); }
/* Station meters : noms des mesures en jaune */
.meters .mt-l { color: var(--v2-accent-yellow); font-weight: 700; }
/* AGC et Correspondant en jaune fluo, Écouter le TRX en vert fluo */
.ctl[data-ctl='agc'] .ctl-label, .ctl[data-ctl='agcB'] .ctl-label, .ctl[data-ctl='roof'] .ctl-label, .dx-lbl { color: var(--v2-accent-yellow) !important; font-weight: 700; }
#listenBtn { font-weight: 700; }
#listenBtn:not([aria-pressed='true']) { color: #39FF14; }
.dx-l { color: var(--v2-text-bright); font-weight: 700; font-style: italic; }
/* Onglet « Suivre l'opérateur » */
.ctab-follow {
  font: inherit; font-size: 10px; font-weight: 700; letter-spacing: .8px; text-transform: uppercase; white-space: nowrap;
  color: var(--v2-text-secondary); background: none; border: 1px solid var(--v2-border); border-radius: 5px; padding: 3px 9px; margin: 0 0 4px 8px; cursor: pointer;
}
.ctab-follow:hover { color: var(--v2-text-bright); }
.ctab-follow[aria-pressed='true'] { color: #061018; background: #39FF14; border-color: #39FF14; }
.ctab-follow[hidden] { display: none; }
@media (max-width: 1799px) { .ctab-follow .fol-x { display: none; } }
.dg-row .dg-call { font-weight: 700; text-decoration: underline dotted; text-underline-offset: 2px; cursor: pointer; }
.dg-row .dg-call:hover { color: #39FF14; text-decoration-style: solid; }
.dg-row .dg-ap { font-style: normal; font-size: 0.85em; color: #8fa3b8; margin-left: 2px; cursor: help; }
/* « Émis sous » : indicatif des émissions numériques */
.msgs-h .txc select { font: inherit; font-size: 11px; font-weight: 700; color: var(--v2-text-bright); background: var(--v2-bg-darker); border: 1px solid var(--v2-border); border-radius: 4px; padding: 2px 4px; }
.msgs-h .txc select:disabled { opacity: .75; }
.lg-h4 { margin: 14px 0 4px; font-size: 11px; letter-spacing: .8px; text-transform: uppercase; color: var(--v2-accent-yellow); }
.lg-dlg .lg-grid td.txc, .lg-grid td.txc { font-weight: 700; }
/* TXW : écoute de la fréquence d'émission tant que le bouton est maintenu */
.txw-btn[aria-pressed='true'], .txw-btn.held { color: #061018; background: #39FF14; border-color: #39FF14; }
/* Bouton DX Cluster et son menu */
.dxc-wrap { position: relative; display: inline-flex; }
.dxc-btn { color: var(--v2-accent-yellow); font-weight: 700; }
.dxc-arrow { color: #ef4444; font-size: 14px; margin-right: 3px; letter-spacing: -.5px; }
.dxc-arrow.on { color: #22c55e; }
.dxc-arrow.half { color: #f59e0b; }
.dxc-head { display: block; padding: 5px 10px 6px; font-size: 11px; color: var(--v2-text-dim); border-bottom: 1px solid var(--v2-border, #2c3b50); margin-bottom: 3px; }
.dxc-menu a.linked::after { content: '● relié'; color: #22c55e; font-size: 11px; margin-left: 6px; }
.dxc-menu a.opened::after { content: '● ouvert, prenez la main'; color: #f59e0b; font-size: 11px; margin-left: 6px; }
.dxc-menu:has(a.opened), .dxc-menu:has(a.linked) { min-width: 340px; }
.dxc-menu { position: absolute; top: calc(100% + 4px); right: 0; z-index: 50; min-width: 230px; display: flex; flex-direction: column; padding: 4px;
  background: var(--v2-bg-darker, #0b1018); border: 1px solid var(--v2-border); border-radius: 6px; box-shadow: 0 8px 24px rgba(0, 0, 0, .5); }
.dxc-menu[hidden] { display: none; }
.dxc-menu a { display: flex; justify-content: space-between; gap: 10px; padding: 7px 10px; border-radius: 4px; color: var(--v2-text-bright); text-decoration: none; font-size: 12px; font-weight: 700; }
.dxc-menu a small { color: var(--v2-text-dim); font-weight: 400; }
.dxc-menu a:hover, .dxc-menu a:focus-visible { background: var(--v2-bg-panel, #141c27); color: var(--v2-accent-cyan-bright, #00D4FF); }
/* DNF (DSP) et TUNER (Accord) en blanc gras */
button[data-ctl='dnf']:not([aria-pressed='true']), button[data-ctl='dnfB']:not([aria-pressed='true']), button[data-ctl='tuner']:not([aria-pressed='true']) { color: var(--v2-text-bright); }
button[data-ctl='dnf'], button[data-ctl='dnfB'], button[data-ctl='tuner'] { font-weight: 700; }
/* Logs : menus Synchronisation, Exporter et Configuration en jaune fluo ; entrées des sous-menus en blanc gras */
.lg-menu > .btn, .lg-menu > .btn:hover:not(:disabled) { color: var(--v2-accent-yellow); font-weight: 700; }
.lg-menu > .btn:disabled { color: var(--v2-text-disabled); }
.lg-msep { border: 0; border-top: 1px solid var(--v2-border); margin: 4px 6px; }
.lg-mlist button { color: #FFFFFF; font-weight: 700; }
/* Synchronisation : identifiants de l'indicatif choisi */
.lg-acct { border: 1px solid var(--v2-accent-yellow); border-radius: 6px; padding: 8px 10px; }
.lg-acct legend { color: var(--v2-accent-yellow); font-weight: 700; padding: 0 4px; }
.lg-acct legend b { color: #FFFFFF; }
.lg-acf { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 6px 10px; }
.lg-anote { margin: 6px 0 0; font-size: 12px; color: var(--v2-text-secondary); }
.lg-anote.warn { color: var(--v2-accent-yellow); }
/* RTTY : deux décodeurs côte à côte (A = VFO-A, B = VFO-B), largeur réglable par le trait du milieu */
.rt-dual { display: grid; grid-template-columns: minmax(260px, var(--rt-left, 1fr)) 10px minmax(260px, 1fr); flex: 1; min-height: 280px; }
.rt-vsplit { cursor: col-resize; position: relative; touch-action: none; }
.rt-vsplit::after { content: ''; position: absolute; left: 4px; top: 30%; bottom: 30%; width: 2px; border-radius: 1px; background: var(--v2-border); }
.rt-vsplit:hover::after { background: var(--v2-accent-cyan-bright, #00d4ff); }
.rt-side { gap: 0; overflow: hidden; }
.rt-side .dg-wf { border-radius: 0; border-left: 0; border-right: 0; }
.rt-hd { flex-wrap: wrap; justify-content: flex-start; gap: 4px 8px; }
.rt-hd .rt-name { color: var(--v2-accent-yellow); font-size: 11px; }
.rt-hd .rt-rf { color: #FFFFFF; font-weight: 700; letter-spacing: .3px; text-transform: none; font-size: 15px; min-width: 0; padding: 1px 7px; border-radius: 4px; border: 1px solid transparent; white-space: nowrap; }
.rt-hd .rt-rf:empty { display: none; }
.rt-hd .rt-rf.tx { background: #c0221a; border-color: #ff6b5b; box-shadow: 0 0 6px rgba(255, 60, 40, .55); }
.rt-hd .rt-rf.tx::before { content: 'TX '; font-size: 11px; font-weight: 800; }
.rt-hd select { font: inherit; font-size: 11px; letter-spacing: 0; text-transform: none; color: var(--v2-text-bright); background: var(--v2-bg-input); border: 1px solid var(--v2-border); border-radius: 4px; padding: 1px 3px; }
.rt-hd .rt-sq input { width: 64px; }
.rt-hd .dg-mini[aria-pressed='true'] { color: #0b1018; background: var(--v2-accent-yellow); border-color: var(--v2-accent-yellow); }
.rt-hd .rt-txsel[aria-pressed='true'] { color: #FFFFFF; background: var(--v2-accent-red-alt, #c0392b); border-color: var(--v2-accent-red-alt, #c0392b); }
.rt-side.rt-istx { border-color: rgba(255, 90, 74, .55); }
.rt-side .rt-rx { min-height: 160px; }
.rt-wfb canvas { display: block; width: 100%; cursor: crosshair; }
#rtWfB { height: 140px; }
#rtScaleB { height: 44px; }
.rt-wfb .dg-mk-rx { border-left: 0; background: rgba(170, 51, 255, .22); box-shadow: inset 0 0 0 2px rgba(170, 51, 255, .95); }
.rt-wfb .dg-mk-tx { border-left: 0; background: rgba(0, 160, 60, .22); box-shadow: inset 0 0 0 2px rgba(0, 160, 60, .95); }
@media (max-width: 900px) { .rt-dual { grid-template-columns: 1fr; gap: 10px; } .rt-vsplit { display: none; } }
.rt-dual + .rt-grid { flex: none; min-height: 0; }
/* RTTY : repères du décodeur B sur la cascade commune (magenta = Mark, vert = Space) */
.dg-wf .dg-mk-bm { border-left: 0; background: rgba(170, 51, 255, .22); box-shadow: inset 0 0 0 2px rgba(170, 51, 255, .95); }
.dg-wf .dg-mk-bs { border-left: 0; background: rgba(0, 160, 60, .22); box-shadow: inset 0 0 0 2px rgba(0, 160, 60, .95); }
.rt-dual .rt-side .rt-rx { min-height: 140px; }
#rtSplitBtn[aria-pressed='true'] { color: #FFFFFF; background: var(--v2-accent-red-alt, #c0392b); border-color: var(--v2-accent-red-alt, #c0392b); }

/* ------------------------------------------------------------------ carte de bande (DX cluster), colonne à droite en RTTY */
#centerPanel { position: relative; }
:root { --bm-w: 220px; }
@media (max-width: 1500px) { :root { --bm-w: 180px; } }
#centerPanel.bm-on > :not(.panel-h):not(.bm) { margin-right: var(--bm-w); }
#centerPanel.collapsed > .bm { display: none; }
.bm { position: absolute; right: 0; bottom: 0; width: var(--bm-w); box-sizing: border-box; display: flex; flex-direction: column; border-left: 1px solid var(--v2-border-dark); background: var(--v2-bg-darker, #0b1018); }
.bm[hidden] { display: none; }
.bm-h { display: flex; align-items: center; gap: 6px; padding: 6px 8px 4px; font-size: 11px; }
.bm-h b { color: var(--v2-accent-yellow, #ffd400); letter-spacing: .5px; }
.bm-t { color: var(--v2-text-dim); text-transform: uppercase; letter-spacing: .8px; font-size: 9.5px; flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bm-h { flex-wrap: wrap; position: relative; }
.bm-h .bm-band { font-size: 20px; font-weight: 800; line-height: 1.1; color: #ffd400; }
.bm-fw { display: flex; gap: 4px; width: 100%; position: relative; }
.bm-fbtn, .bm-all { font: 700 11px/1 inherit; letter-spacing: .5px; padding: 4px 7px; border-radius: 4px; border: 1px solid var(--v2-border-dark); background: #141b26; cursor: pointer; text-transform: uppercase; }
.bm-fbtn { flex: 1; color: #f5ff00; border-color: #8a8f00; text-shadow: 0 0 4px rgba(245,255,0,.45); }
.bm-fbtn.off { opacity: .5; text-shadow: none; }
.bm-all { color: #aab3bf; }
.bm-all[aria-pressed='true'] { color: #fff; background: #1f5f1f; border-color: #39ff14; }
.bm-fmenu { position: absolute; top: calc(100% + 3px); left: 0; right: 0; z-index: 30; display: grid; gap: 2px; padding: 6px; background: #11161d; border: 1px solid #8a8f00; border-radius: 6px; box-shadow: 0 6px 18px rgba(0,0,0,.6); }
.bm-fmenu[hidden] { display: none; }
.bm-fmenu label { display: flex; align-items: center; gap: 6px; font-size: 12px; color: #e6ebf2; padding: 2px 2px; cursor: pointer; }
.bm-fhd { font-size: 10px; color: #f5ff00; text-transform: uppercase; letter-spacing: .6px; margin-bottom: 2px; }
.bm-fdef { margin-top: 4px; font-size: 10.5px; padding: 3px 6px; background: #1b2330; color: #cfd6df; border: 1px solid var(--v2-border-dark); border-radius: 4px; cursor: pointer; }
.bm-st { width: 8px; height: 8px; border-radius: 50%; background: #5a6578; flex: none; }
.bm-st.ok { background: #22d36b; box-shadow: 0 0 5px #22d36b; }
.bm-st.ko { background: #ff5252; }
.bm-r { display: flex; align-items: center; gap: 4px; padding: 0 8px 6px; font-size: 10px; color: var(--v2-text-dim); border-bottom: 1px solid var(--v2-border-dark); }
.bm-r input { width: 0; flex: 1; min-width: 0; font-size: 11px; padding: 2px 4px; text-align: center; }
.bm-body { position: relative; flex: 1; min-height: 120px; overflow: hidden; cursor: crosshair; user-select: none; }
.bm-body canvas { position: absolute; inset: 0; width: 100%; height: 100%; }
.bm-lbls { position: absolute; inset: 0; pointer-events: none; }
.bm-s { position: absolute; right: 2px; height: 15px; padding: 0 4px; border: 0; border-radius: 3px; background: rgba(20, 28, 40, .85); color: #dfe7f2; font: 11px/15px Verdana, "DejaVu Sans", Arial, sans-serif; text-align: left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: pointer; pointer-events: auto; }
.bm-s b { font-weight: 700; letter-spacing: .3px; }
.bm-s small { color: #8fa0b8; font-size: 9.5px; }
.bm-s:hover { background: #1d3a52; color: #fff; }
.bm-s.bm-cq b { color: #3ee07f; }
.bm-s.bm-wkd b { color: #8fa0b8; text-decoration: line-through; }
.bm-f { padding: 4px 8px; font-size: 10px; color: var(--v2-text-dim); border-top: 1px solid var(--v2-border-dark); }
@media (max-width: 900px) { .bm { display: none !important; } #centerPanel.bm-on > :not(.panel-h):not(.bm) { margin-right: 0; } }
/* Carte de bande affichée : ligne Correspondant plus compacte pour tenir sur une ligne */
#centerPanel.bm-on > .msgs #dxQth { width: 120px; }
#centerPanel.bm-on > .msgs #dxName { width: 80px; }
/* Fenêtres VFO-A / VFO-B : un clic dans la fenêtre la choisit pour l'émission */
#rtDual .rt-side { cursor: default; }
#rtDual .rt-side:not(.rt-istx) .rt-rx { cursor: pointer; }
/* Onglets : passent à la ligne plutôt que d'élargir la fenêtre (carte de bande sur un petit écran) */
.ctabs { flex-wrap: wrap; row-gap: 2px; }
.ctab { white-space: nowrap; }
#centerPanel { min-width: 0; }
@media (max-width: 1500px) { #centerPanel.bm-on .ctab { padding-inline: 9px; letter-spacing: .8px; } }
.rt-side.rt-istx > .rt-hd { background: rgba(255, 90, 74, .10); }
/* Ligne des bandes : titre BANDS en jaune, comme STEP et VFO */
.tune-panel .band-row > .tl { color: var(--v2-accent-yellow); font-weight: 700; min-width: 34px; }
/* Onglets : Synchro, Logs et Log QSO un peu à l'écart des modes ; Suivre l'opérateur encore séparé (autre chose) */
/* Logbooks, Log QSO et Synchro : boutons cyan, un peu à l'écart des modes */
.ctabs .ctab[data-tab='log'] { margin-left: 28px; }
.ctabs .ctab[data-tab='log'], .ctabs .ctab[data-tab='sync'] { align-self: flex-end; margin-bottom: 2px; font-size: 10px; padding: 3px 10px; border: 1px solid var(--v2-accent-cyan); color: var(--v2-accent-cyan-bright); background: rgba(0, 212, 255, .08); border-radius: 5px; font-weight: 700; letter-spacing: .8px; text-transform: uppercase; cursor: pointer; }
.ctabs .ctab[data-tab='sync'] { margin-left: 8px; }
.ctabs .ctab[data-tab='log']:hover, .ctabs .ctab[data-tab='sync']:hover, .ctabs .ctab-log:hover { background: rgba(0, 212, 255, .18); color: #fff; }
.ctabs .ctab[data-tab='log'][aria-selected='true'], .ctabs .ctab[data-tab='sync'][aria-selected='true'] { background: rgba(0, 212, 255, .28); color: #fff; box-shadow: 0 0 8px rgba(0, 212, 255, .45); border-color: var(--v2-accent-cyan); }
body.digi-popup .ctabs .ctab[data-tab='sync'] { margin-left: 28px; }
.ctabs .ctab-log { align-self: center; margin: 0 0 3px 8px; font-size: 10px; padding: 4px 10px; border: 1px solid var(--v2-accent-cyan); color: var(--v2-accent-cyan-bright); background: rgba(0, 212, 255, .08); border-radius: 5px; font-weight: 700; letter-spacing: .8px; text-transform: uppercase; cursor: pointer; }
.ctabs .ctab-follow { margin-left: 36px; }
@media (max-width: 1500px) { .ctabs .ctab[data-tab='log'] { margin-left: 14px; } .ctabs .ctab-follow { margin-left: 18px; } }
/* Carte de bande sur toute la hauteur du cadre « Activité et modes numériques » (titre compris) */
.bm { top: 0; border-radius: 0 var(--v2-panel-radius) var(--v2-panel-radius) 0; overflow: hidden; }
#centerPanel.bm-on > .panel-h { margin-right: var(--bm-w); }
.ctabs .ctab-log { align-self: flex-end; margin-bottom: 2px; padding: 3px 10px; }
/* Écran large : la carte de bande monte jusqu'en haut du cadre STEP / BANDS (place libre à droite) */
body.bm-tall .center > [data-panel='bands'], body.bm-tall .center > .vfo-row { margin-right: calc(var(--bm-w) + 8px); }
body.bm-tall .bm { border: 1px solid var(--v2-border-panel); border-radius: var(--v2-panel-radius); right: -1px; bottom: -1px; }
@media (max-width: 1500px) { #centerPanel.bm-on .ctab { padding-inline: 7px; letter-spacing: .5px; } }
#rtTip[hidden], #rtStatus:empty { display: none; }
/* Taille du dashboard (zoom.js) */
.zoom-btn { font-weight: 700; white-space: nowrap; }
.zoom-menu { min-width: 270px; }
.zoom-menu button span { white-space: nowrap; flex: none; }
.zoom-menu button small { white-space: nowrap; text-align: right; }
.zoom-menu button { display: flex; justify-content: space-between; gap: 10px; padding: 6px 10px; border: 0; border-radius: 4px; background: none; color: var(--v2-text-bright); font: inherit; font-size: 12px; font-weight: 700; text-align: left; cursor: pointer; }
.zoom-menu button small { color: var(--v2-text-dim); font-weight: 400; }
.zoom-menu button:hover:not(:disabled) { background: var(--v2-bg-panel, #141c27); color: var(--v2-accent-cyan-bright, #00D4FF); }
.zoom-menu button[aria-checked='true'] { color: var(--v2-accent-yellow); }
.zoom-menu button.zoom-big span { color: var(--v2-text-dim); } /* plus grand que l'écran : la mise en page se serre */
.zoom-info { padding: 6px 10px 8px; margin-bottom: 4px; border-bottom: 1px solid var(--v2-border-dark); color: var(--v2-text-secondary); font-size: 11px; line-height: 1.4; max-width: 270px; }
/* RTTY : l'autre fenêtre est « RX ici » en vert (réception seule) */
.rt-hd .rt-txsel[aria-pressed='false'] { color: #FFFFFF; background: #1e8e4e; border-color: #1e8e4e; }
.rt-side:not(.rt-istx) { border-color: rgba(46, 204, 113, .45); }
.rt-side:not(.rt-istx) > .rt-hd { background: rgba(46, 204, 113, .08); }
/* Poignée de largeur de la carte de bande (bord gauche) */
.bm-grip { position: absolute; left: 0; top: 0; bottom: 0; width: 9px; cursor: ew-resize; z-index: 3; }
.bm-grip::after { content: ''; position: absolute; left: 3px; top: 50%; width: 3px; height: 46px; margin-top: -23px; border-radius: 2px; background: var(--v2-border-panel, #3a4658); opacity: .8; }
.bm-grip:hover::after, body.bm-resizing .bm-grip::after { background: var(--v2-accent-cyan, #00d4ff); opacity: 1; }
body.bm-resizing { cursor: ew-resize; user-select: none; }

/* BF muette : carte son USB du TRX figée (alerte de la page Station) */
.silent-warn { color: #f59e0b; font-weight: 700; }
.silent-warn .btn { --btn-h: 24px; margin-top: 6px; }

/* CW : case « Vitesse » de l'émission toujours visible (plus de coupure par le bord droit sur un écran étroit) */
.cwp .rt-tx-col .dg-h { flex-wrap: wrap; row-gap: 4px; }
.cwp .rt-call input#cwSpeed { width: 64px; text-align: center; }

/* Mention de l'auteur sous Station meters */
.credit { margin: 6px 4px 0; font-size: 10.5px; color: var(--v2-text-dim); text-align: center; }
.credit a { color: inherit; text-decoration: underline dotted; }

/* ------------------------------------------------------------ phonie à distance (cadre TX, sous le PTT) */
.vx { display: flex; flex-direction: column; gap: 6px; padding: 7px 8px; box-sizing: border-box; width: 100%; min-width: 0; overflow: hidden; border: 1px solid var(--v2-border-dark, #1d2733); border-radius: 6px; background: rgba(0, 0, 0, .18); }
.vx[hidden] { display: none; }
.vx-h { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 4px 6px; }
.vx-h .btn { font-size: 10px; padding: 3px 7px; min-height: 0; white-space: nowrap; }
.vx-title { font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--v2-accent-yellow, #f2cf4a); font-weight: 800; }
.vx-on { width: 100%; color: #fff !important; font-weight: 800; letter-spacing: .04em; }
.vx-on[hidden] { display: none; }
.vx-on[aria-pressed='true'] { border-color: #2fd16b; box-shadow: 0 0 8px rgba(47, 209, 107, .35); }
.vx-on[aria-pressed='true']::before { content: '● '; color: #2fd16b; }
.vx-mon { display: flex; justify-content: center; }
.vx-mon .btn { font-size: 10px; padding: 4px 12px; }
.vx-mon .btn[aria-pressed='true'] { border-color: var(--ctl, #00d4ff); color: var(--ctl, #00d4ff); }
.vx-b { display: flex; flex-direction: column; gap: 6px; }
.vx-b[hidden] { display: none; }
.vx-b select { width: 100%; font: inherit; font-size: 11px; color: var(--v2-text-bright, #fff); background: #111923; border: 1px solid var(--v2-border, #2a3746); border-radius: 4px; padding: 3px 5px; }
.vx-io { display: flex; align-items: center; gap: 6px; font-size: 10.5px; color: var(--v2-text-secondary, #9fb0c2); white-space: nowrap; }
.vx-io[hidden] { display: none; }
.vx-io select { flex: 1 1 auto; min-width: 0; }
.vx-type { font-size: 10.5px; line-height: 1.4; color: var(--v2-text-secondary, #9fb0c2); overflow-wrap: anywhere; }
.vx-type b { color: var(--v2-text-bright, #fff); }
.vx-type i { color: #f59e0b; font-style: normal; }
.vx-meter, .vx-eq-meter { position: relative; height: 8px; border-radius: 4px; background: #0b1118; overflow: hidden; border: 1px solid #1d2733; }
.vx-meter i, .vx-eq-meter i { display: block; height: 100%; width: 0; background: linear-gradient(90deg, #1f9d55, #2fd16b 70%, #f2cf4a 88%, #ff4a3d); transition: width .06s linear; }
.vx-meter b { position: absolute; right: 3px; top: -2px; font-size: 8px; color: #ff4a3d; opacity: 0; }
.vx-meter b.on { opacity: 1; }
.vx-row { display: flex; gap: 6px; }
.vx-row .btn { flex: 1 1 0; min-width: 0; font-size: 10px; padding: 4px 5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.vx-row .btn[aria-pressed='true'], .vx-eq-f .btn[aria-pressed='true'] { border-color: var(--ctl, #00d4ff); color: var(--ctl, #00d4ff); }
.vx-note { font-size: 10.5px; line-height: 1.4; color: var(--v2-text-secondary, #9fb0c2); overflow-wrap: anywhere; }
.vx-note.warn { color: #f59e0b; }
.vx-eq { position: fixed; z-index: 80; left: 50%; top: 50%; transform: translate(-50%, -50%); width: min(620px, calc(100vw - 24px)); max-height: calc(100vh - 24px); overflow: auto;
  background: var(--v2-bg-card, #0d141d); border: 1px solid var(--v2-border, #2a3746); border-radius: 8px; box-shadow: 0 16px 48px rgba(0, 0, 0, .6); padding: 12px 14px; display: flex; flex-direction: column; gap: 9px; font-size: 12px; }
.vx-eq-h { display: flex; align-items: center; gap: 8px; }
.vx-eq-h b { color: var(--v2-accent-yellow, #f2cf4a); font-size: 13px; }
.vx-eq-h span { flex: 1; color: var(--v2-text-secondary, #9fb0c2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.vx-eq canvas { width: 100%; height: auto; border-radius: 5px; border: 1px solid #1d2733; }
.vx-eq-top { display: flex; flex-wrap: wrap; gap: 6px 16px; align-items: center; }
.vx-eq-top select { font: inherit; font-size: 12px; color: var(--v2-text-bright, #fff); background: #111923; border: 1px solid var(--v2-border, #2a3746); border-radius: 4px; padding: 2px 5px; }
.vx-cuts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.vx-bands { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.vx-band { margin: 0; border: 1px solid #1d2733; border-radius: 6px; padding: 6px 8px 8px; display: flex; flex-direction: column; gap: 4px; }
.vx-band legend { color: var(--v2-accent-yellow, #f2cf4a); font-weight: 700; padding: 0 4px; }
.vx-eq label { display: flex; flex-direction: column; gap: 2px; color: var(--v2-text-secondary, #9fb0c2); }
.vx-eq-top label { flex-direction: row; align-items: center; gap: 5px; }
.vx-eq output { color: var(--v2-text-bright, #fff); font-variant-numeric: tabular-nums; }
.vx-eq input[type=range] { width: 100%; }
.vx-hint { margin: 0; color: var(--v2-text-secondary, #9fb0c2); font-size: 11px; line-height: 1.45; }
.vx-eq-f { display: flex; gap: 8px; justify-content: flex-end; flex-wrap: wrap; }
@media (max-width: 560px) { .vx-cuts, .vx-bands { grid-template-columns: 1fr; } }

.vx-trx { font-size: 10.5px; }
.vx-trx[hidden] { display: none; }
.vx-trxeq { width: min(760px, calc(100vw - 24px)); }
.vx-set { margin: 0; border: 1px solid var(--v2-border, #2a3746); border-radius: 7px; padding: 6px 8px 8px; }
.vx-set > legend { color: var(--ctl, #00d4ff); font-weight: 700; padding: 0 5px; }
.vx-trxeq select { font: inherit; font-size: 12px; color: var(--v2-text-bright, #fff); background: #111923; border: 1px solid var(--v2-border, #2a3746); border-radius: 4px; padding: 2px 4px; }
.vx-trxeq .warn { color: #f59e0b; }
.vx-trxeq input:disabled { opacity: .35; }
.vx-monvol { display: flex; align-items: center; gap: 6px; font-size: 10.5px; color: var(--v2-text-secondary, #9fb0c2); }
.vx-monvol input { flex: 1; min-width: 0; }
.vx-monvol output { min-width: 34px; text-align: right; color: var(--v2-text-bright, #fff); font-variant-numeric: tabular-nums; }
.vx-trxeq .vx-eq-f .btn, .vx-eq .vx-eq-f .btn { color: #fff !important; font-weight: 800; }
.vx-eq .vx-eq-f .btn:disabled { opacity: .45; }
/* « M'écouter » : vert gras comme « Écouter le TRX » */
#vxMonBtn, .vx-eq [data-a='mon'] { font-weight: 700; }
#vxMonBtn:not([aria-pressed='true']), .vx-eq [data-a='mon']:not([aria-pressed='true']) { color: #39FF14 !important; }
/* Grand écran : carte de bande en 4e colonne, tout à droite (après la colonne des réglages) */
@media (min-width: 1800px) and (min-height: 860px) {
  body.bm-far .workspace { grid-template-columns: 236px minmax(0, 1fr) 236px var(--bm-w); }
  body.bm-far .workspace > .bm { position: relative; grid-column: 4; grid-row: 1; right: auto; bottom: auto; top: auto; width: auto; min-height: 0;
    border: 1px solid var(--v2-border-panel); border-radius: var(--v2-panel-radius); overflow: hidden; }
  body.bm-far #centerPanel.bm-on > :not(.panel-h):not(.bm) { margin-right: 0; }
}
/* Bouton « Equalizer » (égaliseur du TRX) : vert gras comme « Écouter le TRX » */
#vxTrxBtn, #vxEqBtn { font-weight: 800; color: #fff !important; background: linear-gradient(180deg, #1f9d45, #12692c) !important; border-color: #39FF14 !important; }
#vxTrxBtn:hover, #vxEqBtn:hover { filter: brightness(1.12); }
/* MODE AUTO (plan de bande IARU Région 1), à droite des touches de bande */
.plan-btn { font-weight: 800; font-size: 10px; white-space: nowrap; margin-left: 6px; }
.plan-btn[aria-pressed='true'] { color: #fff !important; background: linear-gradient(180deg, #1f9d45, #12692c) !important; border-color: #39FF14 !important; }
.plan-btn[aria-pressed='false'] { color: var(--v2-text-dim) !important; }
/* Fiche du QSO : TX call et QO-100 sur la 1re ligne, Remarque plus courte, « Enregistrer le QSO » à gauche sous Nom */
.lg-row .lg-rem { flex: 0 1 340px; }
.lg-row .lg-rem input { width: 100%; }
.lg-row .lg-txc select { min-width: 150px; font-size: 13px; }
.lg-chk.lg-qo { font-size: 14px !important; font-weight: 700; color: var(--v2-text-bright, #fff) !important; align-self: flex-end; padding-bottom: 6px; }
.lg-chk.lg-qo input { transform: scale(1.35); margin-right: 3px; }
.lg-row.lg-refs { align-items: flex-end; gap: 8px; }
.lg-refs-t { font-size: 12px; font-weight: 700; color: #ffd400; padding-bottom: 6px; min-width: 128px; }
.lg-myrefs .lg-refs-t { color: #6fe36f; }
.lg-ref input { width: 96px; text-transform: uppercase; font-family: ui-monospace, Consolas, monospace; }
.lg-row .lg-ref { color: #ffd400; font-weight: 700; }
.lg-row .lg-gap { width: 18px; flex: 0 0 18px; }
.lg-myrefs .lg-ref input { border-color: #2f8f2f; }
.lg-myref-btn { font-size: 12px; padding: 4px 8px; }
.lg-myref-btn[aria-pressed="true"] { background: #1f5f1f; color: #fff; font-weight: 700; }
.lg-refbox { position: absolute; z-index: 60; min-width: 300px; max-width: 520px; max-height: 280px; overflow-y: auto;
  background: #11161d; border: 1px solid #3a4656; border-radius: 6px; box-shadow: 0 6px 18px rgba(0,0,0,.55); padding: 3px; }
.lg-refi { display: block; width: 100%; text-align: left; background: none; border: 0; color: #d7dde6; padding: 4px 6px;
  font-size: 12.5px; cursor: pointer; border-radius: 4px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.lg-refi b { color: #ffd400; font-family: ui-monospace, Consolas, monospace; margin-right: 4px; }
.lg-refi small { color: #8b97a8; }
.lg-refi.cur, .lg-refi:hover { background: #24425f; }
.lg-refn { margin: 4px 6px; font-size: 12px; color: #f0b35a; white-space: normal; }
.lg-reft { border-collapse: collapse; margin: 8px 0; font-size: 13px; }
.lg-reft th, .lg-reft td { padding: 4px 10px; border-bottom: 1px solid #2a3442; text-align: left; }
.lg-reft .lg-bad { color: #ff7a7a; }
td.lg-loc { font-family: ui-monospace, Consolas, monospace; }
td.lg-refc { font-size: 11.5px; max-width: 150px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-family: ui-monospace, Consolas, monospace; }
.lg-form .lg-act { justify-content: flex-start; }
/* Logbooks, Log QSO et Synchro : même hauteur */
.ctabs .ctab[data-tab='log'], .ctabs .ctab[data-tab='sync'], .ctabs .ctab-log { height: 26px; min-height: 0; box-sizing: border-box; display: inline-flex; align-items: center; line-height: 1; padding-top: 0; padding-bottom: 0; }
.win-btn[hidden] { display: none; }
.win-btn { white-space: nowrap; }
/* Cadre MODE : touches plus lisibles (LSB, USB, CW-L…) */
#modeKeys .btn { font-size: 13px; letter-spacing: .03em; min-height: 28px; color: var(--v2-text-bright, #e8edf3); }
#modeKeys .btn[aria-pressed='true'] { color: #fff; }
/* Bouton PRENDRE / LIBÉRER LA MAIN : plus grand, couleur selon l'état, bien visible dans le bandeau */
#ctrlBtn { font-size: 14px; font-weight: 800; letter-spacing: .05em; padding: 5px 14px; min-height: 34px; border-width: 2px; border-radius: 6px; }
#ctrlBtn[data-state='free'], #ctrlBtn[data-state='here'] { background: linear-gradient(180deg, #2fbf4a, #1c8a33); border-color: #7dff9a; color: #fff;
  text-shadow: 0 1px 2px rgba(0,0,0,.5); animation: ctlPulse 1.6s ease-in-out infinite; }
#ctrlBtn[data-state='free']:hover, #ctrlBtn[data-state='here']:hover { background: linear-gradient(180deg, #3ad457, #22a03c); color: #fff; }
#ctrlBtn[data-state='mine'] { background: linear-gradient(180deg, #ff8a1f, #c85a00); border-color: #ffd08a; color: #fff; text-shadow: 0 1px 2px rgba(0,0,0,.5);
  box-shadow: 0 0 10px rgba(255,138,31,.55); }
#ctrlBtn[data-state='mine']:hover { background: linear-gradient(180deg, #ff9d42, #d96800); color: #fff; }
#ctrlBtn[data-state='admin'] { background: #2a2410; border-color: #ffd400; color: #ffd400; }
#ctrlBtn[data-state='busy'] { border-color: #5b6573; color: #aab3bf; }
@keyframes ctlPulse { 0%, 100% { box-shadow: 0 0 4px rgba(57,255,20,.35); } 50% { box-shadow: 0 0 16px 3px rgba(57,255,20,.75); } }
@media (prefers-reduced-motion: reduce) { #ctrlBtn[data-state='free'], #ctrlBtn[data-state='here'] { animation: none; box-shadow: 0 0 10px rgba(57,255,20,.6); } }

/* FTDX101 en double réception (page /ftdx101) : FT8 / FT4 / FT2 décodés sur MAIN (VFO-A) et SUB (VFO-B) —
   deux cascades côte à côte et quatre colonnes (activité de bande et fréquence RX de chaque VFO) */
.ft-wfrow { display: grid; grid-template-columns: minmax(0, 1fr); }
.ft-dual .ft-wfrow { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 8px; align-items: end; }
.ft-wfa, .ft-sd { display: none; }
.ft-dual .ft-wfa { display: inline; font-weight: 700; letter-spacing: .6px; color: #ffcf4a; margin-right: 4px; }
.ft-dual .ft-sd { display: inline; font-style: normal; color: #ffcf4a; }
.ft-sd.b { color: #7fb2ff !important; }
.ft-wfa b, .ft-wfbl b { color: #fff; font-weight: 700; margin-left: 4px; }
.ft-wfbl { font-weight: 700; letter-spacing: .6px; color: #7fb2ff; margin-right: 4px; }
.ft-wfh label, .ft-wfh select { color: var(--v2-text-secondary); }
#ftWfB { height: 140px; }
#ftScaleB { height: 44px; }
.ft-txside { display: none; align-items: center; gap: 2px; }
.ft-dual .ft-txside { display: inline-flex; }
.ft-txside .dg-f { margin-right: 4px; }
.ft-txside .btn[data-side="A"][aria-pressed="true"] { background: #b8860b; border-color: #ffcf4a; color: #fff; }
.ft-txside .btn[data-side="B"][aria-pressed="true"] { background: #2456b8; border-color: #7fb2ff; color: #fff; }
.ft-dual .dg-cols { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0 6px; }
.ft-dual .dg-cols > .dg-col:nth-child(3) { margin-right: 9px; position: relative; } /* l'espace entre les colonnes A et B */
/* Ligne de séparation gris moyen entre le décodage du VFO-A et celui du VFO-B (cascades et colonnes) */
.ft-dual .dg-cols > .dg-col:nth-child(3)::after { content: ''; position: absolute; top: -2px; bottom: -1px; right: -9px; width: 3px; border-radius: 2px; background: #7a8494; }
.ft-dual .ft-wfrow { gap: 12px; }
.ft-dual .ft-wfrow > .dg-wf-slot { position: relative; }
.ft-dual .ft-wfrow > .dg-wf-slot::after { content: ''; position: absolute; top: 0; bottom: 0; right: -7.5px; width: 3px; border-radius: 2px; background: #7a8494; }
.ft-dual .dg-vsplit { display: none; }
.ft-dual .dg-col { border-top: 2px solid #b8860b; }
.ft-dual .dg-col.ft-colb { border-top-color: #2456b8; }
/* VFO qui émet : son cadre et ses colonnes en évidence */
.ft-dual:not(.ft-txb) .dg-col:not(.ft-colb), .ft-dual.ft-txb .dg-col.ft-colb { box-shadow: inset 0 0 0 1px rgba(255, 90, 74, .35); }
/* Colonnes plus étroites : sans distance ni azimut */
/* Double réception : sans les colonnes Pays, km et Az (ils sont dans l'info-bulle de l'indicatif) — place pour les deux cartes de bande */
.ft-dual .dg-th.ft, .ft-dual .dg-row.ft { grid-template-columns: 50px 26px 28px 36px minmax(0, 1fr); gap: 3px; padding-inline: 4px; font-size: 12px; }
.ft-dual .dg-th.ft span:nth-child(n+6), .ft-dual .dg-row.ft span:nth-child(n+6) { display: none; }
.ft-dual .dg-row.ft span.msg { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ft-dual .dg-h .dg-note { display: none; }
@media (max-width: 1100px) { .ft-dual .dg-cols { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px 6px; } .ft-dual .ft-wfrow { grid-template-columns: minmax(0, 1fr); } }
.ft-md { display: inline-block; margin-left: 8px; padding: 0 6px; border-radius: 3px; font-style: normal; font-weight: 700; font-size: 10px; letter-spacing: .5px; color: #fff; background: #1f7a3d; }
.ft-md.bad { background: #c0581a; }
.dg-txc { display: inline-flex; align-items: center; gap: 4px; }
.dg-txc[hidden] { display: none; }
.dg-txc select { font: inherit; font-size: 12px; font-weight: 700; padding: 1px 4px; width: auto; min-width: 0; }
/* Deux cartes de bande (double réception, FT8 / FT4 / FT2) : VFO-A puis VFO-B, au bord droit de la fenêtre */
.bm-vfo { display: none; font-size: 9.5px; font-weight: 700; letter-spacing: .6px; color: #ffcf4a; white-space: nowrap; }
.bm-vfo.b { display: inline; color: #7fb2ff; }
#centerPanel.bm-dual .bm-vfo { display: inline; }
/* Carte du VFO-A (MAIN) à gauche du décodage du VFO-A, carte du VFO-B (SUB) à droite de celui du VFO-B */
#centerPanel.bm-on.bm-dual > :not(.panel-h):not(.bm) { margin-right: var(--bm-w); margin-left: var(--bm-w); }
#centerPanel.bm-dual > .bm:not(.bm-b) { right: auto; left: 0; border-left: 0; border-right: 3px solid #7a8494; border-radius: var(--v2-panel-radius) 0 0 var(--v2-panel-radius); }
#centerPanel.bm-dual > .bm .bm-grip { display: none; }
.bm.bm-b { border-left: 3px solid #7a8494; }
/* Fréquence de chaque VFO au-dessus de sa cascade, en grand ; sur fond rouge pour le VFO choisi pour émettre */
#ftDialA, #ftDialB { display: inline-block; font-size: 15px; letter-spacing: .3px; padding: 1px 7px; border-radius: 4px; border: 1px solid transparent; }
.ft-dual:not(.ft-txb) #ftDialA, .ft-dual.ft-txb #ftDialB { background: #c0221a; border-color: #ff6b5b; color: #fff; box-shadow: 0 0 6px rgba(255, 60, 40, .55); }
.ft-dual:not(.ft-txb) #ftDialA::before, .ft-dual.ft-txb #ftDialB::before { content: 'TX '; font-size: 11px; font-weight: 800; }
/* « TX call » en jaune fluo */
.dg-txc .dg-f { color: #f5ff00; font-weight: 800; text-shadow: 0 0 4px rgba(245, 255, 0, .45); }
.dg-txc select { color: #f5ff00; border-color: #8a8f00; }
.bm-r input { color: #fff; font-weight: 700; } /* plage de la carte de bande : blanc gras */
/* Ascenseur à droite de chaque carte de bande */
.bm-sb { position: absolute; top: 0; right: 0; bottom: 0; width: 13px; overflow-y: scroll; overflow-x: hidden; z-index: 2; cursor: default; scrollbar-width: thin; scrollbar-color: #7a8494 rgba(0, 0, 0, .35); background: rgba(0, 0, 0, .25); }
.bm-sb > i { display: block; width: 1px; }
.bm-body .bm-s { right: 15px; }
.dg-mk-tx.mk-off { border-left-color: rgba(127, 178, 255, .95); background: rgba(36, 86, 184, .12); } /* TX du VFO qui n'émet pas : bleu */
/* RTTY en double réception : les deux colonnes alignées ligne par ligne (en-têtes, cascades, texte reçu) */
@media (min-width: 901px) {
  .rt-dual { grid-template-rows: auto auto minmax(0, 1fr); }
  .rt-dual > .rt-side { grid-row: 1 / span 3; display: grid; grid-template-rows: subgrid; }
  .rt-dual > .rt-vsplit { grid-row: 1 / span 3; }
  .rt-dual > .rt-side > .dg-h { grid-row: 1; }
  .rt-dual > .rt-side > .dg-wf-slot, .rt-dual > .rt-side > .rt-wfb { grid-row: 2; }
  .rt-dual > .rt-side > .rt-rx { grid-row: 3; }
  .rt-dual > .rt-side > .dg-h { align-self: stretch; }
}
#rtScaleB { cursor: ew-resize; } /* RTTY : la règle des fréquences accorde le VFO */

/* Annonces (fenêtre des modes numériques, face avant) : jaune fluo, clignotant pendant 3 s pour attirer l'attention */
@keyframes rsBlink { 0%, 49% { background: #f5ff00; color: #10140a; } 50%, 100% { background: #10140a; color: #f5ff00; } }
.dg-toast:not(:empty), .fc-msg:not(:empty) { color: #f5ff00; font-weight: 700; font-size: 14px; border: 2px solid #f5ff00 !important; box-shadow: 0 0 12px rgba(245, 255, 0, .45); }
.dg-toast.error:not(:empty), .fc-msg.error:not(:empty) { border-color: #ff5a4a !important; }
.dg-toast.blink:not(:empty), .fc-msg.blink:not(:empty) { animation: rsBlink .5s linear 2; }
/* RTTY : contest (choix, échange, numéro) et ses macros sous les macros habituelles */
.rt-contest { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; padding: 8px 8px 0; font-size: 11px; color: var(--v2-text-secondary); }
.rt-contest .rtc-l { display: inline-flex; align-items: center; gap: 6px; font-weight: 700; letter-spacing: .5px; text-transform: uppercase; }
.rt-contest .rtc-l:first-child { color: #f5ff00; }
.rt-contest select, .rt-contest input { font: inherit; font-size: 12px; font-weight: 700; text-transform: uppercase; color: #fff; background: var(--v2-bg-input); border: 1px solid var(--v2-border); border-radius: 4px; padding: 3px 6px; }
.rt-contest #rtcExch { width: 150px; }
.rt-contest .rtc-s input { width: 42px; text-align: center; }
.rt-contest:not(.on) .rtc-l:not(:first-child), .rt-contest:not(.on) .dg-mini { opacity: .45; }
.rt-contest.on select { border-color: #f5ff00; color: #f5ff00; }
.rtc-macros .btn { box-shadow: inset 0 -2px 0 #f5ff00; }
.rtc-macros[hidden] { display: none; }
/* Poignée sous les fenêtres de décodage RTTY : leur hauteur */
.rt-hgrip { display: block; height: 9px; margin: 2px 0; cursor: ns-resize; position: relative; touch-action: none; flex: none; }
.rt-hgrip::after { content: ''; position: absolute; left: 50%; top: 3px; width: 60px; height: 3px; margin-left: -30px; border-radius: 2px; background: var(--v2-border-panel, #3a4658); }
.rt-hgrip:hover::after { background: var(--v2-accent-cyan, #00d4ff); }
.rt-contest #rtcNrM, .rt-contest #rtcNrP { font-size: 11px; font-weight: 800; color: #fff; min-width: 30px; }
.md-tgh { flex-basis: 100%; margin-top: 4px; font-size: 10px; font-weight: 800; letter-spacing: .8px; text-transform: uppercase; color: #f5ff00; }
.md-tgh:first-child { margin-top: 0; }
.rt-contest .rtc-n input { width: 90px; }
.rt-contest #rtcSel { max-width: 260px; }
.rt-hd .rt-sig { font-size: 10.5px; font-weight: 700; color: #c8d3e3; letter-spacing: .3px; text-transform: none; white-space: nowrap; }
.rt-hd .rt-sig:empty { display: none; }
/* Colonnes et cascade du VFO-B cachées quand le 2e récepteur ne décode pas (sinon .dg-col { display: flex } les montre) */
.dg-col.ft-colb[hidden], .ft-wfb[hidden] { display: none !important; }
/* WSPR et JTTY en double réception : listes du VFO-A et du VFO-B côte à côte */
.ws-cols { display: grid; grid-template-columns: minmax(0, 1fr); gap: 0 12px; flex: 1; min-height: 0; }
.ws-cols > .ws-col { min-width: 0; }
.ft-dual .ws-cols { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
.ft-dual .ws-cols > .ws-col.dual-colb { position: relative; }
.ft-dual .ws-cols > .ws-col.dual-colb::before { content: ''; position: absolute; top: -2px; bottom: -1px; left: -8px; width: 3px; border-radius: 2px; background: #7a8494; }
.ft-dual .dg-cols.jt-cols { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.ft-dual .ws-col.dual-colb, .ft-dual .jt-cols .dual-colb { border-top: 2px solid #2456b8; }
.dg-col.dual-colb[hidden] { display: none !important; }
/* CW en double réception (FTDX101 : MAIN + SUB) : deux décodeurs côte à côte, chacun avec ses réglages dans son en-tête */
.dg-bar > .cw-ctl { display: contents; }
.dg-h .cw-ctl { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; flex: 1; min-width: 0; text-transform: none; letter-spacing: 0; font-weight: 400; font-size: 11px; }
.dg-h .cw-ctl select { font-size: 11px; padding: 1px 4px; }
.dg-h .cw-ctl .cw-bar { width: 60px; }
.cw-slot { display: contents; }
.rt-stack .cw-rxrow { flex: 1; display: flex; gap: 12px; min-height: 160px; }
.cw-rxrow > .rt-rx-col { flex: 1; min-width: 0; }
.ft-dual .cw-rxrow > .dual-colb { position: relative; }
.ft-dual .cw-rxrow > .dual-colb::before { content: ''; position: absolute; top: -2px; bottom: -1px; left: -8px; width: 3px; border-radius: 2px; background: #7a8494; }
.ft-dual.cwp .rt-tx-col { border-top: 1px solid var(--v2-border-dark); box-shadow: none; }
@media (max-width: 1100px) { .ft-dual .cw-rxrow { flex-direction: column; } .ft-dual .cw-rxrow > .dual-colb::before { display: none; } }
.cwp .ft-wfb .dg-mk-rx { border-left: 0; background: rgba(224, 168, 0, .22); box-shadow: inset 0 0 0 2px rgba(224, 168, 0, .95); }
/* CW : filtre du TRX (BW) sur la cascade — deux barres bleu clair, à glisser pour régler la largeur */
.cw-trx { position: absolute; top: 44px; bottom: 0; pointer-events: none; border-left: 2px solid rgba(95, 216, 255, .9); border-right: 2px solid rgba(95, 216, 255, .9); background: rgba(95, 216, 255, .05); z-index: 2; }
.cw-trx[hidden] { display: none; }
.cw-trx.nol { border-left: 0; } .cw-trx.nor { border-right: 0; }
.cw-trx > b { position: absolute; top: 0; bottom: 0; width: 12px; pointer-events: auto; cursor: ew-resize; }
.cw-trx > b:first-child { left: -7px; } .cw-trx > b:nth-child(2) { right: -7px; }
.cw-trx.nol > b:first-child, .cw-trx.nor > b:nth-child(2) { display: none; }
.cw-trx.ro > b { cursor: not-allowed; }
.cw-trx > b:hover { background: rgba(95, 216, 255, .25); }
.cw-trx > span { position: absolute; top: 2px; left: 50%; transform: translateX(-50%); padding: 0 5px; border-radius: 3px; background: rgba(5, 8, 13, .8); color: #5fd8ff; font: 700 10px Verdana, "DejaVu Sans", Arial, sans-serif; white-space: nowrap; }
/* Fenêtre des modes numériques : indication du zoom propre à la fenêtre */
.dg-zoomtip { position: fixed; top: 10px; left: 50%; transform: translateX(-50%); z-index: 9999; padding: 6px 14px; border-radius: 6px; background: rgba(20, 26, 38, .92); color: #fff; font: 600 13px system-ui, sans-serif; box-shadow: 0 4px 16px rgba(0, 0, 0, .5); pointer-events: none; }
.dg-zoomtip[hidden] { display: none; }

/* IC-7300 : Equalizer TRX = profil Tone Control/TBW, un réglage par ligne */
.vx-eq.vx-trxeq label.vx-icrow { display: grid; grid-template-columns: 150px auto auto auto; align-items: center; justify-content: start; gap: 8px; margin: 4px 0; }
.vx-trxeq .vx-icrow select { min-width: 84px; }

/* Dashboard : DÉCONNEXION à côté de PRENDRE / LIBÉRER LA MAIN, même taille, fond rouge et blanc gras (comme les faces avant) */
#logout { font-size: 14px; font-weight: 800; letter-spacing: .05em; padding: 5px 14px; min-height: 34px; border-width: 2px; border-radius: 6px;
  background: linear-gradient(180deg, #e8352a, #a8170f); border-color: #ff8a80; color: #fff; text-shadow: 0 1px 2px rgba(0,0,0,.5); }
#logout:hover:not(:disabled) { background: linear-gradient(180deg, #ff4a3d, #c21d14); color: #fff; }
/* Niveau du micro gradué : « Niveau micro » en haut, barre plus haute, graduations en dB dessous avec de l'espace
   (vert jusqu'à −12, jaune −12 à −6, rouge au-delà) */
.vx-meter, .vx-eq-meter { height: 40px !important; overflow: visible; border: 0; border-radius: 0; background: linear-gradient(90deg, #0b1118 0, #0b1118 75%, #2a2610 75%, #2a2610 87.5%, #3a1414 87.5%) 0 14px / 100% 12px no-repeat, transparent; }
.vx-meter i, .vx-eq-meter i { position: absolute; left: 0; top: 14px; height: 12px; border-radius: 0; background: #2fd16b; transition: width .06s linear; }
.vx-meter i.warm, .vx-eq-meter i.warm { background: #f2cf4a; }
.vx-meter i.hot, .vx-eq-meter i.hot { background: #ff4a3d; }
.vx-mt { position: absolute; left: 0; top: 0; font: 600 11px/1 system-ui, 'Segoe UI', Roboto, Arial, sans-serif; letter-spacing: .02em; color: #cfe3ff; }
.vx-scale { position: absolute; left: 0; right: 0; top: 26px; bottom: 0; pointer-events: none; }
.vx-scale em { position: absolute; top: -12px; height: 15px; width: 0; border-left: 1px solid rgba(111,130,153,.8); font-style: normal; }
.vx-scale em u { position: absolute; top: 17px; left: 0; transform: translateX(-50%); text-decoration: none; font: 600 10px/1 system-ui, 'Segoe UI', Roboto, Arial, sans-serif; color: #9fb2c8; white-space: nowrap; }
.vx-scale em.y { border-color: #f2cf4a; } .vx-scale em.y u { color: #f2cf4a; }
.vx-scale em.r { border-color: #ff4a3d; } .vx-scale em.r u { color: #ff4a3d; }
.vx-scale em:last-child u { transform: translateX(-100%); }
.vx-meter b { top: 0 !important; right: 0 !important; font: 700 9px/1.2 system-ui, sans-serif; background: #3a1414; padding: 0 3px; border-radius: 2px; }

/* ------------------------------------------------------------------ CW : clé de l'opérateur (public/js/paddle.js) */
.cwk { padding: 0 8px; display: grid; gap: 6px; }
.cwk-bar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.cwk-arm { white-space: nowrap; }
.cwk-arm b { color: var(--v2-text-dim); margin-left: 4px; }
.cwk-arm.on { border-color: #ff5a4a; background: rgba(255, 50, 40, .18); }
.cwk-arm.on b { color: #fff; }
.cwk-led { width: 12px; height: 12px; border-radius: 50%; background: #1d2633; border: 1px solid var(--v2-border); flex: none; }
.cwk-led.on { background: #ffd400; box-shadow: 0 0 8px rgba(255, 212, 0, .8); }
.cwk-tx { font-size: 9.5px; font-weight: 800; letter-spacing: .8px; padding: 2px 5px; border-radius: 3px; border: 1px solid var(--v2-border); color: var(--v2-text-dim); }
.cwk-tx.on { background: #e02b1f; border-color: #ff5a4a; color: #fff; box-shadow: 0 0 10px rgba(255, 50, 40, .6); }
.cwk-sum { flex: 1; min-width: 120px; color: var(--v2-text-dim); font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cwk-pd { width: 44px; height: 30px; font-size: 18px; font-weight: 800; line-height: 1; border-radius: 6px; border: 1px solid var(--v2-border); background: #141b26; color: var(--v2-text-bright); cursor: pointer; touch-action: none; user-select: none; }
.cwk-pd.on { background: #ffd400; color: #000; }
.cwk-set { display: flex; flex-wrap: wrap; gap: 6px 14px; padding: 8px; border: 1px solid var(--v2-border-dark); border-radius: 6px; background: rgba(0, 0, 0, .25); font-size: 11.5px; }
.cwk-set[hidden] { display: none; }
.cwk-set label { display: inline-flex; align-items: center; gap: 6px; }
.cwk-set select, .cwk-set input[type="number"] { background: #07090d; border: 1px solid var(--v2-border); border-radius: 4px; padding: 3px 5px; color: var(--v2-text-bright); }
.cwk-set input[type="number"] { width: 58px; }
.cwk-set input[type="range"] { width: 90px; }
.cwk-src { width: 100%; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.cwk-src[hidden] { display: none; }
.cwk-src .dg-mini { font-size: 11px; text-transform: none; color: var(--v2-text-bright); padding: 3px 8px; }
.cwk-src .dg-mini.on { border-color: #ffd400; color: #ffd400; }
.cwk-hint { width: 100%; margin: 0; color: var(--v2-text-dim); font-size: 11px; }
.cwk-src .cwk-hint { width: auto; }
.cwk-out[hidden] { display: none; }
.cwk-out select { max-width: 260px; }
/* Bouton « Réglages » de la clé : bien visible (fond blanc, texte noir gras) */
.cwk-bar .cwk-cfg { background: #fff; color: #000; font-weight: 800; font-size: 12.5px; letter-spacing: .5px; padding: 6px 14px; border: 1px solid #fff; border-radius: 5px; text-transform: uppercase; }
.cwk-bar .cwk-cfg:hover { background: #ffe680; border-color: #ffe680; color: #000; }
.cwk-bar .cwk-cfg[aria-expanded="true"] { background: #ffd400; border-color: #ffd400; color: #000; }
.rt-rx .rt-txline.cwk-practice, .rt-rx .rt-txline.cwk-practice .rt-done { color: #8d99aa; font-style: italic; }
.cwk-bar .cwk-open { background: #1f6feb; color: #fff; font-weight: 800; font-size: 12.5px; letter-spacing: .5px; padding: 6px 14px; border: 1px solid #58a6ff; border-radius: 5px; cursor: pointer; }
.cwk-bar .cwk-open:hover { background: #388bfd; }
.cwk.cwk-off { opacity: .45; pointer-events: none; }
.cwk.cwk-off .cwk-open { pointer-events: auto; }

/* ------------------------------------------------------------------ Page « TRX CW » (cw.html) */
.cwp-body { margin: 0; min-height: 100vh; display: flex; flex-direction: column; }
.cwp-head { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; padding: 6px 14px; background: #0f1622; border-bottom: 1px solid var(--v2-border); }
.cwp-head h1 { margin: 0; font-size: 20px; letter-spacing: 1px; color: #fff; text-transform: uppercase; }
.cwp-head h1 small { font-size: 11px; color: var(--v2-text-dim); letter-spacing: .5px; margin-left: 6px; text-transform: none; }
.cwp-trx { font-family: 'Roboto Mono', ui-monospace, monospace; font-size: 22px; color: #5fd8ff; font-weight: 700; }
.cwp-mode { font-size: 13px; padding: 2px 7px; border-radius: 4px; border: 1px solid var(--v2-border); color: var(--v2-text-bright); margin-left: 6px; vertical-align: middle; }
.cwp-mode.bad { border-color: #ff9a00; color: #ffb84d; }
.cwp-ctl { display: flex; align-items: center; gap: 10px; font-size: 13px; color: var(--v2-text-dim); }
.cwp-ctl .ok { color: #3fd07f; font-weight: 700; }
.cwp-take { background: #3fd07f; color: #000; font-weight: 800; border: 0; border-radius: 5px; padding: 6px 12px; cursor: pointer; }
.cwp-txbig { margin-left: auto; min-width: 110px; text-align: center; font-size: 24px; font-weight: 900; letter-spacing: 3px; padding: 2px 16px; border-radius: 8px; background: #123a1f; color: #3fd07f; border: 2px solid #2a6b40; }
.cwp-txbig.on { background: #c8170d; color: #fff; border-color: #ff5a4a; box-shadow: 0 0 22px rgba(255, 50, 40, .55); }
.cwp-orphan { margin: 10px 16px 0; padding: 10px 12px; border: 1px solid #ff9a00; border-radius: 6px; color: #ffb84d; }
.cwp-orphan[hidden] { display: none; }
.cwp-main { flex: 1; display: grid; grid-template-columns: 1fr; gap: 8px; padding: 8px 12px; min-height: 0; grid-template-rows: auto auto auto minmax(220px, 1fr); }
.cwp-grid3 { display: grid; grid-template-columns: 1.15fr 1fr 1.35fr; gap: 8px; padding: 0; }
.cwp-box { border: 1px solid var(--v2-border); border-radius: 8px; background: #0f1622; padding: 6px 10px 8px; min-width: 0; display: flex; flex-direction: column; gap: 5px; }
.cwp-box h2 { margin: 0; font-size: 11px; letter-spacing: 1.2px; text-transform: uppercase; color: #ffd400; display: flex; align-items: center; gap: 10px; }
.cwp-box h2 small { color: var(--v2-text-dim); letter-spacing: 0; text-transform: none; font-weight: 400; font-size: 11px; }
.cwp-wpmrow { display: flex; align-items: center; gap: 10px; }
.cwp-col { flex: 1; display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.cwp-wpm { display: flex; flex-direction: column; align-items: center; min-width: 64px; }
.cwp-wpm b { font-size: 36px; line-height: 1; color: #58a6ff; font-weight: 800; }
.cwp-wpm small { font-size: 10px; color: var(--v2-text-dim); }
.cwp-slider { flex: 1; width: 100%; min-width: 60px; accent-color: #1f6feb; }
.cwp-row { display: flex; align-items: center; gap: 8px; font-size: 12px; }
.cwp-row b { min-width: 52px; color: var(--v2-text-bright); white-space: nowrap; }
.cwp-row select { flex: 1; min-width: 0; background: #07090d; border: 1px solid var(--v2-border); border-radius: 4px; padding: 3px 5px; color: var(--v2-text-bright); font-size: 12px; }
.cwp-row .cwk-c { display: inline-flex; align-items: center; gap: 5px; white-space: nowrap; }
.cwp-armrow { display: flex; align-items: center; gap: 8px; }
.cwk-page .cwk-pd { width: 54px; height: 38px; font-size: 22px; flex: none; }
.cwp-arm { flex: 1; font-size: 14px; font-weight: 900; letter-spacing: 1.2px; padding: 9px 8px; border-radius: 6px; border: 2px solid #7a8494; background: #2a3240; color: #fff; cursor: pointer; white-space: nowrap; }
.cwp-arm b { margin-left: 6px; }
.cwp-arm.on { background: #c8170d; border-color: #ff5a4a; }
.cwp-lamps { display: inline-flex; align-items: center; gap: 8px; }
.cwk-page .cwk-led { width: 16px; height: 16px; }
.cwk-page .cwk-tx { font-size: 12px; padding: 3px 7px; }
.cwk-page .cwk-src { font-size: 11.5px; gap: 5px; }
.cwk-page .cwk-ser { font-size: 11px; color: #ffb84d; }
.cwk-page .cwk-hint { font-size: 11px; }
.cwp-ctrow { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; font-size: 12px; }
.cwp-ctrow label { display: inline-flex; align-items: center; gap: 6px; }
.cwp-ctrow select, .cwp-ctrow input { background: #07090d; border: 1px solid var(--v2-border); border-radius: 4px; padding: 4px 6px; color: var(--v2-text-bright); font-size: 12.5px; }
.cwp-ctl1 { color: #ffd400; font-weight: 800; letter-spacing: 1px; text-transform: uppercase; font-size: 11px; }
.cwp-ctl1 select { min-width: 230px; text-transform: none; letter-spacing: 0; font-weight: 600; }
#cwpExch { width: 150px; text-transform: uppercase; font-family: 'Roboto Mono', ui-monospace, monospace; }
#cwpExch:disabled { opacity: .45; }
.cwp-exsh { color: #3fd07f; font-family: 'Roboto Mono', ui-monospace, monospace; font-weight: 700; }
.cwp-nr { display: inline-flex; align-items: center; gap: 4px; }
.cwp-nr input { width: 58px; text-align: center; font-size: 15px !important; font-weight: 800; color: #ffd400 !important; font-family: 'Roboto Mono', ui-monospace, monospace; }
.cwp-nr button { background: #1a2230; border: 1px solid var(--v2-border); color: var(--v2-text-bright); border-radius: 4px; padding: 3px 7px; cursor: pointer; }
.cwp-z { width: 38px; text-align: center; }
.cwp-nm { width: 100px; text-transform: uppercase; }
body:not(.cwp-inctst) .cwp-ctrow > :not(.cwp-ctl1) { opacity: .5; }
.cwp-macros { display: grid; grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); gap: 6px; }
.cwp-macros[hidden] { display: none; }
.cwp-macro { display: flex; flex-direction: column; align-items: center; gap: 0; padding: 5px 4px; border-radius: 6px; border: 1px solid var(--v2-border); background: #1a2230; color: var(--v2-text-bright); font-weight: 800; font-size: 13px; cursor: pointer; }
.cwp-macro small { font-size: 9.5px; color: var(--v2-text-dim); font-weight: 400; min-height: 11px; }
.cwp-macro.tx { border-color: #b23a32; }
.cwp-macro.ctst { background: #2a2410; border-color: #c9a200; }
.cwp-macro.ctst.tx { border-color: #ffd400; }
.cwp-macro:hover { background: #24304a; }
.cwp-macro.ctst:hover { background: #3a3214; }
.cwp-macro.cwp-edit { justify-content: center; font-weight: 600; color: var(--v2-text-dim); }
.cwp-sendrow { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.cwp-sendrow input { background: #07090d; border: 1px solid var(--v2-border); border-radius: 5px; padding: 7px 10px; color: var(--v2-text-bright); font-size: 14px; text-transform: uppercase; }
#cwpTxt { flex: 1; min-width: 240px; font-family: 'Roboto Mono', ui-monospace, monospace; }
.cwp-call { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--v2-text-dim); }
.cwp-call input { width: 120px; font-weight: 800; }
.cwp-send { background: #c8170d; color: #fff; font-weight: 900; border: 0; border-radius: 5px; padding: 8px 16px; cursor: pointer; }
.cwp-stop { background: #fff; color: #000; font-weight: 900; border: 0; border-radius: 5px; padding: 8px 14px; cursor: pointer; }
.cwp-note { margin: 0; font-size: 11px; color: var(--v2-text-dim); }
.cwp-rx { min-height: 0; }
.cwp-rxtxt { flex: 1; min-height: 160px; max-height: none; font-size: 15px; }
.cwp-clear { margin-left: auto; background: #fff; color: #000; font-weight: 800; border: 0; border-radius: 4px; padding: 3px 10px; font-size: 11px; cursor: pointer; }
.cwp-foot { display: flex; flex-wrap: wrap; gap: 6px 22px; padding: 5px 16px; border-top: 1px solid var(--v2-border); background: #0f1622; font-size: 12px; color: var(--v2-text-dim); }
.cwp-foot .ok { color: #3fd07f; } .cwp-foot .warn { color: #ffb84d; } .cwp-foot .bad { color: #ff6b5e; }
@media (max-width: 1050px) { .cwp-grid3 { grid-template-columns: 1fr 1fr; } .cwp-grid3 > .cwp-in { grid-column: 1 / -1; } }
@media (max-width: 700px) { .cwp-grid3 { grid-template-columns: 1fr; } .cwp-txbig { margin-left: 0; } }
/* TRX CW : log du contest (ligne de saisie à la N1MM, liste, compteurs) */
.cwp-cgrid { display: grid; grid-template-columns: minmax(0, 1.7fr) minmax(280px, 1fr); gap: 10px; }
.cwp-cgrid[hidden] { display: none; }
.cwp-cleft { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.cwp-cright { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.cwp-entry { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; padding: 6px 8px; border-radius: 6px; background: #121d2c; border: 1px solid #2c4a6e; font-size: 11.5px; color: var(--v2-text-dim); }
.cwp-entry label { display: inline-flex; flex-direction: column; gap: 1px; }
.cwp-entry input { background: #07090d; border: 1px solid var(--v2-border); border-radius: 4px; padding: 5px 7px; color: var(--v2-text-bright); font-size: 15px; font-weight: 800; text-transform: uppercase; font-family: 'Roboto Mono', ui-monospace, monospace; }
#cwpECall { width: 124px; color: #fff; border-color: #58a6ff; }
#cwpEStx, #cwpESrx { width: 92px; }
#cwpESrx { border-color: #3fd07f; }
.cwp-rst { width: 52px; text-align: center; }
.cwp-esm { display: inline-flex; border: 1px solid var(--v2-border); border-radius: 5px; overflow: hidden; }
.cwp-esm button { background: #1a2230; color: var(--v2-text-dim); border: 0; padding: 6px 10px; font-weight: 800; cursor: pointer; }
.cwp-esm button.on { background: #1f6feb; color: #fff; }
.cwp-elog { background: #3fd07f; color: #000; font-weight: 900; border: 0; border-radius: 5px; padding: 8px 12px; cursor: pointer; align-self: flex-end; }
.cwp-ewipe { background: #2a3240; color: #fff; font-weight: 700; border: 1px solid var(--v2-border); border-radius: 5px; padding: 7px 10px; cursor: pointer; align-self: flex-end; }
.cwp-dupe { align-self: flex-end; font-weight: 900; font-size: 13px; padding: 6px 8px; border-radius: 4px; }
.cwp-dupe:empty { display: none; }
.cwp-dupe.dup { background: #e01b0f; color: #fff; font-weight: 900; letter-spacing: 1px; padding: 6px 12px; animation: cwpDupeBlink 0.8s steps(1, end) infinite; }
@keyframes cwpDupeBlink { 50% { background: #5a0904; color: #ffd0cc; } }
@media (prefers-reduced-motion: reduce) { .cwp-dupe.dup { animation: none; } }
.cwp-dupe.new { color: #3fd07f; }
.cwp-cstats { font-size: 11.5px; color: var(--v2-text-dim); }
.cwp-cstats b { color: var(--v2-text-bright); }
.cwp-cstats .dup { color: #ff6b5e; }
.cwp-clogw { flex: 1; min-height: 90px; max-height: 150px; overflow-y: scroll; scrollbar-width: thin; scrollbar-color: #7a8494 rgba(0, 0, 0, .35); border: 1px solid var(--v2-border-dark); border-radius: 4px; }
.cwp-clog { width: 100%; border-collapse: collapse; font-family: 'Roboto Mono', ui-monospace, monospace; font-size: 12px; }
.cwp-clog th { position: sticky; top: 0; background: #1a2230; color: var(--v2-text-dim); font-weight: 600; text-align: left; padding: 2px 6px; font-size: 10.5px; }
.cwp-clog td { padding: 1px 6px; color: var(--v2-text-bright); border-top: 1px solid rgba(255, 255, 255, .04); white-space: nowrap; }
.cwp-clog tr:first-child td { color: #ffd400; }
.cwp-crow2 { display: flex; align-items: center; justify-content: space-between; gap: 8px; font-size: 11.5px; }
.cwp-crow2 input { background: #07090d; border: 1px solid var(--v2-border); border-radius: 4px; padding: 2px 5px; color: var(--v2-text-bright); color-scheme: dark; }
.cwp-crow2 button { background: #fff; color: #000; font-weight: 800; border: 0; border-radius: 4px; padding: 4px 10px; cursor: pointer; }
.cwp-call[hidden] { display: none; }
@media (max-width: 1050px) { .cwp-cgrid { grid-template-columns: 1fr; } }
.dg-alog select { font-size: 11px; padding: 1px 3px; background: #07090d; border: 1px solid var(--v2-border); border-radius: 4px; color: var(--v2-text-bright); max-width: 190px; }
.qso-note { color: #ffb84d; margin: 0 0 6px; }
.sy-btn { justify-self: start; margin-top: 4px; font-size: 11px; padding: 3px 10px; }
.sy-btn.busy { background: #1f6feb; border-color: #58a6ff; color: #fff; opacity: 1; }
.sy-btn.done { background: #1f7a3f; border-color: #3fd07f; color: #fff; }
.sy-btn.fail { background: #8a1c14; border-color: #ff5a4a; color: #fff; }
.sy-res { color: #ffd400; }
.sy-res:empty { display: none; }
/* TRX SSB (ssb.html) : contests en phonie */
.ssb-main { grid-template-rows: auto; align-content: start; }
.ssb-main .cwp-ctst { gap: 8px; }
.ssb-rules { color: #58a6ff; font-weight: 700; text-decoration: none; border: 1px solid #2c4a6e; border-radius: 4px; padding: 3px 8px; }
.ssb-rules:hover { background: #142236; }
.ssb-rules[hidden], .cwp-ctrow label[hidden] { display: none; }
.cwp-chk { cursor: pointer; }
.cwp-chk input { accent-color: #1f6feb; width: 15px; height: 15px; }
.ssb-vk { display: flex; flex-direction: column; gap: 6px; padding: 6px 8px; border: 1px solid var(--v2-border); border-radius: 6px; background: #0b121c; }
.ssb-vkh { font-size: 11px; letter-spacing: 1.2px; text-transform: uppercase; color: #ffd400; font-weight: 800; }
.ssb-vkh small { color: var(--v2-text-dim); letter-spacing: 0; text-transform: none; font-weight: 400; margin-left: 8px; }
.cwp-macro.ssb-vm.empty { opacity: .55; }
.cwp-macro.ssb-vm.play { background: #c8170d; border-color: #ff5a4a; color: #fff; }
.ssb-body .cwp-clogw { max-height: 52vh; }
.ssb-vk .cwp-macros { grid-template-columns: repeat(8, minmax(0, 1fr)); }
@media (max-width: 900px) { .ssb-vk .cwp-macros { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
/* TRX SSB : TX call devant le titre, fiche du carnet sans contest */
.ssb-txc { white-space: nowrap; }
.ssb-qso { display: flex; flex-direction: column; gap: 6px; }
.ssb-qso[hidden] { display: none; }
.ssb-qh { margin: 0; font-size: 12px; letter-spacing: 1.4px; text-transform: uppercase; color: #ffd400; font-weight: 800; }
.ssb-qh small { color: var(--v2-text-dim); letter-spacing: 0; text-transform: none; font-weight: 400; margin-left: 8px; }
.ssb-lg { min-height: 0; padding: 0; flex: 0 0 auto; position: relative; }
/* Libellés des cases bien lisibles (TRX SSB et TRX CW) : blanc gras */
.cwp-entry label, .cwp-ctrow label, .cwp-nr { color: #fff; font-weight: 800; }
.cwp-entry label { font-size: 12px; letter-spacing: .3px; }
.ssb-body .ssb-lg .lg-row label, .ssb-body .ssb-lg .lg-refs-t { color: #fff; font-weight: 800; font-size: 10.5px; }
.ssb-body .ssb-lg .lg-row label.lg-ref { color: #ffd400; }
.lg-table td.lg-ctst { color: #ffd400; font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* TRX SSB : la page occupe toute la hauteur ; score, évolution, indicatifs probables ; log du contest jusqu'en bas */
.ssb-main { display: flex; flex-direction: column; }
.ssb-body.cwp-inctst .ssb-main > .cwp-ctst { flex: 1 1 auto; min-height: 0; }
.ssb-body .cwp-cgrid { flex: 1 1 auto; min-height: 0; }
.ssb-body .cwp-cright { min-height: 0; }
.ssb-body .cwp-clogw { max-height: none; min-height: 260px; flex: 1 1 0; }
.ssb-panels { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 8px; flex: 1 1 auto; min-height: 0; }
.ssb-pan { border: 1px solid var(--v2-border-dark); border-radius: 6px; background: #0b121c; padding: 6px 8px; min-width: 0; min-height: 0; display: flex; flex-direction: column; gap: 4px; overflow: auto; scrollbar-width: thin; }
.ssb-pan h3 { margin: 2px 0 0; font-size: 11px; letter-spacing: 1.2px; text-transform: uppercase; color: #ffd400; font-weight: 800; }
.ssb-pan h3 small { color: var(--v2-text-dim); letter-spacing: 0; text-transform: none; font-weight: 400; margin-left: 6px; }
.ssb-tab td:not(:first-child), .ssb-tab th:not(:first-child) { text-align: right; }
.ssb-tab tfoot td { color: #fff; font-weight: 800; border-top: 1px solid var(--v2-border); }
.ssb-score .cwp-clog tr:first-child td { color: var(--v2-text-bright); }
.ssb-total { margin: 2px 0; font-size: 13px; color: #fff; font-weight: 700; }
.ssb-total b { color: #3fd07f; font-size: 18px; font-family: 'Roboto Mono', ui-monospace, monospace; margin-left: 6px; }
.ssb-prl { display: flex; flex-wrap: wrap; gap: 4px; align-content: flex-start; }
.ssb-pc { font-family: 'Roboto Mono', ui-monospace, monospace; font-size: 13px; font-weight: 800; padding: 3px 7px; border-radius: 4px; border: 1px solid #2c4a6e; background: #121d2c; color: #fff; cursor: pointer; }
.ssb-pc:hover { border-color: #58a6ff; }
.ssb-pc small { font-weight: 400; color: var(--v2-text-dim); margin-left: 5px; font-size: 10.5px; }
.ssb-pc.new { border-color: #3fd07f; color: #3fd07f; }
.ssb-pc.dup { border-color: #6b2b2b; color: #ff7b72; text-decoration: line-through; opacity: .8; }
.ssb-pc.mult { box-shadow: inset 0 -2px 0 #ffd400; }
/* TRX SSB sans contest : fiche puis la liste des QSO en phonie jusqu'en bas */
.ssb-body:not(.cwp-inctst) .ssb-main > .ssb-qso { flex: 1 1 auto; min-height: 0; }
.ssb-qlogw { flex: 1 1 0; min-height: 200px; max-height: none; }
.ssb-qlog td:nth-child(3) { color: #fff; font-weight: 800; }
.ssb-qlog tr:first-child td { color: #ffd400; }
/* Dashboard : pas de titre « Activités » ; la ligne des onglets (Activité, modes, Logbooks…) monte en tête du cadre */
#centerPanel > .panel-h { display: none; }
#msgs.qso-off { display: none !important; }
.lg-row .lg-qrz { align-self: flex-end; color: #ffd400; border-color: #6b5a1a; font-weight: 800; }
/* Dashboard : cadre SSB CONFIGURATION remplacé par le bouton de la page TRX SSB */
.vx.vx-away { display: none !important; }
.vx-goto { width: 100%; margin: 6px 0; background: #1f6feb; border-color: #58a6ff; color: #fff; font-weight: 800; letter-spacing: .4px; }
.vx-goto:hover { background: #388bfd; color: #fff; }
/* TRX SSB : boutons ADIF à côté de CABRILLO / sous la fiche */
.cwp-crow2 .ssb-adi { margin-left: auto; margin-right: 6px; }
.ssb-adi { background: #fff; color: #000; font-weight: 800; border: 1px solid #fff; border-radius: 4px; padding: 3px 10px; cursor: pointer; letter-spacing: .4px; }
.ssb-qbar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.ssb-qbar .cwp-cstats { flex: 1 1 auto; }
.ssb-qbar label { color: #fff; font-weight: 700; font-size: 12px; display: inline-flex; align-items: center; gap: 6px; }
/* Pages TRX SSB / TRX CW : choix du TX CALL dans l'en-tête */
.cwp-txcl { display: inline-flex; align-items: center; gap: 6px; color: #ffd400; font-weight: 800; font-size: 12px; letter-spacing: .8px; }
.cwp-txcl select { background: #07090d; color: #fff; border: 1px solid #6b5a1a; border-radius: 4px; padding: 3px 6px; font-weight: 800; font-size: 13px; color-scheme: dark; }
.cwp-txcl select:disabled { opacity: .7; }
/* TRX SSB : messages vocaux en anglais (espeak-ng sur le serveur) */
.ssb-ttsb { margin-left: 12px; background: #121d2c; color: #fff; border: 1px solid #58a6ff; border-radius: 4px; padding: 2px 8px; font-size: 11px; font-weight: 800; letter-spacing: .3px; text-transform: none; cursor: pointer; }
.ssb-tts { border: 1px solid #2c4a6e; border-radius: 6px; padding: 6px 8px; background: #0a1220; display: flex; flex-direction: column; gap: 5px; }
.ssb-tts[hidden] { display: none; }
.ssb-ttsl { display: flex; flex-direction: column; gap: 3px; }
.ssb-ttsi { display: grid; grid-template-columns: 58px 96px minmax(0, 1fr); gap: 6px; align-items: center; }
.ssb-ttsi label { color: #fff; font-weight: 800; font-size: 12px; display: inline-flex; gap: 4px; align-items: center; }
.ssb-ttsi input.nm, .ssb-ttsi input.tx { background: #07090d; border: 1px solid var(--v2-border); border-radius: 4px; padding: 3px 6px; color: #fff; font-size: 12.5px; }
.ssb-ttsi input.nm { font-weight: 800; text-transform: uppercase; font-family: 'Roboto Mono', ui-monospace, monospace; }
.ssb-ttsr { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; }
.ssb-ttsr label { color: #fff; font-weight: 700; font-size: 12px; display: inline-flex; gap: 6px; align-items: center; }
.ssb-ttsr select { background: #07090d; color: #fff; border: 1px solid var(--v2-border); border-radius: 4px; padding: 2px 6px; color-scheme: dark; }
.ssb-ttsr button { background: #121d2c; color: #fff; border: 1px solid var(--v2-border); border-radius: 4px; padding: 3px 10px; cursor: pointer; font-weight: 700; }
.ssb-ttsr .ssb-ttsgo { margin-left: auto; background: #3fd07f; color: #04120a; border-color: #3fd07f; font-weight: 800; }
.cwp-macro.ssb-vm.tts small { color: #8ab8ff; }
.ssb-ttsv { padding-bottom: 4px; border-bottom: 1px solid #1d2a3a; }
.ssb-ttsr label, .ssb-ttsr output { white-space: nowrap; }
.ssb-pron summary { color: #fff; font-weight: 800; font-size: 12px; cursor: pointer; }
.ssb-pron textarea { width: 100%; box-sizing: border-box; background: #07090d; color: #fff; border: 1px solid var(--v2-border); border-radius: 4px; padding: 4px 6px; font-family: 'Roboto Mono', ui-monospace, monospace; font-size: 12px; }
/* Pages TRX CW / TRX SSB : les deux VFO côte à côte (SPLIT) */
.vfb { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); gap: 10px; align-items: stretch; }
.vfb[hidden] { display: none; }
.vfb-col { border: 2px solid var(--v2-border); border-radius: 8px; padding: 6px 10px; background: #0a111b; display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.vfb-col.rx { border-color: #3fd07f; }
.vfb-col.tx { box-shadow: inset 0 0 0 1px #ff7b72; }
.vfb-col.air { background: #2a0d0d; border-color: #ff4d3f; }
.vfb-h { display: flex; justify-content: space-between; align-items: center; color: #fff; font-size: 13px; letter-spacing: 1px; }
.vfb-role { font-weight: 800; font-size: 12px; padding: 1px 8px; border-radius: 10px; background: #1b2636; color: #9fb3c8; }
.vfb-col.rx .vfb-role { background: #0f3b22; color: #3fd07f; }
.vfb-col.tx .vfb-role { background: #4a1414; color: #ff9b93; }
.vfb-col.rx.tx .vfb-role { background: #26323f; color: #fff; }
.vfb-f { font-family: 'Roboto Mono', ui-monospace, monospace; font-size: 30px; font-weight: 800; color: #fff; letter-spacing: 1px; line-height: 1.1; }
.vfb-col:not(.rx):not(.tx) .vfb-f { color: #7d8b9c; }
.vfb-m { color: #ffd400; font-weight: 800; font-size: 12px; min-height: 15px; }
.vfb-in { color: #fff; font-weight: 700; font-size: 12px; display: inline-flex; gap: 6px; align-items: center; }
.vfb-in input { width: 110px; background: #07090d; color: #fff; border: 1px solid var(--v2-border); border-radius: 4px; padding: 3px 6px; font-family: 'Roboto Mono', ui-monospace, monospace; }
.vfb-mid { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; min-width: 210px; }
.vfb-split { font-weight: 800; font-size: 15px; letter-spacing: 1px; padding: 6px 18px; border-radius: 6px; border: 2px solid #6b5a1a; background: #121d2c; color: #ffd400; cursor: pointer; }
.vfb-split.on { background: #ffd400; color: #000; border-color: #ffd400; }
.vfb-row { display: flex; gap: 4px; flex-wrap: wrap; justify-content: center; }
.vfb-row button { background: #121d2c; color: #fff; border: 1px solid var(--v2-border); border-radius: 4px; padding: 3px 8px; font-weight: 700; cursor: pointer; }
.vfb-row button:hover:not(:disabled), .vfb-split:hover:not(:disabled) { border-color: #58a6ff; }
.vfb button:disabled, .vfb input:disabled { opacity: .5; cursor: default; }
.vfb-off::before { content: 'B = A'; color: #9fb3c8; font-size: 11px; align-self: center; margin-right: 2px; }
.vfb-note { margin: 0; font-size: 11.5px; color: #c9d4e0; text-align: center; }
@media (max-width: 900px) { .vfb { grid-template-columns: 1fr; } }
/* TRX CW : colonne (le cadre des VFO peut être caché) ; la réception CW prend le reste de la hauteur */
body.cwp-body:not(.ssb-body) .cwp-main { display: flex; flex-direction: column; }
body.cwp-body:not(.ssb-body) .cwp-main > .cwp-rx { flex: 1 1 220px; min-height: 220px; }
.vfb.single { grid-template-columns: minmax(0, 1fr) auto; }
.vfb-col[hidden] { display: none; }
.vfb.single .vfb-mid { order: 1; }
/* Pages TRX CW / TRX SSB : carte de bande à gauche */
.cwp-wrap { flex: 1 1 auto; display: flex; min-height: 0; gap: 0; }
.cwp-wrap > .cwp-main { flex: 1 1 auto; min-width: 0; }
.xbm-box { width: 200px; flex: 0 0 200px; margin: 8px 0 8px 12px; padding: 6px 6px 4px; gap: 4px; }
.xbm-h { display: flex; align-items: baseline; gap: 8px; }
.xbm-band { font-size: 20px; font-weight: 800; color: #ffd400; }
.xbm-t { color: #fff; font-weight: 800; font-size: 11px; letter-spacing: 1px; text-transform: uppercase; }
.xbm-t small { color: #3fd07f; margin-left: 4px; }
.xbm-r { display: flex; align-items: center; gap: 4px; font-size: 11px; color: #c9d4e0; }
.xbm-r span { flex: 1; text-align: center; font-family: 'Roboto Mono', ui-monospace, monospace; }
.xbm-r button { background: #121d2c; color: #fff; border: 1px solid var(--v2-border); border-radius: 4px; width: 24px; padding: 1px 0; cursor: pointer; font-weight: 800; }
.xbm-b { position: relative; flex: 1 1 auto; min-height: 260px; border: 1px solid var(--v2-border-dark); border-radius: 4px; background: #070b11; overflow: hidden; }
.xbm-sc { position: absolute; left: 0; top: 0; bottom: 0; width: 46px; border-right: 1px solid #1d2a3a; }
.xbm-sc span { position: absolute; left: 2px; transform: translateY(-50%); font: 10px 'Roboto Mono', ui-monospace, monospace; color: #7d8b9c; }
.xbm-sc span::after { content: ''; position: absolute; left: 40px; top: 50%; width: 6px; border-top: 1px solid #3a4658; }
.xbm-l { position: absolute; left: 46px; right: 0; top: 0; bottom: 0; }
.xbm-s { position: absolute; left: 10px; right: 2px; height: 16px; display: flex; align-items: center; gap: 4px; padding: 0 4px; background: transparent; border: 0; color: #fff; cursor: pointer; text-align: left; font: 12px 'Roboto Mono', ui-monospace, monospace; }
.xbm-s em { position: absolute; left: -10px; width: 9px; height: 0; border-top: 1px solid #3fd07f; }
.xbm-s b { font-weight: 800; color: #3fd07f; }
.xbm-s small { color: #7d8b9c; font-size: 10px; margin-left: auto; }
.xbm-s:hover { background: #142236; }
.xbm-s.dup b { color: #ff7b72; text-decoration: line-through; }
.xbm-s.dup em { border-color: #ff7b72; }
.xbm-s.old { opacity: .6; }
.xbm-trx { position: absolute; left: 0; right: 0; height: 0; border-top: 2px solid #ff4d3f; pointer-events: none; }
.xbm-trx::before { content: 'TRX'; position: absolute; right: 2px; top: -13px; font: 800 9px/1 sans-serif; color: #ff4d3f; }
.xbm-trx[hidden] { display: none; }
.xbm-f { font-size: 10.5px; color: #7d8b9c; text-align: center; }
@media (max-width: 900px) { .xbm-box { display: none; } }
/* Page TRX DIGI : carte de bande à gauche (une seule carte) */
body.digi-popup #centerPanel.bm-on:not(.bm-dual) > :not(.panel-h):not(.bm) { margin-right: 0; margin-left: var(--bm-w); }
body.digi-popup #centerPanel:not(.bm-dual) > .bm:not(.bm-b) { right: auto; left: 0; border-left: 0; border-right: 1px solid var(--v2-border-dark); border-radius: var(--v2-panel-radius) 0 0 var(--v2-panel-radius); }
body.digi-popup #centerPanel:not(.bm-dual) > .bm .bm-grip { left: auto; right: 0; }
/* Case « Spot cluster » (spotlog.js) : QSO enregistré → spot au DX cluster sous l'indicatif de l'opérateur */
.spotlog { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; font-weight: 700; color: var(--v2-text-secondary, #b8c2d0); cursor: pointer; white-space: nowrap; user-select: none; }
.spotlog input { margin: 0; accent-color: #2f9bff; cursor: pointer; }
.spotlog.on { color: #6cc0ff; }
.cwp-entry label.spotlog { flex-direction: row; align-self: flex-end; padding: 7px 4px; font-size: 12px; text-transform: none; letter-spacing: 0; }
.md-act .spotlog { margin-right: auto; }
.cwp-prob { max-height: 240px; min-height: 84px; }
.cwp-entry label.spotlog.on { color: #6cc0ff; }
label.spotlog { display: inline-flex !important; flex-direction: row !important; text-transform: none !important; letter-spacing: 0 !important; }
.lg-act label.spotlog { font-size: 12px; align-self: center; }
.dg-chk.spotlog { font-weight: inherit; font-size: inherit; color: inherit; }
.dg-chk.spotlog.on { color: #6cc0ff; }
.lg-row label.spotlog input { width: auto; padding: 0; }
/* Fenêtre TRX DIGI : toujours défilable (le grand écran du dashboard bloque le défilement de la page) */
html:has(body.digi-popup), body.digi-popup, html:has(body.cwp-body), body.cwp-body { overflow-y: auto !important; }
.dg-spot { font-size: 11px; font-weight: 600; }
.rt-tx-act2 { flex-wrap: wrap; }
