:root{--bg: #14161b;--panel: #1b1e25;--panel2: #232733;--line: #2d3240;--text: #e6e8ee;--muted: #8d94a6;--accent: #4f8cff;--danger: #e5484d;--ok: #3dd68c;--grid: #2a2f3c;color-scheme:dark;accent-color:var(--accent);font:13px/1.4 system-ui,-apple-system,Segoe UI,sans-serif}*{box-sizing:border-box}html,body,#root{height:100%;margin:0;background:var(--bg);color:var(--text);overflow:hidden}.app{height:100%;display:grid;grid-template-columns:minmax(180px,230px) minmax(0,1fr) minmax(300px,460px);min-width:0;overflow:hidden;grid-template-rows:44px 1fr;grid-template-areas:"top top top" "left center right"}.topbar{grid-area:top;display:flex;align-items:center;gap:8px;padding:0 12px;background:var(--panel);border-bottom:1px solid var(--line)}.brand{letter-spacing:.3px}.name{background:transparent;border:1px solid transparent;color:var(--text);padding:4px 8px;border-radius:6px;width:200px;min-width:0;flex:0 1 200px}.topbar{min-width:0;overflow:hidden}.topbar button,.topbar select{flex:0 0 auto}.name:hover,.name:focus{border-color:var(--line);outline:none}.spacer{flex:1}.left{grid-area:left;min-width:0;display:flex;flex-direction:column;overflow:auto;border-right:1px solid var(--line);background:var(--panel)}.center{grid-area:center;min-width:0;position:relative}.right{grid-area:right;display:flex;flex-direction:column;min-height:0;min-width:0;overflow:hidden;border-left:1px solid var(--line);background:var(--panel)}.panel{padding:10px 12px}.panel h3{margin:0 0 8px;font-size:12px;text-transform:uppercase;letter-spacing:.8px;color:var(--muted)}.panel h3 small{text-transform:none;letter-spacing:0;opacity:.6;margin-left:6px}.palette{border-bottom:1px solid var(--line)}.cat{margin:10px 0 4px;font-size:11px;color:var(--muted)}.part{display:flex;align-items:center;gap:10px;padding:4px 6px;border-radius:6px;cursor:grab;user-select:none}.part:hover{background:var(--panel2)}.part svg{background:#0001;border-radius:4px}.search{width:100%}.hint{color:var(--muted);font-size:12px;margin:6px 0}.muted{color:var(--muted)}kbd{background:var(--panel2);border:1px solid var(--line);border-radius:4px;padding:0 4px;font-size:11px}button,select,input{font:inherit;color:var(--text);background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:4px 10px}button{cursor:pointer}button:hover:not(:disabled){border-color:var(--accent)}button:disabled{opacity:.5;cursor:default}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button.danger{color:#ff8a8e}input[type=color]{padding:0;height:26px;width:44px}.field{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:6px 0}.field input[type=number],.field input[type=text],.field select{width:110px}.row{display:flex;gap:8px;margin:8px 0}.pinlist{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}.pinlist code{background:var(--panel2);padding:1px 5px;border-radius:4px;font-size:11px}select{appearance:none;-webkit-appearance:none;padding-right:26px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%238d94a6' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 9px center;cursor:pointer}select option{background:var(--panel2);color:var(--text)}input[type=checkbox],input[type=radio]{appearance:none;-webkit-appearance:none;width:16px;height:16px;padding:0;margin:0 6px 0 0;border-radius:4px;vertical-align:middle;cursor:pointer;display:inline-grid;place-content:center}input[type=radio]{border-radius:50%}input[type=checkbox]:checked,input[type=radio]:checked{background:var(--accent);border-color:var(--accent)}input[type=checkbox]:checked:after{content:"";width:4px;height:8px;border:solid #fff;border-width:0 2px 2px 0;transform:translateY(-1px) rotate(45deg)}input[type=radio]:checked:after{content:"";width:6px;height:6px;border-radius:50%;background:#fff}input:focus-visible,select:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.zoom-controls{position:absolute;right:12px;bottom:12px;display:flex;align-items:center;gap:4px;background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:4px;box-shadow:0 4px 14px #0006}.zoom-controls button{width:28px;height:28px;padding:0;display:grid;place-content:center;font-size:16px;line-height:1}.zoom-controls .zoom-level{min-width:42px;text-align:center;color:var(--muted);font-size:11px}.canvas{width:100%;height:100%;display:block;touch-action:none;background:var(--bg)}.pin{fill:transparent;stroke:transparent;cursor:crosshair}.pin:not(.pin-hidden){fill:#d4a017;stroke:#0006;stroke-width:.6}.pin:hover{fill:var(--accent);stroke:#fff;stroke-width:.8}.pin-active{fill:#fff!important}.code{min-width:0;display:flex;flex-direction:column;flex:1 1 55%;min-height:0;padding:0}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;padding:8px 10px;background:var(--panel);min-width:0}.toolbar select{min-width:0;max-width:100%;text-overflow:ellipsis}.toolbar>.spacer{flex:1 1 0;min-width:0}.toolbar h3{margin:0}.editor{flex:1;min-height:0;min-width:0;overflow:hidden;position:relative}.editor>div{position:absolute;inset:0}.editor .cm-editor{height:100%;font-size:12.5px}.editor .cm-scroller{overflow:auto}.badge{font-size:11px;padding:2px 8px;border-radius:99px;background:var(--panel2);color:var(--muted)}.badge.ok{color:var(--ok)}.console{display:flex;flex-direction:column;flex:1 1 30%;min-height:120px;padding:0;border-top:1px solid var(--line)}.log{flex:1;overflow:auto;padding:4px 10px 8px;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:12px}.log pre{margin:1px 0;white-space:pre-wrap}.log-error{color:#ff8a8e}.log-serial{color:#7ee2b8}.log-build{color:var(--muted)}.log-info{color:#9db8ff}.swatches{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 10px}.swatch{width:22px;height:22px;padding:0;border-radius:50%;border:2px solid var(--line)}.swatch.on{border-color:#fff}.tabs{display:flex;gap:2px;background:var(--panel2);border-radius:8px;padding:2px;margin-left:6px}.tabs button{border:0;background:transparent;padding:3px 12px}.tabs button.on{background:var(--accent);color:#fff}.pcb{display:grid;grid-template-columns:minmax(240px,300px) minmax(0,1fr);height:100%;min-width:0}.pcb-side{overflow:auto;padding:12px;border-right:1px solid var(--line);background:var(--panel)}.pcb-side h3{margin:0 0 8px;font-size:12px;text-transform:uppercase;letter-spacing:.8px;color:var(--muted)}.pcb-main{display:flex;flex-direction:column;min-width:0;min-height:0}.pcb-canvas{flex:1;overflow:auto;padding:12px;background:#0b0d11}.pcb-canvas svg{width:100%;height:auto;display:block}.pcb-empty{margin:auto;color:var(--muted)}.choice{border:1px solid var(--line);border-radius:8px;margin:0 0 10px;padding:8px}.choice legend{padding:0 6px;font-size:12px}.opt{display:flex;gap:8px;padding:6px;border-radius:6px;cursor:pointer;align-items:flex-start}.opt.on{background:var(--panel2)}.opt span{display:flex;flex-direction:column;gap:2px}.opt small{color:var(--muted);font-size:11.5px}.stats{display:grid;grid-template-columns:1fr 1fr;gap:4px 10px;margin:12px 0;font-size:12.5px}.stats .good b{color:var(--ok)}.stats .bad b{color:#ff8a8e}.warn{white-space:pre-line;color:#ffcf8a;font-size:12px;background:#3a2d12;border:1px solid #5a4318;border-radius:6px;padding:6px 8px}.row.col{flex-direction:column}.chk{display:flex;gap:4px;align-items:center;font-size:12.5px}.legend{display:flex;gap:14px;padding:6px 12px;font-size:12px;color:var(--muted);border-top:1px solid var(--line);flex-wrap:wrap}.legend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:4px}.app.pcbmode{grid-template-columns:0 minmax(0,1fr) 0}.app.pcbmode .left,.app.pcbmode .right{display:none}.name{min-width:60px}.rtabs{margin:6px 10px;align-self:flex-start}.rpane{display:flex;flex-direction:column;flex:1;min-height:0;min-width:0}.rpane[hidden]{display:none}.menu{position:relative;flex:0 1 auto;min-width:0}.menu>button{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.menu-pop{position:absolute;top:calc(100% + 4px);z-index:50;min-width:220px;max-height:70vh;overflow:auto;background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:4px;box-shadow:0 8px 24px #0008}.menu-pop.left{left:0}.menu-pop.right{right:0}.menu-title{padding:4px 8px;font-size:11px;color:var(--muted)}.menu-row{display:flex;align-items:center}.menu-row.on .menu-item{color:var(--accent)}.menu-item{flex:1;text-align:left;border:0;background:transparent;width:100%;padding:6px 8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.menu-item:hover{background:var(--panel2)}.menu-x{border:0;background:transparent;padding:4px 6px;opacity:.6}.menu-pop hr{border:0;border-top:1px solid var(--line);margin:4px 0}.modal-back{position:fixed;inset:0;background:#0009;display:grid;place-items:center;z-index:100;padding:16px}.modal{width:min(400px,100%);max-height:90vh;overflow:auto;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px 16px 16px}.modal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.modal-head button{border:0;background:transparent}.form{display:flex;flex-direction:column;gap:10px}.form label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted)}.form label.chk{flex-direction:row;color:var(--text)}.form input:not([type=checkbox]){width:100%;padding:7px 9px;color:var(--text)}.form .tabs{margin:0}.form .tabs button{flex:1}.form-error{background:#3a1517;border:1px solid #6b2328;color:#ff9a9e;border-radius:6px;padding:6px 8px;font-size:12px;white-space:pre-wrap}.ai-gate{display:flex;flex-direction:column;gap:6px;align-items:flex-start}.ai{display:flex;flex-direction:column;flex:1;min-height:0;padding:0}.ai-list{flex:1;min-height:0;overflow:auto;padding:8px 12px;display:flex;flex-direction:column;gap:6px}.ai-msg{padding:7px 10px;border-radius:10px;white-space:pre-wrap;overflow-wrap:anywhere;max-width:100%}.ai-msg.user{background:var(--accent);color:#fff;align-self:flex-end;border-bottom-right-radius:3px}.ai-msg.assistant{background:var(--panel2);border-bottom-left-radius:3px}.ai-msg.note{color:var(--muted);font-size:12px;padding:0 4px}.ai-tool{font-size:12px}.ai-tool>button{border:0;background:transparent;color:var(--muted);padding:1px 4px;display:flex;gap:6px;align-items:center;text-align:left}.ai-tool .dot{width:7px;height:7px;border-radius:50%;background:var(--muted);flex:none}.ai-tool.ok .dot{background:var(--ok)}.ai-tool.error .dot{background:var(--danger)}.ai-tool.running .dot{background:var(--accent);animation:pulse 1s infinite}.ai-tool small{display:block;color:#ff8a8e;padding:0 4px 0 17px;overflow-wrap:anywhere}.ai-tool pre{margin:2px 0 4px 17px;padding:6px;background:var(--bg);border-radius:6px;white-space:pre-wrap;overflow-wrap:anywhere;font-size:11px;max-height:160px;overflow:auto}@keyframes pulse{50%{opacity:.3}}.ai-input{display:flex;gap:6px;padding:8px 10px;border-top:1px solid var(--line)}.ai-input textarea{flex:1;min-width:0;resize:none;background:var(--panel2);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:6px 8px;font:inherit}.topbar .tabs{flex:0 0 auto}.topbar .name{flex:1 1 60px;max-width:200px;width:auto}.topbar .badge,.brand{flex:0 0 auto}@media (max-width: 960px){.brand{display:none}.topbar select{max-width:130px}.topbar{gap:6px;padding:0 8px}}.topbar{overflow:visible;position:relative;z-index:30}.menu-pop{overflow-x:hidden}.modal.wide{width:min(780px,100%)}.guide{font-size:13px;line-height:1.55}.guide p{margin:6px 0}.guide code{background:var(--panel2);padding:1px 5px;border-radius:4px;font-size:12px}.guide .wide-tabs{margin:8px 0 4px;width:fit-content;flex-wrap:wrap}.guide .step{margin:14px 0 0;padding-top:10px;border-top:1px solid var(--line)}.guide .step h4{margin:0 0 6px;display:flex;align-items:center;gap:8px;font-size:14px}.guide .step .num{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:99px;background:var(--accent);color:#fff;font-size:12px}.guide ol,.guide ul{margin:6px 0;padding-left:20px}.guide .codeblock{position:relative;margin:6px 0}.guide .codeblock pre{margin:0;padding:10px 56px 10px 10px;background:#0b0d11;border:1px solid var(--line);border-radius:8px;overflow-x:auto;font-size:12px;user-select:text}.guide .codeblock button{position:absolute;top:6px;right:6px;font-size:11px;padding:2px 8px}.guide table.pins{border-collapse:collapse;width:100%;font-size:12px;margin:6px 0;display:block;overflow-x:auto}.guide table.pins th,.guide table.pins td{border:1px solid var(--line);padding:4px 8px;text-align:left;white-space:nowrap}.guide table.pins th{background:var(--panel2)}.admin{font-size:13px}.admin .row{display:flex;align-items:center;gap:8px;margin:10px 0;flex-wrap:wrap}.admin .row input[type=search]{flex:1 1 220px;min-width:0}.admin h4{margin:14px 0 6px}.admin .cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:8px;margin:12px 0}.admin .card{background:var(--panel2);border-radius:10px;padding:10px 12px}.admin .card .big{font-size:22px;font-weight:600}.admin .chart{width:100%;max-width:560px;color:var(--muted);display:block;margin-bottom:8px}.admin .notice{display:flex;align-items:center;gap:8px;flex-wrap:wrap;background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:8px 10px;margin:10px 0}.admin .notice.bad{border-color:#c0392b;color:#ff8a7d}.admin .notice button:last-child{margin-left:auto}.admin .secret{background:#0b0d11;padding:3px 8px;border-radius:4px;user-select:all;font-size:14px;letter-spacing:.5px}.admin .tablewrap{overflow-x:auto}.admin table.users{border-collapse:collapse;width:100%}.admin table.users th,.admin table.users td{border-bottom:1px solid var(--line);padding:6px 8px;text-align:left;vertical-align:top}.admin table.users th{color:var(--muted);font-weight:500;white-space:nowrap}.admin table.users tr.off td{opacity:.6}.admin td.actions{white-space:nowrap}.admin td.actions button{font-size:11.5px;padding:3px 8px;margin:0 2px 2px 0}.admin .badge.bad{background:#5b2420;color:#ff9a8f}.flipped text{transform-box:fill-box;transform-origin:center;transform:scaleX(-1)}.burnt-part{filter:grayscale(1) brightness(.45)}.smoke{animation:smoke 2.4s ease-out infinite}.smoke.s2{animation-delay:1.2s}@keyframes smoke{0%{opacity:0;transform:translateY(4px)}30%{opacity:.7}to{opacity:0;transform:translateY(-8px)}}.burnt-note{border:1px solid #d33;border-radius:6px;padding:6px 8px;margin:6px 0;background:#dd33331f}.burnt-note p{margin:0 0 6px;font-size:12px}.examples{font-size:13px}.examples .row{display:flex;align-items:center;gap:8px;margin:10px 0;flex-wrap:wrap}.examples .row input[type=search]{flex:1 1 260px;min-width:0;padding:7px 9px;color:var(--text)}.examples .filters{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:6px 0}.examples .filters>.muted{width:38px}.examples .partsearch{width:190px;padding:3px 8px;color:var(--text)}.chip{border:1px solid var(--line);background:var(--panel2);border-radius:99px;padding:2px 10px;font-size:12px;color:var(--text)}.chip small{color:var(--muted)}.chip.on{background:var(--accent);border-color:var(--accent);color:#fff}.chip.on small{color:#fffa}.chip.small{padding:1px 8px;font-size:11px;color:var(--muted)}.chip.small.on{color:#fff}.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px;margin-top:8px}.gcard{display:flex;flex-direction:column;background:var(--panel2);border:1px solid var(--line);border-radius:10px;overflow:hidden}.gthumb{border:0;padding:0;background:#0f1116;display:block;width:100%;aspect-ratio:16 / 10;cursor:pointer}.gthumb.static{cursor:default}.gthumb:hover{outline:2px solid var(--accent);outline-offset:-2px}.thumb{width:100%;height:100%;display:block}.thumb.big{height:auto;max-height:300px;background:#0f1116;border-radius:8px;margin-top:4px}.gbody{display:flex;flex-direction:column;gap:6px;padding:8px 10px 10px;flex:1}.gbody h4{margin:0;font-size:13.5px}.gbody p{margin:0;color:var(--muted);font-size:12px;line-height:1.4}.gparts{display:flex;flex-wrap:wrap;gap:4px}.gfoot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:auto;padding-top:4px}.share{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;margin-top:10px}.share textarea{width:100%;padding:7px 9px;color:var(--text);background:var(--panel2);border:1px solid var(--line);border-radius:6px;font:inherit;resize:vertical}@media (max-width: 760px){.share{grid-template-columns:1fr}}.admin .reviews{display:flex;flex-direction:column;gap:12px}.admin .review{display:grid;grid-template-columns:260px minmax(0,1fr);gap:12px;background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:10px}.admin .review h4{margin:0 0 2px}.admin .review p{margin:6px 0}.admin .rthumb{background:#0f1116;border-radius:8px;aspect-ratio:16 / 10;overflow:hidden}.admin .review .actions{display:flex;gap:6px;margin-top:8px;flex-wrap:wrap}@media (max-width: 700px){.admin .review{grid-template-columns:1fr}}
