:root{--bg-deep:#0a1420;--bg-panel:#0f1c2b;--bg-panel-2:#132437;--grid-line:#1f3b56;--grid-line-strong:#2c5578;--cyan:#52cdfa;--amber:#ffb454;--text-primary:#e7f1f8;--text-muted:#7d95ab;--border:#1c3448}*{box-sizing:border-box}html,body{background:radial-gradient(1200px 600px at 15% -10%, #12263a 0%, transparent 60%), radial-gradient(900px 500px at 110% 10%, #0f2233 0%, transparent 55%), var(--bg-deep);height:100%;color:var(--text-primary);margin:0;padding:0;font-family:Segoe UI,system-ui,-apple-system,sans-serif;overflow:hidden}[hidden]{display:none!important}.app{flex-direction:column;width:100vw;height:100vh;display:flex}header{border-bottom:1px solid var(--border);flex-shrink:0;align-items:baseline;gap:12px;padding:14px 20px 10px;display:flex}header .eyebrow{letter-spacing:.16em;text-transform:uppercase;color:var(--cyan);font-size:11px;font-weight:600}header h1{letter-spacing:.1em;margin:0;font-size:11px;font-weight:500}header .sub{color:var(--text-muted);margin-left:auto;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px;display:block}.save-status{align-items:center;gap:.4rem;min-height:1.8rem;font-size:.78rem;display:inline-flex}.save-status-retry,.save-status-export{font-size:.72rem}.save-status[data-phase=save-error]{color:#ff9a9a}.save-decision-modal{z-index:20;background:#000000a6;place-content:center;gap:.8rem;padding:2rem;display:grid;position:fixed;inset:0}.save-decision-modal>*{margin:0}.save-decision-modal>div{flex-wrap:wrap;gap:.5rem;display:flex}.main{flex:1;min-height:0;display:flex}.panel-left{background:var(--bg-panel);flex-direction:column;flex:none;width:min(46vw,420px);min-width:0;display:flex;overflow-y:auto}.split-divider{background:var(--border);cursor:col-resize;touch-action:none;-webkit-user-select:none;user-select:none;flex:0 0 10px;width:10px;position:relative}.split-divider:after{content:"";background:repeating-linear-gradient(to bottom, transparent 0 5px, var(--text-muted) 5px 7px, transparent 7px 12px);opacity:.55;position:absolute;inset:0 3px}.main.is-full-2d .split-divider{display:none}.main.is-full-2d .panel-left{flex:auto;width:100%!important}.main.is-full-2d .panel-right{z-index:5;pointer-events:none;background:0 0;display:block;position:absolute;inset:0}.panel-right{background:#081019;flex:1;min-width:0;position:relative}.toolbar{border-bottom:1px solid var(--border);background:var(--bg-panel-2);flex-wrap:wrap;flex-shrink:0;gap:10px 16px;padding:12px 16px;display:flex}.field{flex-direction:column;gap:3px;display:flex}.field label{text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted);font-size:10px;font-weight:600}.field input[type=number],.field select{border:1px solid var(--border);width:64px;color:var(--text-primary);background:#0c1826;border-radius:5px;padding:5px 6px;font-family:ui-monospace,Consolas,monospace;font-size:12px}.field input[type=range]{width:100px;accent-color:var(--cyan)}.btn{border:1px solid var(--grid-line-strong);color:var(--text-primary);cursor:pointer;letter-spacing:.01em;background:#123049;border-radius:6px;padding:7px 12px;font-size:12px;font-weight:600;transition:background .15s,border-color .15s}.btn:hover{border-color:var(--cyan);background:#184066}.btn.primary{border-color:var(--cyan);color:#eafcff;background:#1d5b82}.btn.primary:hover{background:#237299}.btn.warn{border-color:#7a4a2a}.btn.warn:hover{border-color:var(--amber);background:#3a2313}.legend-row{flex-shrink:0;align-items:center;gap:10px;padding:0 18px 18px;display:flex}#legendbar{border:1px solid var(--grid-line-strong);border-radius:5px;flex:1;height:10px}.legend-row span{color:var(--text-muted);font-family:ui-monospace,Consolas,monospace;font-size:11px}.info-strip{border-top:1px solid var(--border);background:var(--bg-panel-2);flex-wrap:wrap;flex-shrink:0;justify-content:center;gap:20px;padding:8px 20px;display:flex}.info-strip .stat{color:var(--text-muted);font-size:11px}.info-strip .stat b{color:var(--text-primary);font-family:ui-monospace,Consolas,monospace;font-size:14px;font-weight:600;display:block}.help{color:var(--text-muted);border-top:1px solid var(--border);flex-shrink:0;padding:10px 16px 14px;font-size:11.5px;line-height:1.6}.help b{color:var(--text-primary)}.help .key{border:1px solid var(--grid-line-strong);color:var(--cyan);background:#0c1826;border-radius:4px;padding:1px 6px;font-family:ui-monospace,Consolas,monospace;font-size:11px;display:inline-block}.viewport-hint{color:var(--text-muted);border:1px solid var(--border);pointer-events:none;background:#0a14208c;border-radius:6px;padding:6px 10px;font-family:ui-monospace,Consolas,monospace;font-size:11px;position:absolute;top:14px;left:16px}.viewport-controls{gap:8px;display:flex;position:absolute;top:14px;right:16px}#jsonFileInput,#imageFileInput{display:none}.toast{border:1px solid var(--cyan);color:var(--text-primary);opacity:0;pointer-events:none;z-index:1000;background:#123049;border-radius:8px;padding:10px 18px;font-size:13px;font-weight:600;transition:opacity .25s;position:fixed;bottom:20px;left:50%;transform:translate(-50%);box-shadow:0 4px 16px #0006}.toast.show{opacity:1}dialog{border:1px solid var(--grid-line-strong);background:var(--bg-panel);max-width:min(520px,100vw - 32px);color:var(--text-primary);border-radius:8px;padding:0;box-shadow:0 20px 60px #0009}dialog::backdrop{background:#0009}.credits-content{padding:24px;line-height:1.55}.credits-content h2{color:var(--cyan);margin:0 0 12px}.credits-content a{color:var(--cyan)}.credits-content .btn{margin-top:8px}.stage-navigation{border-bottom:1px solid var(--border);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:6px 12px;padding:8px 16px;display:flex}.stage-navigation-controls{align-items:center;gap:6px;display:flex}.stage-navigation-readout{text-align:center;min-width:5ch;color:var(--text-primary);font:12px ui-monospace,Consolas,monospace}.stage-navigation-hint{color:var(--text-muted);font-size:11px}.stage-navigation-button:disabled{opacity:.45;cursor:default}.stage-navigation-button:focus-visible{outline:2px solid var(--cyan);outline-offset:2px}.canvas-wrap{flex:1;justify-content:center;align-items:center;min-height:0;padding:24px;display:flex}#grid2d{border:1px solid var(--grid-line-strong);cursor:crosshair;touch-action:none;background:#0c1826;border-radius:8px}#grid2d.is-pan-ready{cursor:grab}#grid2d.is-pan-active{cursor:grabbing;-webkit-user-select:none;user-select:none}#canvas3d{width:100%;height:100%;display:block}.terrain-3d-inset{border:1px solid var(--border);box-sizing:border-box;pointer-events:auto;background:#081019;flex-direction:column;width:100%;min-width:0;height:100%;min-height:0;display:flex;position:relative;overflow:hidden}.main.is-full-2d .terrain-3d-inset{pointer-events:auto;position:absolute;box-shadow:0 12px 32px #00000059}.terrain-3d-inset-header{background:var(--bg-panel-2);border-bottom:1px solid var(--border);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;flex:0 0 36px;justify-content:space-between;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.terrain-3d-inset-header:active{cursor:grabbing}.terrain-3d-inset-actions{gap:4px;display:flex}.terrain-3d-inset-actions .btn{padding:4px 7px;font-size:10px}.terrain-3d-inset-content{flex:auto;min-height:0;position:relative}.terrain-3d-inset.is-collapsed .terrain-3d-inset-content,.terrain-3d-inset.is-collapsed .terrain-3d-inset-resize{display:none}.terrain-3d-inset-resize{width:18px;height:18px;color:var(--text-muted);cursor:nwse-resize;touch-action:none;background:0 0;border:0;padding:0;position:absolute;bottom:0;right:0}.row-btns{align-items:flex-end;gap:8px;display:flex}.btn.active{border-color:var(--cyan);color:#eafcff;background:#1d5b82}.export-toolbar{border-top:1px solid var(--border);border-bottom:none;justify-items:center}.project-dialog{background:var(--bg-panel);color:var(--text-primary);border:1px solid var(--border);border-radius:12px;width:100%;max-width:min(92vw,34rem);padding:1.5rem;box-shadow:0 1rem 4rem #0008}.project-dialog::backdrop{background:#02070dcc}.project-dialog form{gap:.8rem;display:grid}.project-dialog h2{color:var(--cyan);margin:0 0 .4rem}.project-dialog label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;gap:.25rem;font-size:11px;display:grid}.project-dialog input,.project-dialog button{font:inherit}.project-dialog input{background:var(--bg-panel-2);color:var(--text-primary);border:1px solid var(--border);text-transform:none;letter-spacing:normal;border-radius:5px;padding:.45rem}.project-dialog fieldset{border:1px solid var(--border);gap:.4rem;display:grid}.project-dialog fieldset label{align-items:center;display:flex}.project-dialog .dialog-dimensions{grid-template-columns:1fr 1fr;gap:.8rem;display:grid}.project-dialog menu{justify-content:flex-end;gap:.6rem;margin:0;padding:0;display:flex}.project-dialog .dialog-error{color:var(--amber);min-height:1.2em}.project-dialog .source-ratio,.project-dialog .sample-range{color:var(--cyan);min-height:1.2em}@media (width<=520px){.project-dialog{padding:1rem}.project-dialog .dialog-dimensions{grid-template-columns:1fr}}.project-library{background:radial-gradient(1000px 500px at 15% 0%, #12263a, transparent 65%), var(--bg-deep);min-height:100vh;color:var(--text-primary);overflow:auto}.library-inner{width:min(1120px,100%);margin:auto;padding:32px clamp(18px,4vw,52px) 64px}.library-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:end;gap:24px;padding-bottom:28px;display:flex}.library-eyebrow{color:var(--cyan);letter-spacing:.16em;margin:0 0 8px;font-size:11px}.library-header h1{margin:0;font-size:clamp(30px,5vw,52px);font-weight:500}.library-subtitle{color:var(--text-muted);margin:8px 0 0}.library-toolbar{flex-wrap:wrap;align-items:center;gap:10px 12px;padding:22px 0;display:flex}.library-toolbar label{color:var(--text-muted);font-size:13px}.library-toolbar input,.library-toolbar select{background:var(--bg-panel);border:1px solid var(--border);color:var(--text-primary);border-radius:4px;padding:9px 10px}.library-toolbar input{min-width:min(300px,70vw)}.library-storage{color:var(--text-muted);margin-left:auto;font-size:13px}.library-warning{border:1px solid var(--amber);color:#ffd597;background:#382a18;margin-bottom:18px;padding:12px 14px}.library-warning button{margin-left:12px}.library-recovery{border:1px solid var(--grid-line-strong);background:var(--bg-panel-2);margin-bottom:18px;padding:12px 14px}.library-recovery button{border:1px solid var(--border);color:var(--text-primary);background:#172b40;border-radius:4px;margin-left:8px;padding:6px 9px}.project-grid{grid-template-columns:repeat(auto-fit,minmax(270px,1fr));gap:16px;display:grid}.project-card{border:1px solid var(--border);background:#0f1c2beb;border-radius:6px;overflow:hidden;box-shadow:0 10px 30px #0003}.project-card.is-active{border-color:var(--cyan)}.project-card.is-trashed{opacity:.78}.project-card-preview{background:linear-gradient(135deg,#153d55,#132437 48%,#274c45);height:116px;position:relative;overflow:hidden}.project-card-preview:after{content:"";background:repeating-linear-gradient(165deg,#0000 0 12px,#52cdfa33 13px 14px);position:absolute;inset:35% -10% -30%;transform:rotate(-6deg)}.project-card-preview img{object-fit:cover;z-index:1;width:100%;height:100%;position:relative}.project-card-body{padding:14px}.project-card-heading{justify-content:space-between;align-items:center;gap:8px;display:flex}.project-card h3{text-overflow:ellipsis;white-space:nowrap;margin:0;font-weight:500;overflow:hidden}.project-card-active{color:var(--cyan);text-transform:uppercase;letter-spacing:.08em;font-size:11px}.project-card-meta,.project-card-size{color:var(--text-muted);margin:8px 0 0;font-size:12px}.project-card-actions{flex-wrap:wrap;gap:7px;margin-top:15px;display:flex}.project-card-actions button,.library-header button,.library-empty button{border:1px solid var(--border);color:var(--text-primary);cursor:pointer;background:#172b40;border-radius:4px;padding:8px 10px}.project-card-actions button.primary,.library-header .primary,.library-empty .primary{background:var(--cyan);color:#081019;border-color:var(--cyan);font-weight:600}.library-empty{text-align:center;color:var(--text-muted);padding:70px 20px}.library-empty h2{color:var(--text-primary);font-weight:500}@media (width<=600px){.library-header{flex-direction:column;align-items:start}.library-header button{width:100%}.library-storage{width:100%;margin-left:0}}
