:root{--bg: #f4f6f8;--bg-elev: #ffffff;--bg-card: #ffffff;--line: #d7dde3;--text: #1b1f24;--muted: #5f6b76;--accent: #00ae42;--accent-ink: #ffffff;--demo: #f5c518;--demo-ink: #2a2000;--warn: #d97706;--error: #dc2626;--ok: #00ae42;--radius: 16px;--tap: 46px;--shadow: 0 8px 24px rgba(15, 23, 32, .08)}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:16px;line-height:1.4;-webkit-font-smoothing:antialiased}h1{font-size:1.15rem;margin:0}h2{font-size:1rem;margin:0 0 .5rem}.app{display:flex;flex-direction:column;min-height:100%}.app-header{position:sticky;top:0;z-index:5;display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:calc(env(safe-area-inset-top) + .7rem) 1rem .7rem;background:var(--bg-elev);border-bottom:1px solid var(--line)}.app-title{display:flex;align-items:center;gap:.6rem}.logo{color:var(--accent);font-size:1.4rem}.subtitle{margin:0;color:var(--muted);font-size:.8rem}.app-main{flex:1;padding:.9rem;padding-bottom:calc(var(--tap) + env(safe-area-inset-bottom) + 2rem);max-width:780px;width:100%;margin:0 auto}.view{display:flex;flex-direction:column;gap:.9rem}.card{background:var(--bg-card);border:1px solid var(--line);border-radius:var(--radius);padding:.9rem;box-shadow:var(--shadow)}.card-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.5rem}.card-head h2{margin:0}.muted{color:var(--muted)}.note{color:var(--muted);font-size:.85rem;margin:.5rem 0 0}.badge{display:inline-flex;align-items:center;padding:.2rem .55rem;border-radius:999px;font-size:.75rem;font-weight:700;white-space:nowrap}.badge-demo{background:var(--demo);color:var(--demo-ink)}.badge-info{background:var(--accent);color:var(--accent-ink)}.badge-muted{background:#eef2f5;color:var(--muted)}.btn{min-height:var(--tap);padding:0 .9rem;border-radius:12px;border:1px solid var(--line);background:var(--bg-elev);color:var(--text);font-size:.95rem;font-weight:600;cursor:pointer}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.45}.btn-primary{background:var(--accent);color:var(--accent-ink);border-color:transparent}.btn.danger{color:var(--error)}.btn-sm{min-height:40px;padding:0 .7rem}.btn-block{width:100%;margin-top:.4rem}.toolbar{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.7rem}.field{display:flex;flex-direction:column;gap:.3rem;margin-bottom:.7rem}.field>span{font-size:.82rem;color:var(--muted)}select,input[type=number]{min-height:var(--tap);background:var(--bg);border:1px solid var(--line);border-radius:10px;color:var(--text);padding:0 .7rem;font-size:1rem;width:100%}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:.6rem}.grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:.6rem}.inline{display:flex;align-items:center;gap:.5rem}.inline input{flex:1}.status-line{display:flex;align-items:center;gap:.5rem;margin-bottom:.6rem}.dot{width:12px;height:12px;border-radius:50%;background:var(--muted)}.dot-printing{background:var(--accent)}.dot-idle{background:var(--ok)}.dot-offline,.dot-not_implemented{background:var(--muted)}.metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:.5rem;margin-bottom:.7rem}.metric{background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:.5rem;text-align:center}.metric-label{display:block;color:var(--muted);font-size:.75rem}.metric-value{font-size:1.05rem;font-weight:700}.metric-value small{color:var(--muted);font-weight:400}.progress{height:12px;background:var(--bg);border-radius:999px;overflow:hidden;border:1px solid var(--line)}.progress-bar{height:100%;background:var(--accent)}.progress-text{margin:.4rem 0 0;font-size:.85rem;color:var(--muted)}.camera-frame{aspect-ratio:16 / 10;background:#000;border-radius:10px;overflow:hidden;display:flex;align-items:center;justify-content:center}.camera-media{width:100%;height:100%;object-fit:contain}.camera-placeholder{text-align:center;color:var(--muted)}.camera-icon{font-size:2rem;display:block;opacity:.6}.plate-canvas{position:relative;width:100%;height:340px;border-radius:10px;overflow:hidden;background:#e8edf1;border:1px solid var(--line);touch-action:none}.plate-canvas canvas{display:block}.canvas-fallback{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;text-align:center;padding:1rem;color:var(--muted)}.model-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.4rem}.model-row{display:flex;align-items:stretch;gap:.4rem;background:var(--bg);border:1px solid var(--line);border-radius:10px;overflow:hidden}.model-row-active{border-color:var(--accent)}.model-main{flex:1;display:flex;flex-direction:column;align-items:flex-start;gap:.15rem;background:transparent;border:0;color:var(--text);padding:.6rem;text-align:left;cursor:pointer;min-height:var(--tap)}.model-name{font-weight:600;word-break:break-all}.model-size{color:var(--muted);font-size:.78rem}.model-actions{display:flex}.icon-btn{width:46px;border:0;border-left:1px solid var(--line);background:var(--bg-elev);color:var(--text);font-size:1.1rem;cursor:pointer}.icon-btn.danger{color:var(--error)}.status-chip{align-self:flex-start;padding:.1rem .5rem;border-radius:999px;font-size:.7rem;font-weight:700}.status-ok{background:#46d17a2e;color:var(--ok)}.status-collision{background:#ff5a5a2e;color:var(--error)}.status-out_of_bounds{background:#ffb0202e;color:var(--warn)}.banner{margin:0;padding:.7rem .9rem;border-radius:10px;font-size:.9rem;border:1px solid var(--line)}.banner-info{background:#36c5ff1f;border-color:#36c5ff66}.banner-error{background:#dc262614;border-color:#dc262647;color:#9f1239}.banner-warn{background:#d977061a;border-color:#d9770647}.banner-demo{background:#f5c51829;border-color:#f5c51873;color:#7a5300}.job{margin-top:.7rem;padding:.7rem;border-radius:10px;background:var(--bg);border:1px solid var(--line)}.job-head{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.job-chip-succeeded{background:#46d17a2e;color:var(--ok)}.job-chip-failed{background:#ff5a5a2e;color:var(--error)}.job-chip-running,.job-chip-queued{background:#36c5ff2e;color:var(--accent)}.log{margin:.5rem 0 0;padding:.5rem;background:#111827;border-radius:8px;color:#e5e7eb;font-size:.72rem;max-height:140px;overflow:auto;white-space:pre-wrap;word-break:break-all}.kv{display:grid;grid-template-columns:auto 1fr;gap:.3rem .9rem;margin:0}.kv dt{color:var(--muted)}.kv dd{margin:0;text-align:right}.tabbar{position:fixed;bottom:0;left:0;right:0;z-index:5;display:flex;background:var(--bg-elev);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom)}.tab{flex:1;min-height:var(--tap);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.1rem;background:transparent;border:0;color:var(--muted);font-size:.75rem;font-weight:600;cursor:pointer}.tab-active{color:var(--accent)}.tab-icon{font-size:1.2rem}.tuning-card{background:#f7faf8;border:1px solid var(--line);border-radius:12px;padding:.75rem}.tuning-title{margin:0 0 .2rem;font-weight:700;font-size:.92rem}.tuning-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));column-gap:.5rem;row-gap:.3rem;margin-top:.6rem}.tuning-field{display:contents}.tuning-field>span{grid-row:1;align-self:end;color:var(--muted);font-size:.78rem;line-height:1.2;overflow-wrap:anywhere}.tuning-field>input{grid-row:2;min-width:0;padding:0 .5rem}.light-toolbar{margin-top:.4rem}.artifact{margin-top:.6rem;padding-top:.6rem;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:.35rem;align-items:flex-start}.artifact .btn{text-decoration:none;display:inline-block}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.75rem;word-break:break-all}.transfer-panel{align-self:stretch;margin-top:.4rem;padding-top:.6rem;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:.5rem;align-items:flex-start}.transfer-title{margin:0;font-size:.95rem}.btn-transfer{min-height:52px;padding:0 1.6rem;font-size:1.05rem}.transfer-confirm{align-self:stretch;display:flex;flex-direction:column;gap:.5rem;padding:.75rem;background:#f7faf8;border:1px solid var(--line);border-radius:12px}.transfer-confirm .toolbar{margin-top:.2rem}.transfer-confirm-title{margin:0;font-weight:700;font-size:.9rem}.transfer-check{display:flex;align-items:flex-start;gap:.6rem;min-height:var(--tap);font-size:.92rem;cursor:pointer}.transfer-check input{flex:none;width:22px;height:22px;margin:.1rem 0 0;accent-color:var(--accent)}.transfer-attempt{align-self:stretch;padding:.6rem .7rem;background:var(--bg);border:1px solid var(--line);border-radius:10px}.transfer-steps{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.4rem;margin:.5rem 0 0;padding:0;list-style:none}.transfer-step{display:flex;flex-direction:column;align-items:center;gap:.1rem;padding:.35rem .2rem;background:var(--bg-elev);border:1px solid var(--line);border-radius:8px;font-size:.8rem;text-align:center}.transfer-step-name{font-weight:700}.transfer-step-state{color:var(--muted)}.transfer-step-ok{border-color:#00ae4280}.transfer-step-ok .transfer-step-state{color:#047a30}.transfer-step-running{border-color:#d9770680}.transfer-step-blocked,.transfer-step-failed{border-color:#dc262673}.transfer-step-blocked .transfer-step-state,.transfer-step-failed .transfer-step-state{color:#9f1239}.transfer-chip-ready{background:#00ae4229;color:#047a30}.transfer-chip-running{background:#d9770624;color:#92400e}.transfer-chip-blocked,.transfer-chip-failed{background:#dc26261f;color:#9f1239}.transfer-unavailable{margin:0}
