@import "https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&family=Sora:wght@500;700&family=Source+Sans+3:wght@400;600&display=swap";:root{--ink:#e8f2ec;--muted:#8fa698;--line:#8caa962e;--copper:#d4944a;--signal:#2f8f62;--font-display:"Sora", sans-serif;--font-ui:"Source Sans 3", sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, monospace;font-family:var(--font-ui);color:var(--ink);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#0f1612;font-weight:400;line-height:1.45}*,:before,:after{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}body{min-width:320px}button,input{font:inherit}.app{min-height:100vh;color:var(--ink);background:radial-gradient(80% 50% at 10% -10%,#d4944a2e,#0000 55%),radial-gradient(60% 40% at 90% 0,#2e785a33,#0000 50%),linear-gradient(165deg,#0f1612 0%,#152019 45%,#101612 100%);grid-template-rows:auto auto 1fr;display:grid}.topbar{border-bottom:1px solid var(--line);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);justify-content:space-between;align-items:center;gap:1rem;padding:.75rem 1rem;display:flex}.brand{align-items:center;gap:.85rem;min-width:12rem;display:flex}.brand__mark{background:linear-gradient(135deg, var(--copper) 0%, #b86b2a 40%, transparent 41%), linear-gradient(315deg, var(--signal) 0%, #1f6b4a 55%, #0d1f18 100%);border-radius:.55rem;width:2.2rem;height:2.2rem;box-shadow:inset 0 0 0 1px #ffffff14}.brand h1{font-family:var(--font-display);letter-spacing:-.03em;margin:0;font-size:1.35rem;font-weight:700;line-height:1}.brand p{color:var(--muted);margin:.2rem 0 0;font-size:.75rem}.toolbar{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.4rem;display:flex}.toolbar__sep{background:var(--line);width:1px;height:1.4rem;margin:0 .2rem}.project-name{border:1px solid var(--line);width:9rem;color:var(--ink);background:#121a16;border-radius:.4rem;padding:.4rem .55rem;font-size:.82rem}.port-wrap{color:var(--muted);align-items:center;gap:.35rem;font-size:.75rem;display:inline-flex}.port-wrap select{border:1px solid var(--line);max-width:12rem;color:var(--ink);background:#121a16;border-radius:.4rem;padding:.35rem .45rem;font-size:.78rem}.toolbar button,.side-tabs button,.serial-panel__actions button,.serial-panel__input button,.code-panel__actions button{appearance:none;border:1px solid var(--line);color:var(--ink);font-family:var(--font-ui);cursor:pointer;background:#1a2620;border-radius:.4rem;padding:.4rem .7rem;font-size:.78rem;transition:background .12s,border-color .12s}.toolbar button:hover,.side-tabs button:hover,.serial-panel__actions button:hover,.code-panel__actions button:hover{background:#24332b;border-color:#3d5348}.toolbar button:disabled,.serial-panel__input button:disabled{opacity:.45;cursor:not-allowed}.toolbar button.primary,.serial-panel__actions button.primary,.code-panel__actions button.primary{color:#f3fff8;background:linear-gradient(#2f8f62,#1f6b4a);border-color:#3aa572}.subbar{border-bottom:1px solid var(--line);background:#080c0a59;justify-content:space-between;align-items:center;gap:1rem;padding:.55rem 1rem;display:flex}.board-groups{flex-wrap:wrap;align-items:center;gap:.45rem;display:flex}.board-switch{border:1px solid var(--line);background:#080e0b8c;border-radius:.55rem;gap:.15rem;padding:.15rem;display:inline-flex}.board-switch--muted{opacity:.85}.board-switch button{appearance:none;color:var(--muted);font-family:var(--font-ui);cursor:pointer;background:0 0;border:none;border-radius:.4rem;padding:.35rem .7rem;font-size:.78rem;font-weight:600}.board-switch button.is-active{color:#f3fff8;background:linear-gradient(#2f8f62,#1f6b4a)}.subbar__meta{align-items:center;gap:.75rem;font-size:.78rem;display:flex}.pill{border:1px solid var(--line);color:var(--muted);border-radius:999px;padding:.2rem .6rem}.pill--ok{color:#9ee0bf;border-color:#3aa57280}.pill--warn{color:#f0c089;border-color:#d4944a8c}.pill--bad{color:#f0a29a;border-color:#c8504699}.status{color:var(--muted)}.workspace{grid-template-columns:minmax(0,1.35fr) minmax(300px,.95fr);height:calc(100vh - 6.6rem);min-height:0;display:grid}.editor-pane{border-right:1px solid var(--line);min-width:0;min-height:0}.blockly-host{color:#1a1a1a;width:100%;height:100%;position:relative;overflow:hidden}.blockly-host .blocklyMainBackground{fill:#121a16!important}.blockly-host .blocklyToolboxDiv{z-index:20;border-right:1px solid #8caa9638;width:max-content;min-width:168px;color:#e8f2ec!important;background-color:#1a2620!important;overflow-y:auto!important}.blockly-host .blocklyToolboxCategory,.blockly-host .blocklyTreeRow{border-radius:.35rem;margin:.1rem .25rem;color:#e8f2ec!important}.blockly-host .blocklyToolboxCategoryLabel,.blockly-host .blocklyTreeLabel{color:#e8f2ec!important;fill:#e8f2ec!important;opacity:1!important;font-family:"Source Sans 3",sans-serif!important;font-size:13px!important;font-weight:600!important}.blockly-host .blocklyToolboxSelected,.blockly-host .blocklyTreeSelected{background-color:#2f8f62!important}.blockly-host .blocklyToolboxCategory:hover,.blockly-host .blocklyTreeRow:hover{background-color:#24332b!important}.blockly-host .blocklyFlyoutBackground{fill:#152019!important;fill-opacity:.98!important}.blockly-host .blocklyFlyoutButtonBackground{fill:#2a4035!important}.blockly-host .blocklyFlyoutLabelText{fill:#e8f2ec!important}.side-pane{background:#080c0ab8;grid-template-rows:auto 1fr;min-height:0;display:grid}.side-tabs{border-bottom:1px solid var(--line);gap:.25rem;padding:.45rem .6rem;display:flex}.side-tabs button.is-active{background:#2a4035;border-color:#3d5348}.code-panel,.serial-panel{height:100%;min-height:0;display:grid}.code-panel{grid-template-rows:auto auto auto 1fr auto auto}.code-link-bar{border-bottom:1px solid var(--line);background:#2f8f621f;justify-content:space-between;align-items:center;gap:.5rem;padding:.45rem .85rem;font-size:.75rem;display:flex}.code-link-bar label{color:#d7ebe0;align-items:center;gap:.4rem;display:inline-flex}.code-link-bar button{appearance:none;border:1px solid var(--line);color:var(--ink);cursor:pointer;background:#1a2620;border-radius:.35rem;padding:.25rem .5rem;font-size:.72rem}.code-focus{border-bottom:1px solid var(--line);color:#d7ebe0;background:#2f8f622e;padding:.4rem .85rem;font-size:.75rem}.code-focus__edit{color:#e8f2ec;cursor:pointer;background:#0f281ca6;border:1px solid #3aa5728c;border-radius:.3rem;margin-left:.5rem;padding:.15rem .45rem;font-size:.72rem}.code-focus__edit:hover{background:#2f8f6259}.code-match{border-bottom:1px solid var(--line);color:#d7ebe0;padding:.55rem .85rem .65rem;font-size:.75rem}.code-panel__pre--lines{white-space:normal}.code-panel__pre--lines code{font-family:inherit;display:block}.code-scope-legend{border-bottom:1px solid var(--line);flex-wrap:wrap;gap:.55rem .85rem;padding:.4rem .85rem;font-size:.72rem;display:flex}.leg{color:#9eb3a6;align-items:center;gap:.35rem;display:inline-flex}.leg:before{content:"";border-radius:2px;width:.65rem;height:.65rem}.leg--base:before{background:#2f9f7a}.leg--exp:before{background:#d4a017}.leg--shared:before{background:#9b6bb8}.leg--health-error{color:#ffb4ac;font-weight:600}.leg--health-error:before{background:#e53935;box-shadow:0 0 0 1px #e539358c}.leg--health-warn{color:#f0c089}.leg--health-warn:before{background:#f0a020}.code-line{white-space:pre;border-left:3px solid #0000;grid-template-columns:3rem 1fr;gap:.5rem;padding:0 .25rem;display:grid}.code-line--base{background:#2f9f7a14;border-left-color:#2f9f7a}.code-line--base .code-line__txt{color:#b8ebe0}.code-line--exp{background:#d4a0171a;border-left-color:#d4a017}.code-line--exp .code-line__txt{color:#f0e0a8}.code-line--shared{background:#9b6bb81a;border-left-color:#9b6bb8}.code-line--shared .code-line__txt{color:#e2c8f0}.code-line--health-error{box-shadow:inset 0 0 0 1px #e5393573;background:#e5393547!important;border-left-color:#e53935!important}.code-line--health-error .code-line__txt{font-weight:600;color:#ffc9c4!important}.code-line--health-error .code-line__no{color:#ff8a80;font-weight:700}.code-line--health-warn{background:#f0a0202e!important;border-left-color:#f0a020!important}.code-line--health-warn .code-line__txt{color:#ffe0a8!important}.code-line.is-active{background:#ffd64638;outline:2px solid #ffd646d9;box-shadow:inset 3px 0 #ffd646}.code-line.is-active .code-line__no{color:#ffe9a0;font-weight:700}.code-line.is-symbol .code-line__txt{font-weight:600;color:#fff6c8!important}.code-line.is-flash{animation:.9s ease-out code-line-flash}@keyframes code-line-flash{0%{background:#ffd6468c}to{background:#ffd64638}}.code-line__no{color:#6f8678;text-align:right;-webkit-user-select:none;user-select:none}.code-line__txt{color:#d7ebe0}.code-match strong{align-items:center;gap:.45rem;font-size:.8rem;display:flex}.code-match ul{color:var(--muted);margin:.35rem 0 0;padding-left:1.1rem}.code-match p{color:var(--muted);font-family:var(--font-mono);margin:.35rem 0 0;font-size:.68rem}.conf{text-transform:uppercase;border:1px solid var(--line);border-radius:999px;padding:.1rem .45rem;font-size:.68rem;font-weight:600}.conf--high{color:#9ee0bf;border-color:#3aa5728c}.conf--medium{color:#f0c089;border-color:#d4944a8c}.conf--low{color:#c9b8a0}.code-panel__bar,.serial-panel__bar{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:.75rem;padding:.65rem .85rem;display:flex}.code-panel__title,.serial-panel__bar span{font-family:var(--font-display);letter-spacing:-.02em;font-size:.9rem}.code-panel__actions,.serial-panel__actions{gap:.4rem;display:flex}.code-panel__pre,.serial-panel__log,.code-panel__upload-log{font-family:var(--font-mono);color:#d7ebe0;white-space:pre-wrap;margin:0;padding:.85rem 1rem;font-size:.78rem;line-height:1.5;overflow:auto}.code-panel__hint{border-top:1px solid var(--line);color:var(--muted);margin:0;padding:.55rem 1rem;font-size:.72rem}.code-panel__upload-log{border-top:1px solid var(--line);color:#cfe6a8;background:#00000040;max-height:9rem}.code-panel__warn{border-top:1px solid var(--line);color:#e2b07a;margin:0;padding:.45rem 1.1rem .7rem 1.8rem;font-size:.7rem}.serial-panel{grid-template-rows:auto 1fr auto}.serial-panel__input{border-top:1px solid var(--line);grid-template-columns:1fr auto;gap:.4rem;padding:.55rem .75rem .7rem;display:grid}.serial-panel__input input{border:1px solid var(--line);color:var(--ink);font-family:var(--font-mono);background:#121a16;border-radius:.4rem;padding:.45rem .6rem;font-size:.8rem}.hw-panel{grid-template-rows:auto 1fr;height:100%;min-height:0;display:grid}.hw-panel__bar{border-bottom:1px solid var(--line);font-family:var(--font-display);justify-content:space-between;align-items:center;gap:.75rem;padding:.65rem .85rem;font-size:.9rem;display:flex}.hw-panel__actions{gap:.4rem;display:flex}.hw-panel__body{padding:.85rem 1rem 1.1rem;overflow:auto}.hw-panel__body h3{font-family:var(--font-display);margin:0 0 .25rem;font-size:1.05rem}.hw-panel__body h4{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:1rem 0 .4rem;font-size:.78rem}.hw-panel__body p{margin:.2rem 0;font-size:.82rem}.hw-sku{font-family:var(--font-mono);color:var(--copper);font-size:.75rem}.hw-card a{color:#9ee0bf;font-size:.78rem}.hw-panel__muted{color:var(--muted);font-size:.78rem!important}.hw-panel__warn{color:#e2b07a;margin-top:.55rem!important;font-size:.75rem!important}.cap-grid{flex-wrap:wrap;gap:.35rem;margin:0;padding:0;list-style:none;display:flex}.cap-grid li{border:1px solid var(--line);color:#d7ebe0;background:#2f8f621f;border-radius:999px;padding:.2rem .55rem;font-size:.72rem}.exp-list{gap:.4rem;display:grid}.exp-list label{border:1px solid var(--line);cursor:pointer;background:#121a16;border-radius:.45rem;grid-template-columns:auto 1fr;gap:.55rem;padding:.55rem .65rem;display:grid}.exp-list label.is-on{background:#2f8f621f;border-color:#3aa5728c}.exp-list strong{font-size:.8rem;display:block}.exp-list small{color:var(--muted);margin-top:.15rem;font-size:.72rem;display:block}.pkg-list{gap:.35rem;margin:0;padding:0;list-style:none;display:grid}.pkg-list li{grid-template-columns:auto 1fr;align-items:start;gap:.5rem;font-size:.78rem;display:grid}.pkg-list small{color:var(--muted);font-family:var(--font-mono);font-size:.68rem;display:block}.dot{background:#666;border-radius:50%;width:.55rem;height:.55rem;margin-top:.35rem}.dot--ok{background:#3aa572}.dot--miss{background:#d4944a}.hw-log{border:1px solid var(--line);max-height:10rem;font-family:var(--font-mono);color:#cfe6a8;white-space:pre-wrap;background:#00000047;border-radius:.4rem;margin:.75rem 0 0;padding:.65rem .75rem;font-size:.7rem;overflow:auto}.hw-panel__actions button,.side-tabs button{appearance:none;border:1px solid var(--line);color:var(--ink);font-family:var(--font-ui);cursor:pointer;background:#1a2620;border-radius:.4rem;padding:.4rem .7rem;font-size:.78rem}.hw-panel__actions button.primary{color:#f3fff8;background:linear-gradient(#2f8f62,#1f6b4a);border-color:#3aa572}.hw-panel__actions button:disabled{opacity:.45;cursor:not-allowed}.health-panel{grid-template-rows:auto 1fr;height:100%;min-height:0;display:grid}.health-panel__bar{border-bottom:1px solid var(--line);font-family:var(--font-display);justify-content:space-between;align-items:center;gap:.75rem;padding:.65rem .85rem;font-size:.9rem;display:flex}.health-panel__actions{align-items:center;gap:.45rem;display:flex}.health-panel__actions button{appearance:none;border:1px solid var(--line);color:var(--ink);font-family:var(--font-ui);cursor:pointer;background:#1a2620;border-radius:.4rem;padding:.35rem .65rem;font-size:.75rem}.health-panel__actions button.primary{color:#f3fff8;background:linear-gradient(#2f8f62,#1f6b4a);border-color:#3aa572}.health-panel__actions button:disabled{opacity:.45;cursor:not-allowed}.health-panel__warn{color:#e2b07a;font-size:.75rem}.health-panel__ok{color:#7dcca8;font-size:.75rem}.pinout-editor{box-sizing:border-box;resize:vertical;color:#e8f2ec;border:1px solid var(--line);background:#0e1512;border-radius:.4rem;width:100%;min-height:10rem;margin-top:.35rem;padding:.55rem .65rem;font-family:ui-monospace,Cascadia Code,Consolas,monospace;font-size:.72rem;line-height:1.35}.pinout-editor:focus{border-color:#3aa5728c;outline:1px solid #3aa5728c}.pinout-editor:disabled{opacity:.55}.code-panel__editor{border-left:none;border-right:none;border-radius:0;flex:1;min-height:0;margin:0}.code-file-tabs{border-bottom:1px solid var(--line);flex-wrap:wrap;gap:.25rem;padding:.35rem .65rem;display:flex}.code-file-tabs button{color:#9eb3a6;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:.3rem;padding:.25rem .5rem;font-size:.72rem}.code-file-tabs button.is-active{color:#e8f2ec;border-color:var(--line);background:#2f9f7a26}.health-fix-log{border:1px solid var(--line);font-family:var(--font-mono);color:#cfe6a8;white-space:pre-wrap;background:#00000047;border-radius:.4rem;max-height:8rem;margin:.65rem 0 0;padding:.55rem .65rem;font-size:.7rem;overflow:auto}.health-panel__body{padding:.85rem 1rem 1.1rem;overflow:auto}.health-panel__summary{color:#d7ebe0;margin:0;font-size:.88rem}.health-panel__muted{color:var(--muted);margin:.35rem 0 0;font-size:.75rem}.health-panel__body h4{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:1rem 0 .4rem;font-size:.78rem}.health-panel__checks{color:var(--muted);margin:0;padding-left:1.1rem;font-size:.78rem}.hf-list{gap:.45rem;margin:0;padding:0;list-style:none;display:grid}.hf{border:1px solid var(--line);background:#121a16;border-radius:.45rem;padding:.55rem .65rem}.hf__top{flex-wrap:wrap;align-items:center;gap:.35rem;margin-bottom:.25rem;display:flex}.hf__copy{border:1px solid var(--line);color:#c5d8cc;cursor:pointer;background:#1a2620;border-radius:.3rem;margin-left:auto;padding:.12rem .4rem;font-size:.68rem}.hf__copy:hover{color:#e8f2ec;border-color:#3aa5728c}.hf__top strong{font-size:.82rem}.hf p{color:#c5d8cc;margin:.15rem 0 0;font-size:.75rem}.hf__hint{color:#e2b07a!important}.hf__sev,.hf__area{text-transform:uppercase;letter-spacing:.04em;border:1px solid var(--line);border-radius:999px;padding:.1rem .4rem;font-size:.65rem}.hf--error{background:#e539352e;border-color:#e53935;box-shadow:0 0 0 1px #e5393559}.hf--error .hf__sev{color:#fff;background:#e53935;border-color:#e53935}.hf--error .hf__top strong{color:#ffc9c4}.hf--error p{color:#ffd2cd}.hf--warn{background:#f0a0201a;border-color:#f0a020a6}.hf--warn .hf__sev{color:#f0c089;border-color:#d4944a8c}.hf--ok .hf__sev{color:#9ee0bf;border-color:#3aa5728c}.hf--info .hf__sev{color:#9eb6e0}.upload-modal{z-index:80;place-items:center;padding:1.25rem;display:grid;position:fixed;inset:0}.upload-modal__backdrop{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#060c09b8;position:absolute;inset:0}.upload-modal__card{background:radial-gradient(80% 60% at 10% 0,#d4944a24,#0000 55%),linear-gradient(165deg,#152019 0%,#101612 100%);border:1px solid #d4944a59;border-radius:.85rem;gap:.85rem;width:min(34rem,100%);padding:1.15rem 1.25rem 1.1rem;display:grid;position:relative;box-shadow:0 24px 60px #00000073}.upload-modal__head{justify-content:space-between;align-items:flex-start;gap:.75rem;display:flex}.upload-modal__eyebrow{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:0;font-size:.68rem}.upload-modal__head h2{font-family:var(--font-display);letter-spacing:-.02em;margin:.15rem 0 0;font-size:1.25rem;font-weight:700}.upload-modal__meta{color:#c5d8cc;margin:.25rem 0 0;font-size:.78rem}.upload-modal__badge{color:#9ee0bf;background:#1e463273;border:1px solid #3aa57273;border-radius:999px;flex-shrink:0;padding:.28rem .55rem;font-size:.72rem}.upload-modal__badge--ok{color:#b8f0d0;border-color:#3aa572b3}.upload-modal__badge--err{color:#f0b8a8;background:#501e1873;border-color:#dc6450a6}.upload-modal__steps{grid-template-columns:repeat(4,1fr);gap:.35rem;margin:0;padding:0;list-style:none;display:grid}.upload-modal__step{color:var(--muted);align-items:center;gap:.35rem;font-size:.7rem;display:flex}.upload-modal__step-dot{border:1px solid var(--line);background:#2a3830;border-radius:50%;width:.55rem;height:.55rem}.upload-modal__step--active{color:#e8f2ec}.upload-modal__step--active .upload-modal__step-dot{background:var(--copper);border-color:#d4944acc;animation:1.2s ease-in-out infinite upload-pulse;box-shadow:0 0 0 3px #d4944a33}.upload-modal__step--done{color:#9ee0bf}.upload-modal__step--done .upload-modal__step-dot{background:var(--signal);border-color:#3aa572b3}.upload-modal__step--error{color:#f0b8a8}.upload-modal__step--error .upload-modal__step-dot{background:#c45a45;border-color:#e0806a}.upload-modal__bar-wrap{border:1px solid var(--line);background:#0c1210;border-radius:999px;height:.55rem;overflow:hidden}.upload-modal__bar{border-radius:inherit;background:linear-gradient(90deg, #2e785a, var(--copper));height:100%;transition:width .35s}.upload-modal__bar--pulse{background:linear-gradient(90deg, #2e785a 0%, var(--copper) 45%, #d4c07a 70%, #2e785a 100%);background-size:200% 100%;animation:1.4s linear infinite upload-bar-shine}.upload-modal__bar--err{background:linear-gradient(90deg,#8a3a2e,#c45a45)}.upload-modal__status-row{justify-content:space-between;align-items:flex-start;gap:.75rem;display:flex}.upload-modal__detail{color:#d7ebe0;margin:0;font-size:.84rem;line-height:1.35}.upload-modal__pct{font-variant-numeric:tabular-nums;color:var(--copper);font-size:.85rem;font-weight:600}.upload-modal__log{border:1px solid var(--line);color:#9eb0a4;white-space:pre-wrap;word-break:break-word;background:#0c1210;border-radius:.45rem;max-height:9rem;margin:0;padding:.65rem .75rem;font-size:.68rem;line-height:1.4;overflow:auto}.upload-modal__foot{justify-content:space-between;align-items:center;gap:.75rem;min-height:2.2rem;display:flex}.upload-modal__hint{color:var(--muted);flex:1;margin:0;font-size:.75rem}.upload-modal__cancel{color:#f0b8a8;cursor:pointer;background:#501e1859;border:1px solid #dc64508c;border-radius:.4rem;flex-shrink:0;padding:.4rem .85rem;font-size:.82rem}.upload-modal__cancel:hover:not(:disabled){background:#64282080;border-color:#dc6450d9}.upload-modal__cancel:disabled{opacity:.55;cursor:wait}@keyframes upload-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.25)}}@keyframes upload-bar-shine{0%{background-position:100% 0}to{background-position:-100% 0}}@media (width<=1000px){.topbar,.subbar{flex-direction:column;align-items:stretch}.workspace{grid-template-rows:minmax(45vh,1fr) minmax(40vh,1fr);grid-template-columns:1fr;height:auto;min-height:calc(100vh - 9rem)}.editor-pane{border-right:none;border-bottom:1px solid var(--line);min-height:45vh}.upload-modal__steps{grid-template-columns:1fr 1fr}}
