:root {
  --bg:#f5f4f0;--surface:#fff;--surface2:#f0ede6;--border:#d4d0c8;--border2:#b8b4aa;
  --text:#1a1916;--text2:#5a5750;--text3:#8a8680;
  --accent:#1a5c9e;--accent-light:#e8f0f9;--accent-dark:#0d3d6b;
  --green:#2d7a3a;--green-light:#e8f5ea;--amber:#8a5c10;--amber-light:#fdf3e0;
  --red:#8a2020;--red-light:#fde8e8;
  --teal:#0f7070;--teal-light:#e0f5f5;
  --mono:'Courier New',monospace;--sans:-apple-system,'Segoe UI',system-ui,sans-serif;
}
html.dark {
  --bg:#141414;--surface:#1e1e1e;--surface2:#262626;--border:#333;--border2:#444;
  --text:#e8e6e1;--text2:#a0998f;--text3:#6a6460;
  --accent:#4a8fd4;--accent-light:#1a2d42;--accent-dark:#7ab3e8;
  --green:#4caf6a;--green-light:#152419;--amber:#d4a43a;--amber-light:#2a1f08;
  --red:#e05555;--red-light:#2a1010;
  --teal:#2abcbc;--teal-light:#0a2525;
}
html.dark tbody tr:hover{background:#1a2d42;}
html.dark .export-section{background:#162233;border-color:#2a4a6a;}
html.dark .export-section h3{color:#7ab3e8;}
html.dark .teal-export{background:#0a2525!important;border-color:var(--teal)!important;}
html.dark .teal-export h3{color:var(--teal)!important;}
html.dark .settings-panel{background:#1a1a1a;}
html.dark .serial-status.connected{background:#0a2a1a;border-color:#2d7a3a;}
html.dark .serial-status.connecting{background:#2a1f08;border-color:#8a5c10;}
*{box-sizing:border-box;margin:0;padding:0;}
body{font-family:var(--sans);background:var(--bg);color:var(--text);min-height:100vh;font-size:14px;line-height:1.5;}

/* ── INSTALL BANNER ── */
.install-banner{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  background:var(--accent);color:white;padding:10px 1.5rem;font-size:13px;
  flex-wrap:wrap;
}
.install-banner-text{display:flex;flex-direction:column;gap:2px;}
.install-banner-text strong{font-size:13px;}
.install-banner-text span{font-size:11px;opacity:0.85;}
.install-banner-actions{display:flex;gap:8px;}
.install-banner button{font-size:12px;padding:5px 12px;border-radius:5px;border:1px solid rgba(255,255,255,0.4);background:rgba(255,255,255,0.15);color:white;cursor:pointer;}
.install-banner button:first-child{background:white;color:var(--accent);font-weight:600;}
.install-banner button:first-child:hover{background:#e8f0f9;}

/* ── HEADER ── */
header{background:var(--surface);border-bottom:1px solid var(--border);padding:0 1.5rem;display:flex;align-items:center;justify-content:space-between;height:56px;position:sticky;top:0;z-index:100;gap:12px;flex-wrap:wrap;}
.logo{display:flex;align-items:center;gap:10px;flex-shrink:0;}
.logo-icon{width:32px;height:32px;background:var(--accent);border-radius:6px;display:flex;align-items:center;justify-content:center;}
.logo-icon svg{width:18px;height:18px;fill:white;}
.logo-text{font-size:15px;font-weight:600;color:var(--text);letter-spacing:-0.02em;}
.logo-sub{font-size:11px;color:var(--text3);letter-spacing:0.05em;text-transform:uppercase;}
.header-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;}

/* ── SERIAL STATUS ── */
.serial-status{
  display:flex;align-items:center;gap:6px;padding:5px 10px;border-radius:6px;
  border:1px solid var(--border);font-size:12px;color:var(--text2);
  background:var(--surface2);white-space:nowrap;
}
.serial-status.connected{border-color:#2d7a3a;background:#e8f5ea;color:#1a5a28;}
.serial-status.connecting{border-color:#8a5c10;background:#fdf3e0;color:#6a4010;}
.serial-dot{width:8px;height:8px;border-radius:50%;background:#bbb;flex-shrink:0;}
.serial-status.connected .serial-dot{background:#2d7a3a;}
.serial-status.connecting .serial-dot{background:#d4a43a;animation:pulse 1s infinite;}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:0.3}}

/* ── BUTTONS ── */
button{font-family:var(--sans);font-size:13px;cursor:pointer;border-radius:6px;border:1px solid var(--border);background:var(--surface);color:var(--text);padding:6px 12px;transition:background 0.1s,border-color 0.1s;white-space:nowrap;}
button:hover{background:var(--surface2);border-color:var(--border2);}
button:disabled{opacity:0.4;cursor:not-allowed;}
button:disabled:hover{background:var(--surface);border-color:var(--border);}
button.primary{background:var(--accent);border-color:var(--accent);color:white;font-weight:500;}
button.primary:hover:not(:disabled){background:var(--accent-dark);border-color:var(--accent-dark);}
button.btn-teal{background:var(--teal);border-color:var(--teal);color:white;font-weight:500;}
button.btn-teal:hover:not(:disabled){opacity:0.85;}
button.btn-green{background:var(--green);border-color:var(--green);color:white;font-weight:500;}
button.btn-green:hover:not(:disabled){opacity:0.85;}
button.danger{color:var(--red);border-color:#f0c0c0;}
button.danger:hover:not(:disabled){background:var(--red-light);}
button.secondary{color:var(--accent);border-color:var(--accent);font-weight:500;}
button.secondary:hover:not(:disabled){background:var(--accent-light);}

/* ── DARK TOGGLE ── */
.dark-toggle{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text2);cursor:pointer;padding:5px 10px;border-radius:6px;border:1px solid var(--border);background:var(--surface);user-select:none;}
.dark-toggle:hover{background:var(--surface2);}
.dtt{width:28px;height:16px;border-radius:8px;background:#ccc;position:relative;transition:background 0.15s;flex-shrink:0;}
html.dark .dtt{background:var(--accent);}
.dtth{position:absolute;width:12px;height:12px;border-radius:50%;background:white;top:2px;left:2px;transition:left 0.15s;}
html.dark .dtth{left:14px;}

/* ── RADIO TABS ── */
.radio-tabs{display:flex;border-bottom:1px solid var(--border);background:var(--surface);padding:0 1.5rem;}
.radio-tab{padding:12px 20px;font-size:13px;font-weight:500;color:var(--text2);cursor:pointer;border:none;background:transparent;border-bottom:2px solid transparent;margin-bottom:-1px;transition:color 0.1s,border-color 0.1s;}
.radio-tab:hover{color:var(--text);background:transparent;}
.radio-tab.active{color:var(--accent);border-bottom-color:var(--accent);}
.radio-tab.active-teal{color:var(--teal);border-bottom-color:var(--teal);}
.radio-badge{display:inline-block;padding:1px 6px;border-radius:8px;font-size:10px;font-weight:600;margin-left:6px;vertical-align:middle;}
.rb-b{background:var(--accent-light);color:var(--accent);}
.rb-q{background:var(--teal-light);color:var(--teal);}

/* ── PANEL ── */
.main{max-width:1100px;margin:0 auto;padding:1.5rem;}
.radio-panel{display:none;}
.radio-panel.active{display:block;}

/* ── PANEL SUB-TABS ── */
.panel-tabs{display:flex;gap:4px;margin-bottom:1.25rem;border-bottom:1px solid var(--border);padding-bottom:0;}
.panel-tab{padding:8px 16px;font-size:13px;font-weight:500;color:var(--text2);cursor:pointer;border:none;background:transparent;border-bottom:2px solid transparent;margin-bottom:-1px;transition:color 0.1s;}
.panel-tab:hover{color:var(--text);background:transparent;}
.panel-tab.active{color:var(--accent);border-bottom-color:var(--accent);}
.panel-content{display:none;}
.panel-content.active{display:block;}

/* ── TOOLBAR ── */
.toolbar{display:flex;gap:8px;align-items:center;margin-bottom:1rem;flex-wrap:wrap;}
.toolbar-left{display:flex;gap:8px;align-items:center;flex:1;flex-wrap:wrap;}
.toolbar-right{display:flex;gap:8px;align-items:center;}
.search-box{font-family:var(--sans);font-size:13px;border:1px solid var(--border);border-radius:6px;padding:6px 10px;background:var(--surface);color:var(--text);width:180px;outline:none;}
.search-box:focus{border-color:var(--accent);}
.filter-tabs{display:flex;gap:4px;background:var(--surface2);border:1px solid var(--border);border-radius:6px;padding:3px;}
.filter-tab{padding:4px 10px;border-radius:4px;font-size:12px;font-weight:500;border:none;background:transparent;color:var(--text2);cursor:pointer;}
.filter-tab.active{background:var(--surface);color:var(--text);border:1px solid var(--border);}

/* ── STATS ── */
.stats-bar{display:flex;gap:1rem;margin-bottom:1rem;flex-wrap:wrap;}
.stat{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:10px 16px;display:flex;flex-direction:column;gap:2px;min-width:90px;}
.stat-val{font-size:22px;font-weight:600;color:var(--text);line-height:1;font-variant-numeric:tabular-nums;}
.stat-lbl{font-size:11px;color:var(--text3);text-transform:uppercase;letter-spacing:0.05em;}

/* ── CHANNEL TABLE ── */
.table-wrap{background:var(--surface);border:1px solid var(--border);border-radius:10px;overflow:hidden;}
table{width:100%;border-collapse:collapse;font-size:13px;}
thead th{background:var(--surface2);font-weight:500;color:var(--text2);font-size:11px;text-transform:uppercase;letter-spacing:0.05em;padding:8px 10px;text-align:left;border-bottom:1px solid var(--border);user-select:none;cursor:pointer;white-space:nowrap;}
thead th:hover{color:var(--text);}
tbody tr{border-bottom:1px solid var(--border);transition:background 0.07s;}
tbody tr:last-child{border-bottom:none;}
tbody tr:hover{background:var(--accent-light);}
td{padding:7px 10px;vertical-align:middle;}
td.ch-num{font-family:var(--mono);font-size:12px;font-weight:600;color:var(--text2);width:40px;}
td.freq{font-family:var(--mono);font-size:13px;color:var(--accent-dark);font-weight:500;}
.quansheng-table td.freq{color:var(--teal);}
.ch-name-input{font-family:var(--sans);font-size:13px;border:none;background:transparent;color:var(--text);width:90px;outline:none;padding:2px 4px;border-radius:4px;}
.ch-name-input:focus{background:var(--surface2);border:1px solid var(--border2);}
select.cell-select{font-family:var(--sans);font-size:12px;border:1px solid transparent;background:transparent;color:var(--text);outline:none;padding:2px 4px;border-radius:4px;cursor:pointer;}
select.cell-select:hover,select.cell-select:focus{border-color:var(--border2);background:var(--surface2);}
.badge{display:inline-block;padding:2px 7px;border-radius:10px;font-size:11px;font-weight:500;white-space:nowrap;}
.badge-simplex{background:var(--accent-light);color:var(--accent);}
.badge-interstitial{background:var(--amber-light);color:var(--amber);}
.badge-repeater{background:var(--green-light);color:var(--green);}
.badge-air{background:var(--teal-light);color:var(--teal);}
.badge-noaa{background:var(--green-light);color:var(--green);}
.enabled-toggle{width:32px;height:18px;border-radius:9px;border:none;cursor:pointer;background:#ccc;position:relative;transition:background 0.15s;flex-shrink:0;padding:0;}
.enabled-toggle.on{background:var(--accent);}
.enabled-toggle::after{content:'';position:absolute;width:14px;height:14px;border-radius:50%;background:white;top:2px;left:2px;transition:left 0.15s;}
.enabled-toggle.on::after{left:16px;}
.row-actions{display:flex;gap:4px;align-items:center;}
.icon-btn{width:26px;height:26px;border-radius:5px;border:1px solid transparent;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text3);font-size:14px;padding:0;}
.icon-btn:hover{background:var(--surface2);border-color:var(--border);color:var(--text);}
.empty-state{text-align:center;padding:3rem 1rem;color:var(--text3);}

/* ── EXPORT SECTION ── */
.export-section{background:#f0f7ff;border:1px solid #b8d4f0;border-radius:10px;padding:1.25rem;margin-top:1rem;}
.export-section h3{font-size:13px;font-weight:600;margin-bottom:0.5rem;color:var(--accent-dark);}
.export-section p{font-size:12px;color:var(--text2);margin-bottom:0.75rem;line-height:1.5;}
.export-buttons{display:flex;gap:8px;flex-wrap:wrap;}
.teal-export{background:var(--teal-light)!important;border-color:var(--teal)!important;}
.teal-export h3{color:var(--teal)!important;}

/* ── INSTRUCTIONS ── */
.instructions{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:1.25rem;margin-top:1rem;}
.instructions h3{font-size:13px;font-weight:600;margin-bottom:0.75rem;}
.steps{list-style:none;counter-reset:step;}
.steps li{counter-increment:step;padding:8px 0 8px 36px;position:relative;font-size:13px;color:var(--text2);border-bottom:1px solid var(--border);line-height:1.5;}
.steps li:last-child{border-bottom:none;}
.steps li::before{content:counter(step);position:absolute;left:0;top:9px;width:22px;height:22px;background:var(--accent);color:white;border-radius:50%;font-size:11px;font-weight:600;display:flex;align-items:center;justify-content:center;}
.teal-steps li::before{background:var(--teal);}
code{font-family:var(--mono);font-size:12px;background:var(--surface2);border:1px solid var(--border);border-radius:4px;padding:1px 5px;color:var(--accent-dark);}
.info-box{background:var(--surface2);border:1px solid var(--border);border-radius:8px;padding:1rem;margin-bottom:1rem;font-size:13px;color:var(--text2);line-height:1.6;}
.info-box strong{color:var(--text);}
.info-box a{color:var(--teal);text-decoration:none;}
.info-box a:hover{text-decoration:underline;}

/* ── SETTINGS PANEL ── */
.settings-panel{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:1.25rem;}
.settings-panel h3{font-size:13px;font-weight:600;color:var(--text2);text-transform:uppercase;letter-spacing:0.05em;margin-bottom:1rem;padding-bottom:0.5rem;border-bottom:1px solid var(--border);}
.settings-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:1px;background:var(--border);}
.setting-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 14px;background:var(--surface);}
.setting-row:hover{background:var(--surface2);}
.setting-label{font-size:13px;color:var(--text);font-weight:500;}
.setting-desc{font-size:11px;color:var(--text3);margin-top:1px;}
select.setting-select{font-family:var(--sans);font-size:13px;border:1px solid var(--border);border-radius:5px;padding:4px 8px;background:var(--surface);color:var(--text);outline:none;min-width:110px;}
select.setting-select:focus{border-color:var(--accent);}
.settings-note{font-size:12px;color:var(--text3);margin-top:1rem;padding:10px;background:var(--surface2);border-radius:6px;border:1px solid var(--border);}

/* ── PROGRESS MODAL ── */
.progress-modal h3{font-size:15px;font-weight:600;margin-bottom:1rem;}
.progress-track{height:8px;background:var(--surface2);border-radius:4px;overflow:hidden;margin-bottom:0.75rem;}
.progress-bar-fill{height:100%;background:var(--accent);border-radius:4px;transition:width 0.2s ease;width:0%;}
.progress-status{font-size:13px;color:var(--text2);margin-bottom:1rem;min-height:1.5em;}
.progress-actions{display:flex;justify-content:flex-end;}
.progress-modal.teal .progress-bar-fill{background:var(--teal);}

/* ── MODALS ── */
.modal-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.35);z-index:200;align-items:center;justify-content:center;}
.modal-overlay.open{display:flex;}
.modal{background:var(--surface);border-radius:12px;border:1px solid var(--border);padding:1.5rem;width:min(500px,calc(100vw - 2rem));max-height:calc(100vh - 4rem);overflow-y:auto;}
.modal h3{font-size:16px;font-weight:600;margin-bottom:1rem;}
.form-row{display:flex;flex-direction:column;gap:4px;margin-bottom:0.75rem;}
.form-label{font-size:12px;font-weight:500;color:var(--text2);}
input[type=text],input[type=number],select.form-select{font-family:var(--sans);font-size:13px;border:1px solid var(--border);border-radius:6px;padding:7px 10px;background:var(--surface);color:var(--text);outline:none;width:100%;}
input[type=text]:focus,input[type=number]:focus,select.form-select:focus{border-color:var(--accent);}
.modal-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:1rem;}
.form-row-2col{display:grid;grid-template-columns:1fr 1fr;gap:8px;}

/* ── TOAST ── */
.toast{position:fixed;bottom:1.5rem;right:1.5rem;background:var(--text);color:var(--bg);padding:10px 16px;border-radius:8px;font-size:13px;z-index:300;opacity:0;transform:translateY(8px);transition:opacity 0.2s,transform 0.2s;pointer-events:none;}
.toast.show{opacity:1;transform:translateY(0);}
.toast.error{background:var(--red);}
.toast.success{background:var(--green);}

/* ── SERIAL CONNECT INFO BOX ── */
.connect-info{background:var(--surface2);border:1px solid var(--border);border-radius:8px;padding:12px 16px;margin-bottom:1rem;font-size:13px;display:flex;align-items:center;gap:10px;color:var(--text2);}
.connect-info.active{background:var(--green-light);border-color:#b0d8b8;color:#1a5a28;}
.connect-info svg{flex-shrink:0;width:18px;height:18px;}

/* ── RESPONSIVE ── */
@media(max-width:700px){
  .main{padding:1rem;}
  .radio-tabs{padding:0 1rem;}
  .radio-tab{padding:10px 12px;font-size:12px;}
  header{height:auto;padding:8px 1rem;}
  .header-actions{gap:4px;}
  .serial-status span:last-child{display:none;}
}
