:root{--bg: #12151d;--bg-raised: #1c2029;--border: #2c3140;--text: #f2f4f8;--text-dim: #9aa3b2;--accent: #f5cd2f;--accent-text: #1b2a34;--cell-empty: #232836}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;-webkit-font-smoothing:antialiased}#root{min-height:100dvh}h1,h2,h3{margin:0;font-weight:800;letter-spacing:-.02em}.screen{max-width:480px;margin:0 auto;min-height:100dvh;padding:24px 20px 40px;display:flex;flex-direction:column;gap:20px}.screen-header{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:56px}.back-link{color:var(--text-dim);text-decoration:none;font-weight:700}.hint{margin:0;color:var(--text-dim);font-size:.95rem}.note{margin:0;color:var(--text-dim);font-size:.85rem;font-style:italic;text-align:center}.btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid var(--border);background:var(--bg-raised);color:var(--text);font:inherit;font-weight:700;padding:12px 20px;border-radius:12px;cursor:pointer;text-align:center;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;gap:8px;transition:transform .06s ease,filter .12s ease}.btn:active:not(:disabled){transform:scale(.97)}.btn:hover:not(:disabled){filter:brightness(1.12)}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-text)}.btn.big{padding:16px 28px;font-size:1.15rem;width:100%}.btn.ghost{background:transparent}.btn:disabled{opacity:.45;cursor:default}.button-row{display:flex;gap:12px;margin-top:auto}.button-row .btn{flex:1}.soon{font-size:.7em;background:var(--border);color:var(--text-dim);padding:2px 8px;border-radius:999px;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.title-screen{justify-content:center;align-items:center;text-align:center;gap:16px;background-image:radial-gradient(circle at 14px 14px,rgba(255,255,255,.045) 8px,rgba(255,255,255,.02) 9px,transparent 10px);background-size:44px 44px}.title-progress{margin:-8px 0 0;color:var(--text-dim);font-size:.9rem;font-weight:700;font-variant-numeric:tabular-nums}.logo{font-size:3.2rem;font-weight:900;line-height:1.05}.logo span{color:var(--accent);display:block}.tagline{color:var(--text-dim);margin:0 0 24px;max-width:280px}.title-buttons{display:flex;flex-direction:column;gap:12px;width:100%;max-width:300px}.grid-view{display:grid;gap:3px;width:100%;padding:8px;border-radius:12px;background:var(--bg-raised);border:1px solid var(--border)}.grid-view.mini{gap:1px;padding:4px;border-radius:8px}.grid-view.dense{gap:2px;padding:6px}.grid-view.dense .grid-cell{border-radius:14%}.grid-view.dense.mini{gap:1px;padding:4px}.grid-cell{position:relative;aspect-ratio:1;border-radius:18%;background:var(--cell-empty);display:flex;align-items:center;justify-content:center}.stud{width:46%;height:46%;border-radius:50%;background:#ffffff2e;box-shadow:inset 0 0 0 1px #0000002e,inset 0 -1px 2px #0003}.grid-view.mini .stud{display:none}.diff-mark{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;pointer-events:none}.grid-frame{width:100%}.grid-frame.peeking{outline:3px solid var(--accent);outline-offset:4px;border-radius:12px}.level-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:14px}.level-card{display:flex;flex-direction:column;align-items:center;gap:8px;background:var(--bg-raised);border:1px solid var(--border);border-radius:16px;padding:14px;text-decoration:none;color:inherit;transition:transform .08s ease,border-color .12s ease}.level-card:hover:not(.disabled){transform:translateY(-2px);border-color:var(--accent)}.level-card.disabled{cursor:default}.level-preview{position:relative;width:100%}.level-preview.locked .grid-view{filter:grayscale(1) brightness(.55)}.lock{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:1.8rem}.level-card-name{font-weight:800}.level-card-meta{color:var(--text-dim);font-size:.75rem;font-variant-numeric:tabular-nums;text-align:center}.play-screen h2{font-size:1.5rem}.timer-display{font-size:1.6rem;font-weight:800;font-variant-numeric:tabular-nums;background:var(--bg-raised);border:1px solid var(--border);border-radius:10px;padding:6px 14px}.countdown{position:relative;width:56px;height:56px;flex-shrink:0}.countdown-ring{width:100%;height:100%;transform:rotate(-90deg)}.countdown-ring circle{fill:none;stroke-width:5}.ring-track{stroke:var(--border)}.ring-progress{stroke:var(--accent);stroke-linecap:round;transition:stroke-dashoffset .1s linear}.countdown-num{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-weight:800;font-variant-numeric:tabular-nums}.build-placeholder{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;text-align:center;border:2px dashed var(--border);border-radius:16px;padding:32px 20px;font-size:1.1rem}.build-placeholder p{margin:0}.scan-mock{display:flex;flex-direction:column;gap:12px}.star-rating{font-size:1.9rem;letter-spacing:.1em;line-height:1}.star{color:var(--border)}.star.earned{color:var(--accent)}.diff-legend{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px 16px;font-size:.85rem;color:var(--text-dim)}.diff-legend li{display:flex;align-items:center;gap:6px}.dot{width:10px;height:10px;border-radius:50%;display:inline-block}.score-panel{background:var(--bg-raised);border:1px solid var(--border);border-radius:16px;padding:14px 18px;display:flex;flex-direction:column;gap:8px}.score-row{display:flex;justify-content:space-between;color:var(--text-dim);font-variant-numeric:tabular-nums}.score-row.total{color:var(--text);font-weight:800;font-size:1.15rem;border-top:1px solid var(--border);padding-top:10px;margin-top:4px}.title-footer{margin-top:24px}.footer-link{color:var(--text-dim);font-size:.9rem;text-decoration:underline}.mat-print-screen{max-width:640px}.mat-instructions ol{margin:8px 0 16px;padding-left:20px;color:var(--text-dim);display:flex;flex-direction:column;gap:6px}.mat-sheet-frame{background:#fff;border:1px solid var(--border);border-radius:12px;padding:8px}.mat-sheet{display:block;width:100%;height:auto}.debug-screen{max-width:720px}.debug-controls{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.debug-grid-size select{background:var(--bg-raised);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:6px 8px;font:inherit}.debug-overlay-wrap{background:var(--bg-raised);border:1px solid var(--border);border-radius:12px;overflow:hidden}.debug-canvas{display:block;width:100%;height:auto}.debug-panel{display:flex;flex-direction:column;gap:10px}.debug-metrics{list-style:none;margin:0;padding:10px 14px;background:var(--bg-raised);border:1px solid var(--border);border-radius:10px;font-variant-numeric:tabular-nums;color:var(--text-dim);display:flex;flex-wrap:wrap;gap:4px 18px}.debug-error{color:#ff7a6e;margin:0;font-weight:700}.live-scanner{position:relative;flex:1;min-height:55dvh;border-radius:16px;overflow:hidden;background:#000;border:1px solid var(--border)}.live-video{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover}.live-overlay{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none}.live-fallback{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;text-align:center;padding:24px;background:#12151de0}.live-fallback p{margin:0;max-width:320px;color:var(--text-dim)}.live-hud{position:absolute;left:0;right:0;bottom:0;display:flex;flex-direction:column;align-items:center;gap:10px;padding:40px 16px 16px;background:linear-gradient(transparent,#000000b3)}.live-status{margin:0;font-weight:700;text-align:center;text-shadow:0 1px 3px rgba(0,0,0,.8)}.tilt-row{display:flex;align-items:center;gap:10px;width:70%;max-width:260px}.tilt-meter{position:relative;flex:1;height:8px;border-radius:999px;background:#ffffff40}.tilt-fill{position:absolute;left:0;top:0;bottom:0;border-radius:inherit;background:#2ea84f;transition:width .15s linear}.tilt-meter.over .tilt-fill{background:#f0483e}.tilt-gate{position:absolute;top:-3px;bottom:-3px;width:2px;background:#ffffffd9}.tilt-label{font-size:.85rem;font-weight:700;font-variant-numeric:tabular-nums;min-width:32px;text-align:right;text-shadow:0 1px 3px rgba(0,0,0,.8)}.shutter{width:64px;height:64px;border-radius:50%;border:4px solid #fff;background:#ffffff40;padding:0;cursor:pointer;transition:transform .06s ease,background .12s ease;touch-action:manipulation;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.shutter:not(:disabled){background:var(--accent)}.shutter:disabled{opacity:.45;cursor:default}.shutter:active:not(:disabled){transform:scale(.92)}.scan-phase .hint{text-align:center}.demo-scan-panel{background:var(--bg-raised);border:1px solid var(--border);border-radius:16px;padding:14px 18px;display:flex;flex-direction:column;gap:12px}.demo-scan-panel .button-row{margin-top:0}.demo-scan-title{margin:0;font-weight:800;text-align:center}.cal-swatches{list-style:none;margin:0;padding:12px 16px;background:var(--bg-raised);border:1px solid var(--border);border-radius:16px;display:flex;flex-direction:column;gap:8px}.cal-swatches li{display:grid;grid-template-columns:44px 44px 1fr;gap:12px;align-items:center}.cal-swatches .cal-head{color:var(--text-dim);font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;font-weight:700}.swatch{display:block;height:26px;border-radius:8px;border:1px solid rgba(255,255,255,.15)}.footer-links{display:flex;align-items:center;gap:10px;color:var(--text-dim);font-size:.9rem}.confidence-heatmap{display:grid;gap:1px;padding:4px;background:var(--bg-raised);border:1px solid var(--border);border-radius:8px}.heat-cell{aspect-ratio:1;border-radius:2px}@media(max-width:380px){.screen{padding:20px 14px 32px;gap:16px}.logo{font-size:2.7rem}.timer-display{font-size:1.3rem;padding:5px 10px}.play-screen h2{font-size:1.3rem}.btn{padding:11px 14px}.btn.big{padding:14px 20px;font-size:1.05rem}}.tab-row{display:flex;gap:8px}.tab{flex:1;padding:10px 14px;border-radius:10px;border:1px solid var(--border);background:var(--bg-raised);color:var(--text-dim);font-weight:700;cursor:pointer}.tab.active{color:var(--text);border-color:var(--accent)}.editor-screen{gap:14px}.editor-name{flex:1;min-width:0;padding:8px 10px;border-radius:8px;border:1px solid var(--border);background:var(--bg-raised);color:var(--text);font-size:1.05rem;font-weight:700}.save-state{font-size:.8rem;color:var(--text-dim);white-space:nowrap}.save-state.saved{color:#2ea84f}.editor-canvas{touch-action:none;cursor:crosshair;-webkit-user-select:none;user-select:none}.palette-picker{display:grid;grid-template-columns:repeat(10,1fr);gap:6px}.palette-picker .swatch{height:34px;cursor:pointer;border-width:2px;border-color:transparent;outline:1px solid rgba(255,255,255,.15)}.palette-picker .swatch.active{border-color:#fff;outline-color:var(--accent)}.button-row.compact{gap:6px;flex-wrap:wrap}.button-row.compact .btn{flex:0 1 auto}.btn.small{padding:8px 12px;font-size:.85rem}.btn.active{border-color:var(--accent);color:var(--text)}.editor-size label{display:flex;align-items:center;gap:6px;color:var(--text-dim);font-size:.9rem}.editor-size select{padding:6px 8px;border-radius:8px;border:1px solid var(--border);background:var(--bg-raised);color:var(--text)}.inventory-meter{display:flex;flex-wrap:wrap;gap:6px}.inventory-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;border:1px solid var(--border);background:var(--bg-raised);font-size:.85rem;color:var(--text-dim)}.inventory-chip .dot{width:12px;height:12px;border-radius:50%}.inventory-chip.warn{border-color:#f5cd2f;color:#f5cd2f}.screen{padding-top:calc(24px + env(safe-area-inset-top,0px));padding-bottom:calc(40px + env(safe-area-inset-bottom,0px));padding-left:calc(20px + env(safe-area-inset-left,0px));padding-right:calc(20px + env(safe-area-inset-right,0px))}.live-hud{padding-bottom:calc(14px + env(safe-area-inset-bottom,0px))}.photo-fallback{display:inline-block;cursor:pointer;text-align:center}.auth-buttons{display:flex;flex-direction:column;gap:10px}.auth-error{color:#f0483e;font-size:.9rem}.btn.danger{color:#f0483e;border-color:#f0483e}.privacy-body{display:flex;flex-direction:column;gap:14px;color:var(--text-dim);line-height:1.55}.privacy-body strong{color:var(--text)}.header-actions{display:flex;align-items:center;gap:10px}.editor-canvas-wrap{position:relative}.editor-canvas{touch-action:none}.brick-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;border-color:transparent;pointer-events:none}.placed-brick,.ghost-brick{display:flex;align-items:center;justify-content:space-around;border-radius:18%/50%;box-shadow:inset 0 -2px 3px #00000047,inset 0 1px 2px #ffffff47,0 1px 3px #00000059}.placed-brick.vertical,.ghost-brick.vertical{flex-direction:column;border-radius:50%/18%}.placed-brick .stud,.ghost-brick .stud{height:46%;width:auto;aspect-ratio:1;flex:0 0 auto}.placed-brick.vertical .stud,.ghost-brick.vertical .stud{width:46%;height:auto}.ghost-brick{opacity:.65;outline:3px dashed rgba(255,255,255,.85);outline-offset:-2px}.ghost-brick.invalid{opacity:.45;outline-color:#f0483e;filter:grayscale(.6)}.brick-tray{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px;border-radius:12px;background:var(--bg-raised);border:1px solid var(--border)}.tray-brick{display:flex;flex-direction:column;align-items:center;gap:3px;padding:6px;border:none;border-radius:8px;background:transparent;cursor:grab;touch-action:none}.tray-brick:active{cursor:grabbing}.tray-brick.empty{opacity:.35;cursor:not-allowed}.tray-brick-shape{display:flex;align-items:center;justify-content:space-around;height:18px;border-radius:5px;box-shadow:inset 0 -2px 2px #00000040,inset 0 1px 1px #ffffff40}.tray-stud{width:8px;height:8px;margin:0 3px;border-radius:50%;background:#ffffff47;box-shadow:inset 0 0 0 1px #00000026}.tray-count{font-size:12px;font-weight:700;color:var(--text-dim)}.tray-rotate{margin-left:auto}.tray-hint{margin:4px 0 0}.brickless-builder{display:flex;flex-direction:column;gap:10px}.brick-pile{position:relative;min-height:180px;border-radius:12px;background:var(--bg-raised);border:1px solid var(--border);overflow:hidden}.pile-brick{position:absolute;padding:4px;border:none;background:transparent;cursor:grab;touch-action:none}.pile-brick:active{cursor:grabbing}.pile-helpers{align-items:center}.audit-board{display:flex;flex-direction:column;gap:10px}.audit-row{display:flex;flex-direction:column;gap:6px;padding:10px;border-radius:12px;background:var(--bg-raised);border:1px solid var(--border)}.audit-color{display:flex;align-items:center;gap:8px;font-weight:700}.audit-slots{display:flex;flex-wrap:wrap;gap:8px}.audit-slot{display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 8px;border-radius:8px;border:1px solid transparent}.audit-slot.short{border-color:#f0483e;background:#f0483e14}.audit-size{font-size:12px;color:var(--text-dim);font-weight:700}.audit-stepper{display:flex;align-items:center;gap:6px}.audit-count{min-width:34px;text-align:center;font-variant-numeric:tabular-nums}.missing-report{padding:12px;border-radius:12px;background:var(--bg-raised);border:1px solid var(--border)}.missing-report h3{margin:0 0 8px}.missing-badge{font-size:12px;font-weight:700;color:#f0a83e}.pack-section{margin-top:18px}.pack-header{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}.pack-header h3{margin:0;display:flex;align-items:center;gap:8px}.pack-tag{font-size:12px;font-weight:700;color:var(--text-dim)}.pack-tag.promo{color:#2ea84f}.purchases-section{margin-top:18px;padding:12px;border-radius:12px;background:var(--bg-raised);border:1px solid var(--border)}.purchases-section h3{margin:0 0 6px}
