*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:#f5f5f5;color:#333}.app-layout{display:flex;height:100vh;height:100dvh;overflow:hidden}.sidebar{width:180px;background:#1a1a2e;color:#eee;padding:1.5rem 0;flex-shrink:0;overflow-y:auto;overflow-x:hidden;transition:width .18s ease}.sidebar.collapsed{width:72px;padding-top:.6rem}.sidebar.collapsed h1,.sidebar.collapsed nav,.sidebar.collapsed .sidebar-project{display:none}.sidebar-toggle{display:block;width:56px;height:56px;margin:0 .6rem .75rem auto;border:none;border-radius:6px;background:#16213e;color:#ccc;font-size:1.9rem;line-height:1;cursor:pointer}.sidebar-toggle:hover{background:#24325c;color:#fff}.sidebar.collapsed .sidebar-toggle{margin:0 auto .75rem}.sidebar h1{font-size:1.3rem;padding:0 .8rem;margin-bottom:2rem;color:#fff}.sidebar nav a{display:block;padding:.7rem .8rem;color:#ccc;text-decoration:none;transition:background .2s}.sidebar nav a:hover,.sidebar nav a.active{background:#16213e;color:#fff}a.sidebar-project{display:block;text-decoration:none;cursor:pointer;transition:background .2s}a.sidebar-project:hover,a.sidebar-project.active{background:#16213e}.nav-group-label{display:block;padding:.7rem .8rem;color:#ccc;text-decoration:none;font-size:.9rem;-webkit-user-select:none;user-select:none}.nav-group-label:hover,.nav-group-label.active{background:#16213e;color:#fff}.nav-caret{display:inline-block;width:1.05rem;font-size:.7rem;transition:transform .15s}.nav-children a{padding-left:1.6rem!important;font-size:.85rem}.nav-children .nav-group-label{padding-left:1.6rem;font-size:.85rem}.nav-children .nav-children a{padding-left:2.65rem!important}.main-content{flex:1;min-width:0;padding:2rem;overflow:auto}.page-header{margin-bottom:1.5rem}.page-header h2{font-size:1.5rem;margin-bottom:.3rem}.page-header p{color:#666}.section-intro{color:#666;margin-bottom:1.25rem}.card{background:#fff;border-radius:8px;padding:1.5rem;box-shadow:0 1px 4px #00000014;margin-bottom:1.5rem;max-width:100%;overflow-x:auto}.btn{display:inline-flex;align-items:center;gap:.4rem;padding:.5rem 1rem;border:none;border-radius:6px;cursor:pointer;font-size:.9rem;text-decoration:none}.btn-primary{background:#0f3460;color:#fff}.btn-primary:hover{background:#1a4a7a}.btn-primary:disabled{background:#9aaec9;color:#dde;cursor:not-allowed}.btn-primary:hover:disabled{background:#9aaec9}.btn-secondary:disabled{background:#ccc;color:#999;cursor:not-allowed}.btn-secondary:hover:disabled{background:#ccc}.btn-danger:disabled{background:#f0b0b8;color:#ddd;cursor:not-allowed}.btn-danger:hover:disabled{background:#f0b0b8}.btn-danger{background:#e94560;color:#fff}.btn-danger:hover{background:#d63850}.btn-secondary{background:#e0e0e0;color:#333}.btn-secondary:hover{background:#ccc}.btn:disabled{opacity:.55;cursor:not-allowed}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:.7rem .5rem;border-bottom:1px solid #eee}th{font-weight:600;color:#666;font-size:.8rem;text-transform:uppercase}.form-group{margin-bottom:1rem}.form-group label{display:block;margin-bottom:.3rem;font-weight:500;font-size:.9rem}.form-group input,.form-group select{width:100%;padding:.5rem;border:1px solid #ddd;border-radius:6px;font-size:.9rem}.block-preview{display:inline-block;border-radius:4px;border:1px solid rgba(0,0,0,.15)}.sticker-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:1rem}.sticker-item{background:#fff;border:1px solid #ddd;border-radius:8px;padding:1rem;text-align:center}.sticker-item svg{display:block;margin:0 auto .5rem}.sticker-item .label{font-size:.75rem;color:#666}.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:1rem}.photo-card{background:#fff;border-radius:8px;overflow:hidden;box-shadow:0 1px 4px #00000014}.photo-card img{width:100%;height:160px;object-fit:contain;background:#f5f5f5}.photo-card .info{padding:.5rem}.qr-svg-container svg{display:block;width:100%;height:auto;max-width:100%;max-height:100%}.canvas-container{width:100%;height:500px;border-radius:8px;overflow:hidden}.status-badge{display:inline-block;padding:.2rem .6rem;border-radius:12px;font-size:.75rem;font-weight:600}.status-pending{background:#fff3cd;color:#856404}.status-processing{background:#cce5ff;color:#004085}.status-completed{background:#d4edda;color:#155724}.status-failed{background:#f8d7da;color:#721c24}.empty-state{text-align:center;padding:3rem;color:#999}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:1000}.modal{background:#fff;color:#333;border-radius:10px;width:90%;max-width:520px;max-height:85vh;max-height:85dvh;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 8px 30px #0003}.modal-header{flex-shrink:0;display:flex;justify-content:space-between;align-items:center;padding:1.25rem 1.5rem;border-bottom:1px solid #eee}.modal-header h3{margin:0}.modal-close{background:none;border:none;font-size:1.5rem;cursor:pointer;color:#999;padding:0;line-height:1}.modal-close:hover{color:#333}.modal-body{padding:1.5rem;flex:1;min-height:0;overflow-y:auto}.modal-footer{flex-shrink:0;padding:.75rem 1.5rem;border-top:1px solid #eee;display:flex;justify-content:flex-end;gap:.5rem;background:#fff}.debug-editor{display:flex;flex-direction:column}.debug-toolbar{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;background:#fff;border-bottom:1px solid #ddd;flex-shrink:0;flex-wrap:wrap}.debug-info{font-size:.85rem;color:#666}.debug-placement-banner{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.5rem 1rem;background:#eaf2ff;border-bottom:1px solid #bcd4ff;color:#1d4ed8;font-size:.9rem;flex-shrink:0}.debug-placement-banner .btn-sm{padding:.25rem .75rem;font-size:.8rem}.debug-block-picker{display:grid;grid-template-columns:1fr 1fr;gap:8px}.debug-picker-item{display:flex;align-items:center;gap:8px;padding:.5rem;border-radius:6px;border:1px solid #ddd;background:#fff;cursor:pointer;font-size:.85rem;transition:border-color .15s,box-shadow .15s}.debug-picker-item:hover{border-color:#48f;box-shadow:0 1px 4px #48f3}.debug-picker-free{margin-left:auto;font-size:.75rem;color:#888;white-space:nowrap}.debug-assign-hint{margin:0 0 .75rem;font-size:.85rem;color:#666;line-height:1.45}.debug-assign-error{margin:0 0 .75rem;padding:.5rem .75rem;border-radius:6px;background:#fdecec;border:1px solid #f5b5b5;color:#9c2a2a;font-size:.85rem}.debug-assign-list{display:flex;flex-direction:column;gap:4px;max-height:50vh;overflow-y:auto}.debug-assign-item{display:flex;align-items:center;gap:.75rem;padding:.4rem .6rem;border-radius:6px;border:1px solid #ddd;background:#fff;cursor:pointer;font-size:.85rem;text-align:left}.debug-assign-item strong{min-width:3ch;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.debug-assign-item:hover{border-color:#48f;box-shadow:0 1px 4px #48f3}.debug-assign-item.current{border-color:#48f;background:#eaf2ff}.debug-assign-tag{margin-left:auto;font-size:.75rem;color:#888;white-space:nowrap}.import-modal{display:flex;flex-direction:column;max-height:90vh}.import-modal-body{display:flex;flex-direction:column;flex:1;min-height:0;padding:0;overflow:hidden}.import-results-layout{display:flex;flex-direction:column;flex:1;min-height:0}.import-image-section{flex-shrink:0;padding:1.5rem 1.5rem .75rem;overflow:hidden}.import-codes-section{flex:1;overflow-y:auto;padding:0 1.5rem}.import-bottom-actions{flex-shrink:0;display:flex;justify-content:space-between;align-items:center;padding:.75rem 1.5rem 1.5rem;border-top:1px solid #eee}.alert{padding:.75rem 1rem;border-radius:6px;font-size:.9rem}.alert-warning{background:#fff3cd;color:#856404;border:1px solid #ffeeba}.alert-error{background:#f8d7da;color:#721c24;border:1px solid #f5c6cb}.live-page{display:flex;flex-direction:column;height:100%;min-height:0}.live-body{display:flex;gap:1rem;flex:1;min-height:0;align-items:stretch}.live-col-video{flex:1 1 480px;min-width:0;display:flex;flex-direction:column;min-height:0;margin-bottom:0}.live-col-side{flex:0 1 340px;min-width:260px;overflow-y:auto;margin-bottom:0}.live-preview-wrap{flex:1;min-height:0;display:flex;align-items:center;justify-content:center}.live-preview{position:relative;background:#000;border-radius:6px;overflow:hidden;line-height:0}.live-preview video,.live-preview img{display:block;width:100%;height:100%}.live-preview canvas{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.live-controls{display:flex;gap:.5rem;margin-top:.75rem;align-items:center;flex-wrap:wrap;flex-shrink:0}.live-page.is-immersive{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;margin:0;padding:0;background:#000;height:100dvh}.live-page.is-immersive>.page-header,.live-page.is-immersive .capture-health,.live-page.is-immersive .live-col-side,.live-page.is-immersive .live-legend{display:none}.live-page.is-immersive .live-body{gap:0;height:100%;flex-direction:row;overflow:hidden}.live-page.is-immersive .live-col-video{flex:1 1 auto;padding:0;margin:0;border:0;border-radius:0;box-shadow:none;background:#000}.live-page.is-immersive .live-preview-wrap{overflow:hidden;height:100%;min-height:0}.live-page.is-immersive .live-preview{border-radius:0}.live-page.is-immersive .live-preview video,.live-page.is-immersive .live-preview img{max-height:none;max-width:none}.live-page.is-immersive .live-controls{position:fixed;top:calc(env(safe-area-inset-top,0px) + .75rem);right:calc(env(safe-area-inset-right,0px) + .75rem);z-index:2;margin:0;width:auto;flex-direction:column;align-items:flex-end;flex-wrap:nowrap;gap:.6rem;pointer-events:none}.live-page.is-immersive .live-controls>*{pointer-events:auto}.live-page.is-immersive .live-controls .info{max-width:42vw;text-align:right;font-size:.75rem;line-height:1.3;color:#fff;background:#0000008c;padding:.2rem .45rem;border-radius:4px;text-shadow:0 1px 2px rgba(0,0,0,.9)}.live-page.is-immersive .live-camera-menu{position:fixed;top:calc(env(safe-area-inset-top,0px) + 5.5rem);right:calc(env(safe-area-inset-right,0px) + .75rem);z-index:3;max-width:min(20rem,80vw);max-height:60dvh;overflow-y:auto;background:#141414f2;color:#fff;padding:.6rem;border-radius:6px;box-shadow:0 4px 16px #0009}@media (orientation: landscape) and (max-height: 480px){.live-page.is-immersive .live-controls{gap:.4rem}.live-page.is-immersive .live-controls .info{display:none}}@media (max-width: 820px){.live-body{flex-direction:column;overflow-y:auto}.live-col-video{flex:0 0 auto}.live-preview-wrap{min-height:40vh}.live-preview video,.live-preview img{max-height:60dvh}.live-col-side{flex:0 0 auto;overflow-y:visible}}.shutter-btn{width:64px;height:64px;border-radius:12px;border:2px solid #c8c8c8;background:#fff;padding:0;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0;transition:background .15s,border-color .15s}.shutter-btn:hover:not(:disabled){background:#f3f3f3;border-color:#aaa}.shutter-btn:disabled{opacity:.5;cursor:not-allowed}.shutter-dot{width:42px;height:42px;border-radius:50%;background:#e53935;transition:transform .12s ease}.shutter-btn:active:not(:disabled) .shutter-dot{transform:scale(.86)}.shutter-btn .spinner-sm{width:34px;height:34px;border:3px solid rgba(0,0,0,.15);border-top-color:#e53935;border-radius:50%;animation:blocks-spin .8s linear infinite}.processing-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.6rem;background:#0006;color:#fff;font-size:.95rem}.processing-overlay .spinner{width:40px;height:40px;border:3px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:blocks-spin .8s linear infinite}@keyframes blocks-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.shutter-btn .spinner-sm,.processing-overlay .spinner{animation-duration:2.4s}}.unknown-block{margin-top:.75rem;padding:.6rem;border:1px solid #ffcdd2;border-radius:6px;background:#fff5f5;font-size:.85rem}.unknown-block input[type=text],.unknown-block input:not([type]){width:100%;padding:.35rem;border:1px solid #ddd;border-radius:4px}.export-brick{display:block;margin:0 auto;transform-origin:50% 50%;animation:blocks-brick-spin 2.4s linear infinite}@keyframes blocks-brick-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.export-bar{margin-top:.9rem;height:8px;border-radius:4px;background:#eee;overflow:hidden}.export-bar-fill{height:100%;background:#0f3460;border-radius:4px;transition:width .15s linear}.export-bar-fill.indeterminate{width:35%;animation:blocks-bar-sweep 1.1s ease-in-out infinite}@keyframes blocks-bar-sweep{0%{margin-left:-35%}to{margin-left:100%}}@media (prefers-reduced-motion: reduce){.export-brick{animation-duration:7s}.export-bar-fill.indeterminate{animation-duration:3s}}.auto-flash{position:absolute;top:10px;left:50%;transform:translate(-50%);z-index:4;background:#00c853eb;color:#fff;font-weight:600;font-size:.85rem;padding:.3rem .8rem;border-radius:14px;box-shadow:0 2px 8px #00000059;animation:blocks-auto-flash .5s ease-out}@keyframes blocks-auto-flash{0%{opacity:0;transform:translate(-50%) translateY(-6px)}25%{opacity:1;transform:translate(-50%) translateY(0)}to{opacity:0}}.live-record-btn{width:104px;height:104px;flex-shrink:0;padding:0;border-radius:50%;border:4px solid #8a8a8a;background:#fff;color:#222;font-size:1.35rem;font-weight:700;letter-spacing:.02em;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:background .15s,border-color .15s,color .15s}.live-record-btn:hover{border-color:#555}.live-record-btn.is-recording{background:#e53935;border-color:#b71c1c;color:#fff;animation:blocks-record-pulse 1.8s ease-in-out infinite}.live-record-btn.is-recording:hover{border-color:#7f1210}@keyframes blocks-record-pulse{0%,to{box-shadow:0 0 #e539358c}50%{box-shadow:0 0 0 12px #e5393500}}@media (prefers-reduced-motion: reduce){.live-record-btn.is-recording{animation:none}}.live-icon-btn[disabled]{opacity:.4;cursor:not-allowed}.live-more-btn{padding:.15rem .6rem;line-height:1;font-size:1.1rem;font-weight:700;border-radius:6px;cursor:pointer}.live-camera-menu{display:flex;flex-direction:column;align-items:flex-start;gap:.25rem;margin-top:.5rem;padding:.5rem .6rem;border:1px solid rgba(128,128,128,.4);border-radius:8px;max-width:320px}.live-camera-option{width:100%;text-align:left;padding:.4rem .6rem;border-radius:6px;cursor:pointer;font-size:.9rem}.live-camera-option.is-current{font-weight:700;border-color:#38f}.live-legend{display:flex;flex-wrap:wrap;gap:.4rem 1rem;margin-top:.6rem;font-size:.8rem;align-items:center}.live-legend .swatch{display:inline-block;width:12px;height:12px;border-radius:3px;vertical-align:-1px;margin-right:.3rem;border:1px solid rgba(0,0,0,.2)}.sidebar-account{margin:1.5rem 0 0;padding:.85rem .8rem .6rem;border-top:1px solid #2c3444}.sidebar.collapsed .sidebar-account{padding:.6rem 0;text-align:center}.sidebar-account-row{display:flex;align-items:center;gap:.55rem;min-width:0}.sidebar.collapsed .sidebar-account-row{justify-content:center}.sidebar-avatar{width:26px;height:26px;border-radius:50%;flex-shrink:0;object-fit:cover}.sidebar-avatar-fallback{display:flex;align-items:center;justify-content:center;background:#24325c;color:#cfe0ff;font-size:.8rem;font-weight:600}.sidebar-account-text{min-width:0}.sidebar-account-name,.sidebar-account-email{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sidebar-account-name{font-size:.8rem;color:#fff}.sidebar-account-email{font-size:.68rem;color:#7f8ea8}.sidebar-account-warning{margin-top:.5rem;padding:.25rem .4rem;border-radius:3px;background:#5c3a10;color:#ffd79a;font-size:.6rem;letter-spacing:.05em;text-align:center}.sidebar-account-button{display:block;width:100%;padding:.15rem .2rem;margin:-.15rem -.2rem;border:1px solid transparent;border-radius:5px;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.sidebar-account-button:hover{background:#24325c}.sidebar-account-button:focus-visible{outline:none;border-color:#4a6ea8}.account-dialog-identity{padding-bottom:.9rem;border-bottom:1px solid #eee}.account-dialog-name{font-weight:600}.account-dialog-email{font-size:.85rem;color:#666}.account-dialog-note,.account-dialog-warning{margin:.9rem 0 0;font-size:.85rem;line-height:1.45}.account-dialog-note{color:#666}.account-dialog-warning{margin-top:0;padding:.7rem .85rem;border-radius:6px;background:#fdecef;color:#8c1f31}.account-dialog-label{display:block;margin:1rem 0 .35rem;font-size:.85rem}.account-dialog-input{width:100%;padding:.45rem .6rem;border:1px solid #ccc;border-radius:5px;font-size:.95rem}.account-dialog-input:focus{outline:none;border-color:#0f3460}.account-dialog-error{margin:.9rem 0 0;font-size:.85rem;color:#c0293f}.recon-progress{padding:1.25rem .5rem}.recon-progress-label{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;margin-bottom:.6rem;color:#888;font-size:.9rem}.recon-progress-step{font-variant-numeric:tabular-nums;color:#aaa}.progress-track{position:relative;overflow:hidden;height:8px;border-radius:4px;background:#7f7f7f2e}.progress-track.is-inner{height:4px;margin-top:.4rem;opacity:.65}.progress-fill{height:100%;border-radius:inherit;background:#4a9eff;transition:width .4s ease}.progress-fill.is-indeterminate{width:35%;transition:none;animation:progress-sweep 1.4s ease-in-out infinite}@keyframes progress-sweep{0%{transform:translate(-100%)}to{transform:translate(286%)}}@media (prefers-reduced-motion: reduce){.progress-fill.is-indeterminate{width:100%;animation:none;opacity:.4}}.debug-3d-stage{position:relative}.debug-editor .canvas-container{height:calc(100vh - 15rem);min-height:480px}.debug-move-pad{position:absolute;right:12px;bottom:12px;display:flex;flex-direction:column;align-items:center;gap:8px;padding:10px;border-radius:10px;background:#12141cd9;border:1px solid rgba(255,255,255,.14);box-shadow:0 4px 14px #00000073;z-index:3}.debug-move-grid{display:grid;grid-template-columns:repeat(3,44px);grid-template-rows:repeat(3,44px);gap:4px}.debug-move-grid>:nth-child(1){grid-area:1 / 2}.debug-move-grid>:nth-child(2){grid-area:2 / 1}.debug-move-grid>:nth-child(3){grid-area:3 / 2}.debug-move-grid>:nth-child(4){grid-area:2 / 3}.debug-move-depth{display:flex;gap:4px}.debug-move-btn{width:44px;height:44px;border:1px solid rgba(255,255,255,.2);border-radius:6px;background:#ffffff14;color:#e8ecf4;font-size:1.25rem;line-height:1;cursor:pointer;-webkit-user-select:none;user-select:none;touch-action:manipulation}.debug-move-btn.is-wide{width:68px;font-size:.85rem}.debug-move-btn:hover:not(:disabled){background:#5896ff52;border-color:#48f}.debug-move-btn:active:not(:disabled){background:#5896ff80}.debug-move-btn:disabled{opacity:.4;cursor:default}.debug-move-notice{position:fixed;left:50%;bottom:32px;transform:translate(-50%);z-index:60;padding:.6rem 1.1rem;border-radius:8px;background:#7f1d1d;color:#fff;font-size:.9rem;box-shadow:0 6px 20px #0000004d;pointer-events:none}.blockify-drop{border:2px dashed #c3cbd8;border-radius:8px;padding:2rem;text-align:center;color:#667;transition:border-color .15s,background .15s}.blockify-drop.over{border-color:#48f;background:#f2f7ff}.blockify-toolbar{display:flex;flex-wrap:wrap;gap:1.25rem 1.75rem;align-items:flex-end}.blockify-export{margin-top:1.5rem;padding-top:1.25rem;border-top:1px solid #eef1f6}.blockify-field{display:flex;flex-direction:column;gap:.4rem;font-size:.8rem;color:#555}.blockify-check{display:flex;align-items:center;gap:.4rem;white-space:nowrap}.blockify-note{flex-basis:100%;margin:0;font-size:.78rem;color:#778}.blockify-views{display:grid;grid-template-columns:1fr 1fr;gap:2px;background:#333;padding:2px;border-radius:8px;margin-top:1.5rem}.blockify-view{position:relative;height:min(58vh,540px);min-height:320px;background:#12141c}.blockify-view canvas{display:block}.blockify-view-label{position:absolute;top:8px;left:10px;z-index:2;padding:2px 8px;border-radius:4px;background:#00000073;color:#cbd5e6;font-size:.7rem;letter-spacing:.05em;text-transform:uppercase;pointer-events:none}.blockify-empty{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;padding:1rem;text-align:center;color:#6b7a95;font-size:.85rem;pointer-events:none}.blockify-stats{display:flex;flex-wrap:wrap;gap:2rem}.blockify-stat{font-size:.78rem;color:#778}.blockify-stat strong{display:block;font-size:1.3rem;color:#222}.blockify-holds{margin-top:1.25rem;font-size:.82rem;color:#667}.blockify-bom{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1.25rem}.blockify-bom-item{display:flex;align-items:center;gap:.4rem;padding:.25rem .6rem;border-radius:4px;background:#f4f6fa;font-size:.8rem;color:#556}.blockify-swatch{width:10px;height:10px;border-radius:2px}@media (max-width: 900px){.blockify-views{grid-template-columns:1fr}}
