:root{
  --bg:#141413; --card:#1f1f1e; --line:#2f2e2b; --text:#faf9f5; --dim:#b0aea5;
  --accent:#d97757; --accent-d:#b85f43; --ok:#788c5d; --bad:#c0392b; --warn:#e0a84a;
  color-scheme: dark;
}
@media (prefers-color-scheme: light){
  :root{ --bg:#faf9f5; --card:#fff; --line:#e0ddd2; --text:#141413; --dim:#5e5d59; color-scheme: light; }
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--text);font:16px/1.5 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}
header{max-width:760px;margin:0 auto;padding:28px 16px 0}
h1{margin:0;font-size:28px;letter-spacing:-.5px}
h1 span{color:var(--accent)}
h2{margin:0 0 12px;font-size:18px}
h3{margin:20px 0 8px;font-size:15px;color:var(--dim)}
.sub{margin:4px 0 16px;color:var(--dim)}
.tabs{display:flex;gap:8px;border-bottom:1px solid var(--line)}
.tab{background:none;border:0;border-bottom:3px solid transparent;color:var(--dim);padding:10px 14px;font:inherit;cursor:pointer}
.tab.active{color:var(--text);border-bottom-color:var(--accent)}
main{max-width:760px;margin:0 auto;padding:16px}
.panel{display:none}.panel.active{display:block}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:18px;margin-bottom:16px}
label{display:block;margin:10px 0;color:var(--dim);font-size:14px}
label.check{display:flex;gap:8px;align-items:center;color:var(--text)}
input,select,textarea{width:100%;margin-top:4px;padding:10px;border-radius:8px;border:1px solid var(--line);background:var(--bg);color:var(--text);font:inherit}
input[type=checkbox]{width:auto;margin:0}
input[type=range]{padding:0}
input[type=color]{padding:2px;height:36px;width:56px}
button{font:inherit;padding:10px 16px;border-radius:8px;border:1px solid var(--line);background:var(--card);color:var(--text);cursor:pointer}
button:hover{border-color:var(--accent)}
button.primary{background:var(--accent);border-color:var(--accent);color:#fff}
button.primary:hover{background:var(--accent-d)}
button:disabled{opacity:.5;cursor:not-allowed}
.row{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:10px 0}
.row select{width:auto;flex:1;min-width:180px;margin:0}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media (max-width:520px){.grid2{grid-template-columns:1fr}}
.hint{color:var(--dim);font-size:13px;margin:8px 0}
.warn,.warn-text{color:var(--warn)}
.warn{border:1px solid var(--warn);border-radius:8px;padding:10px 12px;margin-bottom:16px}
.steps{padding-left:20px;margin:8px 0}
.steps li{margin:6px 0}
code{background:var(--bg);padding:1px 6px;border-radius:4px}
.pill{padding:3px 10px;border-radius:999px;font-size:13px;border:1px solid var(--line)}
.pill.on{color:var(--ok);border-color:var(--ok)}
.pill.off{color:var(--dim)}
.locked{opacity:.45;pointer-events:none}
dl.status{display:grid;grid-template-columns:140px 1fr;gap:4px 12px;margin:0 0 8px}
dl.status dt{color:var(--dim)} dl.status dd{margin:0;word-break:break-word}
.colors{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin:10px 0}
.colors label{margin:0;display:flex;align-items:center;gap:8px;font-size:13px}
.colors input{margin:0}
.netlist{list-style:none;margin:6px 0;padding:0}
.netlist li{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--line)}
.netlist li.hint{border:0}
.netlist button{padding:4px 10px;font-size:13px}
details{margin:12px 0}
summary{cursor:pointer;color:var(--dim)}
pre#log{max-height:240px;overflow:auto;background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:10px;font-size:12px;white-space:pre-wrap;margin:0}
footer{max-width:760px;margin:0 auto;padding:8px 16px 32px;color:var(--dim);font-size:12px}
a{color:var(--accent)}
