@import "https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap";
:root{--bg-base:#10141a;--bg-panel:#161b22;--bg-raised:#1c2026;--bg-raised-hover:#22262b;--bg-highest:#31353c;--border:#2e3439;--border-accent:#524439;--border-focus:#f0a86880;--text-primary:#e6edf3;--text-dim:#8b9198;--text-faint:#5b6167;--text-inverse:#1a1305;--accent:#f0a868;--accent-dim:#6c3a01;--accent-glow:#f0a86826;--signal:#4ddcc6;--signal-glow:#4ddcc626;--success:#6bcb82;--success-glow:#6bcb8226;--error:#e2635a;--error-glow:#e2635a26;--warn:#f0a868;--font-ui:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono:"IBM Plex Mono", "SF Mono", Menlo, Consolas, monospace;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:20px;--sp-6:24px;--sp-8:32px;--sp-10:40px;--r-sm:4px;--r:6px;--r-md:8px;--r-lg:10px;--r-xl:16px;--r-full:9999px;--t-fast:.12s ease;--t:.2s ease;--t-slow:.35s ease;--sidebar-width:240px;--topbar-height:56px}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;font-size:14px}body{background:var(--bg-base);color:var(--text-primary);font-family:var(--font-ui);min-height:100vh;font-size:14px;line-height:1.5}a{color:var(--accent);transition:color var(--t-fast);text-decoration:none}a:hover{color:#f5b87a}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text-faint)}::-webkit-scrollbar-track{background:0 0}.text-headline-lg{font-size:20px;font-weight:600;line-height:28px}.text-headline-md{font-size:16px;font-weight:600;line-height:24px}.text-headline-sm{font-size:14px;font-weight:600;line-height:20px}.text-body-md{font-size:14px;font-weight:400;line-height:20px}.text-body-sm{font-size:12px;font-weight:400;line-height:18px}.text-label-caps{text-transform:uppercase;letter-spacing:.09em;color:var(--text-faint);font-size:10.5px;font-weight:600}.text-mono-data{font-family:var(--font-mono);font-size:13px;line-height:18px}.text-mono-sm{font-family:var(--font-mono);font-size:11px;line-height:16px}button{cursor:pointer;font-family:var(--font-ui);border-radius:var(--r);transition:background var(--t-fast), border-color var(--t-fast), transform 80ms;align-items:center;gap:var(--sp-2);white-space:nowrap;border:none;outline:none;font-weight:600;display:inline-flex}button:active:not(:disabled){transform:translateY(1px)}button:disabled{opacity:.38;cursor:not-allowed}.btn-primary{background:var(--accent);color:var(--text-inverse);padding:9px 18px;font-size:13px}.btn-primary:hover:not(:disabled){background:#f5b87a}.btn-ghost{background:var(--bg-raised);color:var(--text-primary);border:1px solid var(--border);padding:8px 16px;font-size:12.5px}.btn-ghost:hover:not(:disabled){background:var(--bg-raised-hover);border-color:var(--text-faint)}.btn-danger{color:var(--error);background:0 0;border:1px solid #e2635a4d;padding:8px 14px;font-size:12.5px}.btn-danger:hover:not(:disabled){background:var(--error-glow)}.btn-icon{color:var(--text-dim);border-radius:var(--r);background:0 0;border:1px solid #0000;padding:6px}.btn-icon:hover:not(:disabled){background:var(--bg-raised);color:var(--text-primary)}.btn-sm{padding:5px 12px;font-size:12px}.btn-lg{padding:12px 24px;font-size:14px}.btn-full{justify-content:center;width:100%}input[type=text],input[type=number],input[type=email],input[type=password],select,textarea{background:var(--bg-raised);border:1px solid var(--border);width:100%;color:var(--text-primary);border-radius:var(--r);font-family:var(--font-mono);transition:border-color var(--t-fast), box-shadow var(--t-fast);appearance:none;outline:none;padding:7px 10px;font-size:12.5px}input[type=text]::placeholder,input[type=email]::placeholder,input[type=password]::placeholder{color:var(--text-faint)}input:focus,select:focus,textarea:focus{border-color:var(--accent-dim);box-shadow:0 0 0 3px var(--accent-glow)}select{cursor:pointer}.field{gap:var(--sp-1);flex-direction:column;display:flex}.field label{color:var(--text-dim);font-size:11.5px;font-weight:500}.field-row{gap:var(--sp-2);display:grid}.field-row-2{grid-template-columns:1fr 1fr}.field-row-3{grid-template-columns:1fr 1fr 1fr}.field-row-4{grid-template-columns:1fr 1fr 1fr 1fr}input[type=checkbox]{border-radius:var(--r-sm);cursor:pointer;width:14px;height:14px;accent-color:var(--accent);padding:0}.card{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--sp-4) var(--sp-5)}.card-title{margin-bottom:var(--sp-1);font-size:14px;font-weight:600}.card-desc{color:var(--text-dim);margin-bottom:var(--sp-4);font-size:12.5px;line-height:1.55}.card--accent{border-left:3px solid var(--accent)}.card--signal{border-left:3px solid var(--signal)}.card--success{border-left:3px solid var(--success)}.card--error{border-left:3px solid var(--error)}.badge{align-items:center;gap:var(--sp-1);font-family:var(--font-mono);border-radius:var(--r-full);border:1px solid var(--border);color:var(--text-dim);white-space:nowrap;padding:2px 9px;font-size:11px;font-weight:500;display:inline-flex}.badge--ok{color:var(--success);border-color:#6bcb8266}.badge--error{color:var(--error);border-color:#e2635a66}.badge--signal{color:var(--signal);border-color:#4ddcc666}.badge--accent{color:var(--accent);border-color:#f0a86866}.badge--pro{color:#2e1500;font-weight:700;font-family:var(--font-ui);text-transform:uppercase;letter-spacing:.05em;background:linear-gradient(135deg,#f0a868,#f5c897);border:none;font-size:10px}.led{background:var(--text-faint);width:8px;height:8px;transition:background var(--t), box-shadow var(--t);border-radius:50%;flex-shrink:0;display:inline-block}.led--on{background:var(--success);box-shadow:0 0 0 3px var(--success-glow)}.led--tx{background:var(--signal);box-shadow:0 0 0 4px var(--signal-glow);animation:.15s led-pulse}.led--error{background:var(--error);box-shadow:0 0 0 3px var(--error-glow)}.led--warn{background:var(--accent);box-shadow:0 0 0 3px var(--accent-glow)}.result-box{background:var(--bg-base);border:1px solid var(--border);border-radius:var(--r-md);padding:var(--sp-3) var(--sp-4);font-family:var(--font-mono);min-height:48px;color:var(--text-dim);font-size:12.5px}.reg-row{border-bottom:1px dashed var(--border);justify-content:space-between;align-items:center;padding:4px 0;display:flex}.reg-row:last-child{border-bottom:none}.reg-row .addr{color:var(--text-faint);font-size:11px}.reg-row .val{color:var(--text-primary);font-weight:600}.reg-row .val-hi{color:var(--signal)}.notice{background:var(--accent-glow);border-radius:var(--r-md);padding:var(--sp-3) var(--sp-4);color:var(--text-dim);border:1px solid #f0a86840;font-size:12.5px;line-height:1.55}.notice b{color:var(--accent)}.notice--error{background:var(--error-glow);border-color:#e2635a40}.notice--error b{color:var(--error)}.upgrade-banner{align-items:center;gap:var(--sp-3);border-radius:var(--r-md);padding:var(--sp-3) var(--sp-4);color:var(--text-dim);background:linear-gradient(135deg,#f0a86814,#f0a8680a);border:1px solid #f0a86840;font-size:12.5px;display:flex}.upgrade-banner .upgrade-cta{background:var(--accent);color:var(--text-inverse);border-radius:var(--r);flex-shrink:0;margin-left:auto;padding:5px 14px;font-size:12px;font-weight:700}.macro-card{background:var(--bg-raised);border:1px solid var(--border);border-left:4px solid var(--border);border-radius:var(--r-lg);padding:var(--sp-4);gap:var(--sp-3);transition:transform var(--t-fast), border-color var(--t-fast);flex-direction:column;display:flex}.macro-card:hover{border-top-color:var(--bg-highest)}.macro-card--default{border-left-color:var(--border)}.macro-card--accent{border-left-color:var(--accent);background:linear-gradient(135deg, var(--bg-raised), #f0a86808)}.macro-card--success{border-left-color:var(--success);background:linear-gradient(135deg, var(--bg-raised), #6bcb8208)}.macro-card--signal{border-left-color:var(--signal);background:linear-gradient(135deg, var(--bg-raised), #4ddcc608)}.macro-card--error{border-left-color:var(--error);background:linear-gradient(135deg, var(--bg-raised), #e2635a08)}.macro-title{font-size:14px;font-weight:600}.macro-preview{background:var(--bg-base);border:1px solid var(--border);border-radius:var(--r);padding:var(--sp-2) var(--sp-3);font-family:var(--font-mono);color:var(--text-dim);flex-direction:column;gap:2px;max-height:100px;font-size:11px;display:flex;overflow-y:auto}.macro-step{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.macro-row{gap:var(--sp-2);background:var(--bg-raised);padding:var(--sp-3);border-radius:var(--r);border:1px solid var(--border);grid-template-columns:60px 160px 80px 1fr 100px 36px;align-items:end;display:grid}.macro-row .field{margin-bottom:0}.scan-progress{background:var(--bg-base);border-radius:var(--r-full);border:1px solid var(--border);height:4px;overflow:hidden}.scan-progress-bar{background:var(--signal);border-radius:var(--r-full);height:100%;transition:width .1s linear}.scan-grid{gap:var(--sp-2);grid-template-columns:repeat(auto-fill,minmax(160px,1fr));display:grid}.scan-hit{background:var(--bg-raised);border:1px solid var(--success);border-radius:var(--r-md);padding:var(--sp-3);font-family:var(--font-mono);cursor:pointer;transition:background var(--t-fast)}.scan-hit:hover{background:var(--bg-raised-hover)}.scan-hit .id{color:var(--success);font-size:18px;font-weight:700}.scan-hit .meta{color:var(--text-faint);margin-top:2px;font-size:10.5px}.log-box{border:1px solid var(--border);border-radius:var(--r-md);padding:var(--sp-3) var(--sp-4);font-family:var(--font-mono);background:#0a0e14;font-size:12px;line-height:1.65;overflow-y:auto}.log-line{white-space:pre-wrap;word-break:break-all;gap:var(--sp-2);display:flex}.log-line .ts{color:var(--text-faint);flex-shrink:0}.log-line .dir{flex-shrink:0;width:42px;font-weight:600}.log-line .slave{color:var(--text-faint);flex-shrink:0;width:28px}.log-line .frame{flex:1}.log-tx .dir{color:var(--signal)}.log-rx .dir{color:var(--accent)}.log-err .dir,.log-err .frame{color:var(--error)}.log-info .dir{color:var(--text-dim)}.hex-id{color:var(--accent);font-weight:600}.hex-fc{color:var(--signal)}.hex-data{color:var(--text-primary)}.hex-crc{color:var(--text-faint)}.progress-bar-track{background:var(--bg-highest);border-radius:var(--r-full);height:6px;overflow:hidden}.progress-bar-fill{border-radius:var(--r-full);height:100%;transition:width .3s}.progress-bar-fill--error{background:var(--error)}.progress-bar-fill--warn{background:var(--warn)}.progress-bar-fill--signal{background:var(--signal)}.stat-card{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--r-md);padding:var(--sp-3) var(--sp-4);gap:var(--sp-1);flex-direction:column;display:flex}.stat-label{color:var(--text-faint);font-size:11px;font-weight:500}.stat-value{color:var(--success);font-size:22px;font-weight:700;font-family:var(--font-mono)}.stat-value--dim{color:var(--text-primary)}.stat-unit{color:var(--text-dim);margin-left:2px;font-size:12px}.device-chip{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--r);font-family:var(--font-mono);cursor:pointer;transition:border-color var(--t-fast), background var(--t-fast);justify-content:space-between;align-items:center;padding:6px 10px;font-size:12px;display:flex}.device-chip:hover{border-color:var(--accent-dim);background:var(--bg-raised-hover)}.device-chip .chip-id{color:var(--signal);font-weight:600}.device-chip .chip-meta{color:var(--text-faint);font-size:10.5px}.auth-page{background:var(--bg-base);justify-content:center;align-items:center;min-height:100vh;display:flex;position:relative;overflow:hidden}.auth-bg-decoration{pointer-events:none;opacity:.04;background-image:repeating-linear-gradient(0deg, transparent, transparent 40px, var(--signal) 40px, var(--signal) 41px), repeating-linear-gradient(90deg, transparent, transparent 40px, var(--signal) 40px, var(--signal) 41px);position:absolute;inset:0}.auth-card{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--r-xl);z-index:1;width:100%;max-width:420px;padding:40px 36px;position:relative}.auth-logo{align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-6);flex-direction:column;display:flex}.auth-divider{align-items:center;gap:var(--sp-3);margin:var(--sp-4) 0;color:var(--text-faint);font-size:12px;display:flex}.auth-divider:before,.auth-divider:after{content:"";background:var(--border);flex:1;height:1px}@keyframes led-pulse{0%{box-shadow:0 0 #4ddcc699}to{box-shadow:0 0 0 8px #4ddcc600}}@keyframes fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-in-left{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.animate-fade-in{animation:.2s forwards fade-in}.animate-slide-in{animation:.2s forwards slide-in-left}.animate-spin{animation:1s linear infinite spin}.skeleton{background:linear-gradient(90deg, var(--bg-raised) 25%, var(--bg-highest) 50%, var(--bg-raised) 75%);border-radius:var(--r);background-size:200% 100%;animation:1.5s infinite shimmer}.flex{display:flex}.flex-col{flex-direction:column;display:flex}.items-center{align-items:center}.items-end{align-items:flex-end}.justify-between{justify-content:space-between}.justify-end{justify-content:flex-end}.gap-1{gap:var(--sp-1)}.gap-2{gap:var(--sp-2)}.gap-3{gap:var(--sp-3)}.gap-4{gap:var(--sp-4)}.gap-6{gap:var(--sp-6)}.flex-1{flex:1}.w-full{width:100%}.min-w-0{min-width:0}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.grid-2{gap:var(--sp-3);grid-template-columns:1fr 1fr;display:grid}.grid-3{gap:var(--sp-3);grid-template-columns:1fr 1fr 1fr;display:grid}.grid-4{gap:var(--sp-3);grid-template-columns:1fr 1fr 1fr 1fr;display:grid}.grid-auto{gap:var(--sp-3);grid-template-columns:repeat(auto-fill,minmax(240px,1fr));display:grid}.mb-2{margin-bottom:var(--sp-2)}.mb-3{margin-bottom:var(--sp-3)}.mb-4{margin-bottom:var(--sp-4)}.mb-6{margin-bottom:var(--sp-6)}.mt-2{margin-top:var(--sp-2)}.mt-3{margin-top:var(--sp-3)}.mt-4{margin-top:var(--sp-4)}.ml-auto{margin-left:auto}.empty-hint{color:var(--text-faint);font-size:12px;font-style:italic;line-height:1.6}@media (max-width:768px){.field-row-4{grid-template-columns:1fr 1fr}.macro-row{grid-template-columns:1fr 1fr 1fr}.grid-4,.grid-3{grid-template-columns:1fr 1fr}}@media (max-width:480px){.field-row-3,.field-row-2{grid-template-columns:1fr}.auth-card{padding:28px 20px}}
