*{box-sizing:border-box}:root{--page:#f7f9fb;--surface:#ffffff;--surface-soft:#f3f7f9;--surface-muted:#e8f0f4;--text:#13202a;--text-muted:#60717d;--border:#d9e4e9;--border-strong:#b7c7d0;--primary:#006d7c;--primary-dark:#064c57;--accent:#d89a24;--success:#16875a;--danger:#c2413f;--shadow:0 16px 42px rgba(15,23,42,0.10);--header-bg:#ffffff;--header-shadow:0 1px 18px rgba(15,23,42,0.06);--field-bg:#ffffff;--log-bg:#111827;--log-text:#dbeafe;--modal-backdrop:rgba(15,23,42,0.54)}body[data-theme="dark"]{--page:#0f172a;--surface:#1e293b;--surface-soft:#111827;--surface-muted:#243244;--text:#e2e8f0;--text-muted:#94a3b8;--border:#334155;--border-strong:#475569;--primary:#0ea5e9;--primary-dark:#0284c7;--accent:#facc15;--success:#22c55e;--danger:#ef4444;--shadow:0 10px 30px rgba(0,0,0,0.25);--header-bg:linear-gradient(135deg,#0ea5e9,#6366f1);--header-shadow:none;--field-bg:#0b1220;--log-bg:#0b1220;--log-text:#dbeafe;--modal-backdrop:rgba(2,6,23,0.76)}body{margin:0;padding:0;font-family:"Segoe UI",sans-serif;background:var(--page);color:var(--text)}header{padding:14px 20px;background:var(--header-bg);color:var(--text);display:flex;align-items:center;justify-content:space-between;gap:12px;border-bottom:1px solid var(--border);box-shadow:var(--header-shadow)}.header-actions{display:flex;align-items:center;justify-content:flex-end;gap:12px;flex-wrap:wrap}.session-actions{display:flex;align-items:center;gap:8px}.session-actions .status{color:var(--success);background:var(--surface-soft);border-color:var(--border)}.brand{display:flex;align-items:center;gap:12px}.logo{height:44px;width:44px;object-fit:contain}header h1{margin:0;font-size:22px;letter-spacing:0}.header-control{min-height:38px}#lang-select{width:132px;min-width:132px;padding:8px 34px 8px 10px}#theme-toggle{min-width:82px;margin:0;padding:8px 12px}.content{margin:3px 16px 16px}.top-panels{display:grid;grid-template-columns:repeat(auto-fit,minmax(360px,1fr));gap:16px;margin:16px}.login-shell{min-height:calc(100vh - 88px);display:grid;place-items:center;padding:20px}#auth-panel{width:min(520px,100%)}.panel{margin:0 0 16px 0;padding:18px;background:var(--surface);border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow)}.top-panels .panel{margin-bottom:3px}.panel-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.panel h2{margin:0;font-size:18px;color:var(--text)}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--text-muted)}input,select{padding:10px;border-radius:8px;border:1px solid var(--border-strong);background:var(--field-bg);color:var(--text);outline:none}input:focus,select:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(0,127,140,0.14)}.checkbox-row{flex-direction:row;align-items:center;gap:8px}.actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:12px}button{cursor:pointer;padding:10px 14px;border-radius:8px;border:1px solid var(--primary);background:var(--primary);color:#ffffff;font-weight:600;transition:transform 0.05s ease,background 0.2s ease}button:hover{transform:translateY(-1px)}button.secondary{background:var(--field-bg);border-color:var(--border-strong);color:var(--text)}button.secondary:hover{background:var(--surface-soft);border-color:var(--primary)}.status{padding:6px 10px;border-radius:999px;font-size:12px;border:1px solid transparent}.status-idle{color:var(--text-muted);background:var(--surface-soft);border-color:var(--border)}.status-ok{color:var(--success);background:var(--surface-soft);border-color:var(--border)}.status-bad{color:var(--danger);background:var(--surface-soft);border-color:var(--border)}.hint{font-size:12px;color:var(--text-muted)}.status-line{margin-top:10px;min-height:18px;font-size:12px;color:var(--text-muted)}.status-inline{font-size:12px;color:var(--text-muted);margin-left:auto}.auto-read-control{margin-left:auto;display:inline-flex;align-items:center;gap:6px;color:var(--text-muted);font-size:12px;white-space:nowrap}.auto-read-control input{width:auto;min-width:0}.auto-read-control + .status-inline{margin-left:10px}.fw-info{margin-left:8px}#command-list{display:flex;flex-direction:column;gap:10px}.login-required{padding:18px;border:1px dashed var(--border-strong);border-radius:8px;background:var(--surface-soft);color:var(--text-muted);font-size:16px}.command-row{display:grid;grid-template-columns:190px 24px minmax(260px,360px) auto auto;gap:10px;align-items:center;padding:10px;border:1px solid var(--border);border-radius:8px;background:var(--surface-soft)}.command-row .title{font-weight:600;color:var(--text)}.command-row input,.command-row select{width:100%;min-width:260px;max-width:360px}.command-row .bitmask-field{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:6px 10px;width:min(520px,100%);min-width:min(520px,100%)}.command-row .volume-editor{display:grid;grid-template-columns:repeat(2,minmax(120px,1fr));gap:8px;min-width:360px;max-width:520px}.command-row .volume-editor input{min-width:0;max-width:none;height:38px;padding:8px 10px;font-size:16px}.compact-volume-field{gap:3px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:var(--field-bg)}.compact-volume-field strong{color:var(--text);font-size:13px;line-height:1.25}.compact-volume-field small{color:var(--primary);font-size:11px;line-height:1.2}.compact-volume-summary{grid-column:1 / -1;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:7px 10px;border:1px solid var(--border);border-radius:8px;background:var(--surface-muted);color:var(--text);font-size:12px;line-height:1.35}.compact-volume-summary strong{color:var(--text);font-size:14px}.compact-volume-ratio{flex:0 0 auto;color:var(--success);white-space:nowrap}.bitmask-option{flex-direction:row;align-items:center;gap:6px;min-height:28px;color:var(--text)}.bitmask-option input{width:auto;min-width:0;max-width:none}.command-row button{min-width:90px}.simple-config{display:grid;gap:18px;max-width:980px}.simple-intro h3{margin:0 0 6px;font-size:20px}.simple-intro p{margin:0;color:var(--text-muted);font-size:13px;line-height:1.5;max-width:980px}.simple-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px}.simple-field-card{gap:12px;padding:14px;border:1px solid var(--border);border-radius:8px;background:var(--surface-soft);transition:border-color 160ms ease,background 160ms ease,box-shadow 160ms ease}.simple-field-card.field-confirmed{border-color:rgba(21,128,61,0.65);background:rgba(21,128,61,0.12);box-shadow:0 0 0 1px rgba(21,128,61,0.16) inset}.simple-field-header{display:flex;align-items:center;gap:10px}.simple-field-header>span:last-child{display:grid;gap:2px}.simple-field-header strong{color:var(--text);font-size:15px}.simple-field-header small{color:var(--text-muted);font-size:12px}.simple-fields input{font-size:18px;font-weight:600;height:50px}.simple-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px;max-width:none}.simple-summary-card{display:grid;gap:10px;align-content:start;min-height:0;padding:14px;border:1px solid var(--border);border-radius:8px;background:var(--surface-soft)}.simple-summary-card>span{color:var(--primary);font-size:12px;font-weight:800;letter-spacing:0;text-transform:uppercase}.simple-summary-card p{margin:0;color:var(--text);font-size:15px;line-height:1.45}.simple-summary-card strong{color:var(--text);font-size:20px}.simple-status{min-height:20px;color:var(--text-muted);font-size:13px}.status-ok-text{color:var(--success)}.status-error-text{color:var(--danger)}.pulse-ratio{border:1px solid var(--border);background:var(--surface-muted)}.pulse-ratio>span{color:var(--success)}.pulse-ratio strong{line-height:1.1}.pulse-ratio small{color:var(--text-muted);font-size:12px}.info-link{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;min-width:14px;color:var(--primary);font-weight:700;font-size:21px;cursor:pointer;padding:0;border-radius:3px}.info-link:hover{background:rgba(0,127,140,0.12)}.state-idle{background:var(--field-bg);border-color:var(--border-strong);color:var(--text)}.state-pending{background:var(--accent);border-color:#c98312;color:#2c1b00}.state-ok{background:var(--success);border-color:#0f6f49;color:#ffffff}.state-error{background:var(--danger);border-color:#9f302f;color:#ffffff}#log-panel{margin-bottom:24px}#log{background:var(--log-bg);border-radius:10px;border:1px solid var(--border);color:var(--log-text);padding:12px;height:320px;overflow:auto;font-family:"Cascadia Code","Consolas",monospace;font-size:13px;white-space:pre-wrap}.hidden{display:none !important}.modal{position:fixed;inset:0;z-index:20;display:flex;align-items:center;justify-content:center;padding:20px;background:var(--modal-backdrop)}.modal-panel{width:min(1080px,100%);max-height:calc(100vh - 40px);overflow:auto;padding:16px;background:var(--surface);border:1px solid var(--border);border-radius:8px;box-shadow:0 24px 70px rgba(15,23,42,0.22)}.help-steps{display:grid;gap:12px}.help-step{display:grid;grid-template-columns:256px minmax(0,1fr);gap:14px;align-items:start;padding:12px;border:1px solid var(--border);border-radius:8px;background:var(--surface-soft)}.help-step h3{margin:0 0 8px;font-size:16px}.help-step p{margin:4px 0;color:var(--text-muted);font-size:14px}.help-image-placeholder{aspect-ratio:4 / 3;display:flex;align-items:center;justify-content:center;border:1px dashed var(--border-strong);border-radius:8px;background:var(--field-bg);color:var(--text-muted);font-size:13px}.help-image{width:100%;aspect-ratio:4 / 3;display:block;object-fit:cover;border:1px solid var(--border);border-radius:8px;background:var(--field-bg)}.wiring-diagram{display:grid;grid-template-columns:minmax(220px,1fr) minmax(130px,180px);gap:8px 14px;margin-top:12px;padding:12px;border:1px solid var(--border);border-radius:8px;background:var(--field-bg)}.help-image-diagram{width:100%;aspect-ratio:4 / 3;grid-template-columns:minmax(0,1fr) 58px;gap:7px 9px;margin-top:0;overflow:hidden}.help-image-diagram .wiring-header{font-size:10px}.help-image-diagram .wire-source,.help-image-diagram .wire-target{min-height:30px;font-size:12px}.wiring-header{color:var(--primary);font-size:12px;font-weight:800;text-transform:uppercase}.wire-source,.wire-target{min-height:34px;display:flex;align-items:center;border-radius:8px}.wire-source{gap:8px;color:var(--text)}.wire-target{position:relative;justify-content:center;border:1px solid var(--border-strong);color:var(--text);font-weight:800}.wire-target::before{content:"";position:absolute;left:-14px;top:50%;width:14px;height:3px;transform:translateY(-50%)}.wire-dot{width:14px;height:14px;flex:0 0 14px;border-radius:50%;border:1px solid rgba(255,255,255,0.55)}.wire-yellow,.wire-yellow-line::before{background:#facc15}.wire-gray,.wire-gray-line::before{background:#94a3b8}.wire-green,.wire-green-line::before{background:#22c55e}.tx{color:#67e8f9}.rx{color:#bef264}@media (max-width:720px){header{align-items:flex-start;flex-direction:column}.header-actions{width:100%;justify-content:space-between}.top-panels{grid-template-columns:1fr}.command-row{grid-template-columns:1fr}.command-row button{width:100%}.actions{width:100%}.command-row input,.command-row select{min-width:0;max-width:none}.command-row .bitmask-field{width:100%}.command-row .volume-editor{grid-column:auto;min-width:0;max-width:none}.compact-volume-summary{align-items:flex-start;flex-direction:column}.help-step{grid-template-columns:1fr}.wiring-diagram{grid-template-columns:1fr}.wire-target::before{display:none}}