/*****************************************************************
 * UI THEME + BASE LAYOUT
 *****************************************************************/
:root{
  --primary:#1976d2; --success:#4caf50; --error:#f44336; --warning:#ff9800;
  --bg:#f5f7fa; --card:#ffffff; --text:#212121; --text-muted:#757575;
  --border:#e0e0e0; --shadow:0 2px 8px rgba(0,0,0,0.10); --radius:10px;
  --focus: rgba(25,118,210,.25);
}

*{box-sizing:border-box;margin:0;padding:0}
body{font-family:'Segoe UI',Roboto,Arial,sans-serif;background:var(--bg);color:var(--text);line-height:1.4;padding:16px}
.container{max-width:1400px;margin:0 auto}

header{
  display:flex;justify-content:space-between;align-items:center;
  margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid var(--border);
  gap:12px;flex-wrap:wrap
}
.logo{display:flex;align-items:center;gap:12px}
.logo h1{font-size:20px;font-weight:650}
.logo .icon{border-radius:10px;box-shadow:var(--shadow);background:#fff}

.status-indicator{
  display:flex;align-items:center;gap:8px;
  padding:8px 12px;background:var(--card);
  border-radius:var(--radius);box-shadow:var(--shadow);
  font-size:13px;white-space:nowrap
}
.status-dot{width:10px;height:10px;border-radius:50%;background:#bdbdbd}
.status-dot.connected{background:var(--success);animation:pulse 2s infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}}

/*****************************************************************
 * TABS (FIXED: ALWAYS IN ONE ROW)
 *****************************************************************/
.tabs-wrap{display:flex;justify-content:center;margin:10px 0 16px}
.tabs{
  display:flex;
  width:100%;
  gap:12px;
  background:var(--card);
  padding:8px;
  border-radius:var(--radius);
  box-shadow:var(--shadow);
  justify-content:space-between;
  flex-wrap:nowrap;
}
.tabs .tab{
  width:auto !important;
  flex:1 1 0;
  text-align:center;

  padding:10px 14px;
  background:transparent;
  border:none;
  border-radius:12px;
  cursor:pointer;
  font-weight:800;
  transition:all .2s;
  color:var(--text-muted);
  font-size:13px;
  white-space:nowrap;
}
.tabs .tab:hover{background:rgba(0,0,0,.04)}
.tabs .tab.active{background:var(--primary);color:#fff}
@media (max-width: 700px){
  .tabs{flex-wrap:wrap;}
  .tabs .tab{flex:1 1 160px;}
}

/*****************************************************************
 * PANELS / CARDS / FORMS
 *****************************************************************/
.panel{display:none;background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px;margin-bottom:16px}
.panel.active{display:block}

.panel-header{
  display:flex;justify-content:space-between;align-items:center;margin-bottom:14px;
  padding-bottom:10px;border-bottom:1px solid var(--border);
  gap:10px;flex-wrap:wrap
}
.panel-title{font-size:18px;font-weight:700}

.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px;margin-bottom:14px}
.grid{display:grid;gap:14px}
.grid-2{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}
.grid-4{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}
.grid-tight{gap:10px}

.form-group{margin-bottom:12px}
label{display:block;margin-bottom:6px;font-weight:600;color:var(--text);font-size:13px}

/* Global form control styles */
input,select,button{
  width:100%;
  padding:9px 11px;
  border:1px solid var(--border);
  border-radius:10px;
  font-family:inherit;
  font-size:14px;
  background:#fff
}
input:focus-visible,select:focus-visible,button:focus-visible{
  outline:none;
  box-shadow:0 0 0 4px var(--focus);
  border-color:rgba(25,118,210,.55)
}

button{
  background:var(--primary);
  color:#fff;
  border:none;
  cursor:pointer;
  font-weight:650;
  transition:transform .05s ease,background .2s;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:6px
}
button:active{transform:translateY(1px)}
button.secondary{background:transparent;color:var(--primary);border:1px solid var(--primary)}
button.success{background:var(--success)}
button.danger{background:var(--error)}
button.warning{background:var(--warning)}
button:disabled{background:#bdbdbd;cursor:not-allowed;opacity:.65}

.btn-group{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.btn-group button{width:auto;padding:8px 12px;border-radius:10px;font-size:13px}

.checkbox-group{display:flex;align-items:center;gap:8px;margin-top:8px;user-select:none}
.checkbox-group input[type="checkbox"]{width:auto}

.empty-state{text-align:center;padding:28px 12px;color:var(--text-muted)}
#error-message{color:var(--error);margin-top:10px;font-size:14px}

.section-title{margin:14px 0 10px;font-size:15px;font-weight:750;color:var(--text)}
.subtle{color:var(--text-muted);font-size:12px}

/*****************************************************************
 * CONNECT PROGRESS BOX
 *****************************************************************/
.progress-box{
  background:#0f172a;color:#e2e8f0;border-radius:12px;padding:12px;border:1px solid rgba(148,163,184,.25);
  font-family:'Courier New',monospace;font-size:12px;max-height:260px;overflow:auto;margin-top:10px;white-space:pre-wrap
}
.progress-line{margin-bottom:4px}
.progress-dim{color:rgba(226,232,240,.72)}
.progress-warn{color:#fbbf24}
.progress-ok{color:#34d399}
.progress-err{color:#fb7185}

/*****************************************************************
 * MODBUS LOG
 *****************************************************************/
.log-container{
  background:#0b1220;color:#e2e8f0;border-radius:var(--radius);padding:14px;
  font-family:'Courier New',monospace;font-size:13px;max-height:420px;overflow-y:auto;margin-top:12px;
  border:1px solid rgba(148,163,184,.2)
}
.log-entry{margin-bottom:4px}
.log-time{color:#6a9955}
.log-modbus{color:#c586c0}
.log-error{color:#fb7185}
.log-warning{color:#fbbf24}
.log-info{color:#9cdcfe}
.log-success{color:#34d399}

/*****************************************************************
 * RELAY/INPUT CARDS
 *****************************************************************/
.relay-card,.input-card{background:var(--card);border-radius:14px;box-shadow:var(--shadow);padding:14px;border:1px solid var(--border);transition:transform .15s, box-shadow .15s}
.relay-card:hover{transform:translateY(-1px);box-shadow:0 6px 18px rgba(0,0,0,.10)}
.relay-top,.input-top{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
.relay-number,.input-number{font-size:15px;font-weight:800}

.pill{display:inline-flex;align-items:center;gap:8px;padding:6px 10px;border-radius:999px;font-weight:800;font-size:12px;border:1px solid var(--border);background:rgba(0,0,0,.02);white-space:nowrap;transition:background .15s,border-color .15s,color .15s}
.dot{width:10px;height:10px;border-radius:50%;background:#bdbdbd;transition:background .15s, box-shadow .15s}
.pill.on{color:var(--success);border-color:rgba(76,175,80,.35);background:rgba(76,175,80,.08)}
.pill.on .dot{background:var(--success);box-shadow:0 0 8px rgba(76,175,80,.6)}
.pill.off{color:var(--text-muted)}
.pill.off .dot{background:#9e9e9e}
.pill.active{color:var(--primary);border-color:rgba(25,118,210,.35);background:rgba(25,118,210,.08)}
.pill.active .dot{background:var(--primary);box-shadow:0 0 8px rgba(25,118,210,.6)}

.relay-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:8px}
.btn-sm{padding:9px 10px;border-radius:12px;font-size:13px;line-height:1}

.timer-row{grid-column:1/-1;display:grid;grid-template-columns:1fr 110px;gap:8px;align-items:center;margin-top:2px}
.timer-input{width:100%;padding:9px 10px;border-radius:12px;font-weight:700;text-align:center}

.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px}
.stat-card{background:var(--card);border-radius:14px;box-shadow:var(--shadow);padding:14px;border:1px solid var(--border)}
.stat-label{font-size:12px;color:var(--text-muted);font-weight:700;margin-bottom:6px}
.stat-value input{font-size:16px;font-weight:800;padding:10px 12px;border-radius:12px;background:#fafafa}

.input-meta{display:flex;justify-content:space-between;gap:10px;margin-top:10px;padding-top:10px;border-top:1px dashed var(--border)}
.input-meta .k{color:var(--text-muted);font-size:12px;font-weight:700}
.input-meta .v{font-size:14px;font-weight:900;letter-spacing:.2px}

/*****************************************************************
 * SETTINGS VALIDATION
 *****************************************************************/
.field-invalid{border-color:var(--error)!important;box-shadow:0 0 0 3px rgba(244,67,54,.12)!important}
.btn-soft-disabled{opacity:.55;filter:grayscale(.25);cursor:not-allowed!important}
.btn-soft-disabled:hover{transform:none!important}

/*****************************************************************
 * ADC TABLE
 *****************************************************************/
.table-wrap{width:100%;overflow:auto;border-radius:12px;border:1px solid var(--border)}
.table{width:100%;border-collapse:collapse;font-size:13px;min-width:860px}
.table th,.table td{padding:10px 10px;border-bottom:1px solid var(--border);vertical-align:middle;text-align:left;background:#fff}
.table th{position:sticky;top:0;background:#f3f5f9;font-weight:900;font-size:12px;color:var(--text-muted);z-index:1}
.table tr:nth-child(odd) td{background:#fcfcfd}
.table tr:hover td{background:#f6faff}
.table tr:last-child td{border-bottom:none}
.cell-compact input{padding:8px 10px;border-radius:10px;font-size:13px}
.mono{font-family:'Courier New',monospace}

/*****************************************************************
 * BOOTLOADER LOG
 *****************************************************************/
.fw-status{
  background:#0f172a;color:#e2e8f0;border-radius:12px;padding:12px;border:1px solid rgba(148,163,184,.25);
  font-family:'Courier New',monospace;font-size:12px;max-height:420px;overflow:auto;white-space:pre-wrap
}

input[readonly]{background:#fafafa;color:#111827}

/*****************************************************************
 * FW UPDATE: layout like screenshot (PORT/FILE rows)
 *****************************************************************/
.fw-form{display:flex;flex-direction:column;gap:12px}
.fw-row{display:flex;gap:12px;align-items:center}
.fw-row .fw-btn{
  width:110px !important;
  min-width:110px;
  padding:10px 12px;
  border-radius:12px;
  font-weight:900;
  letter-spacing:.2px;
  text-transform:uppercase;
}
.fw-row input{flex:1 1 auto}
.fw-file-hint{margin-top:-6px}
@media (max-width: 700px){
  .fw-row{flex-direction:column;align-items:stretch}
  .fw-row .fw-btn{width:100% !important;min-width:0}
}

/* Connection status: degraded */
.status-dot.degraded{background:var(--warning);animation:none}
.status-indicator.degraded{border:1px solid rgba(255,152,0,.45)}

/*****************************************************************
 * ADC: "Требует дополнительные знания" (modern switch + smooth collapse)
 *****************************************************************/
.adc-header-right{
  display:flex;
  align-items:center;
  gap:10px;
  flex-wrap:wrap;
}

.adc-switch{
  display:inline-flex;
  align-items:center;
  gap:10px;
  user-select:none;
  cursor:pointer;
  white-space:nowrap;
  padding:6px 10px;
  border-radius:999px;
  border:1px solid var(--border);
  background:rgba(0,0,0,.02);
}

.adc-switch-input{
  position:absolute;
  opacity:0;
  width:1px;
  height:1px;
  pointer-events:none;
}

.adc-switch-ui{
  width:40px;
  height:22px;
  border-radius:999px;
  background:#e5e7eb;
  position:relative;
  transition:background .2s ease;
  flex:0 0 auto;
}
.adc-switch-ui::after{
  content:"";
  width:18px;
  height:18px;
  border-radius:50%;
  background:#fff;
  position:absolute;
  top:2px;
  left:2px;
  box-shadow:0 2px 8px rgba(0,0,0,.15);
  transition:transform .2s ease;
}

.adc-switch-text{
  font-size:12px;
  font-weight:800;
  color:var(--text-muted);
}

.adc-switch:has(.adc-switch-input:focus-visible){
  box-shadow:0 0 0 4px var(--focus);
  border-color:rgba(25,118,210,.55);
}

.adc-switch-input:checked + .adc-switch-ui{
  background:rgba(25,118,210,.85);
}
.adc-switch-input:checked + .adc-switch-ui::after{
  transform:translateX(18px);
}
.adc-switch-input:checked ~ .adc-switch-text{
  color:var(--text);
}

/* Tooltip */
.tip{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:16px;
  height:16px;
  border-radius:50%;
  border:1px solid rgba(0,0,0,.12);
  font-size:11px;
  font-weight:900;
  color:var(--text-muted);
  background:#fff;
  cursor:help;
  position:relative;
  flex:0 0 auto;
}
.tip[data-tooltip]:hover::after,
.tip[data-tooltip]:focus-visible::after{
  content: attr(data-tooltip);
  position:absolute;
  left:50%;
  transform:translateX(-50%);
  bottom: calc(100% + 8px);
  background:#111827;
  color:#fff;
  padding:8px 10px;
  border-radius:10px;
  font-size:12px;
  font-weight:650;
  white-space:normal;
  width:min(360px, 70vw);
  z-index:20;
}
.tip[data-tooltip]:hover::before,
.tip[data-tooltip]:focus-visible::before{
  content:"";
  position:absolute;
  left:50%;
  transform:translateX(-50%);
  bottom: calc(100% + 2px);
  border:6px solid transparent;
  border-top-color:#111827;
  z-index:20;
}

/* Smooth collapse */
.adc-body{
  overflow:hidden;
  max-height:2000px;
  opacity:1;
  transition:max-height .35s ease, opacity .25s ease;
}
.adc-collapsed .adc-body{
  max-height:0;
  opacity:0;
  pointer-events:none;
}

#adc-actions{
  transition:opacity .2s ease, transform .2s ease;
}
.adc-collapsed #adc-actions{
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transform:translateY(-2px);
  transition:opacity .2s ease, transform .2s ease, visibility .2s;
}

@media (prefers-reduced-motion: reduce){
  .adc-body, #adc-actions, .adc-switch-ui, .adc-switch-ui::after{
    transition:none !important;
  }
}
