:root{--bg:#0a0e1a;--bg-2:#111827;--bg-3:#1a2236;--bg-4:#243049;--border:#1f2a44;--border-2:#2d3a5a;--accent:#7dd3fc;--accent-2:#a5b4fc;--accent-strong:#60a5fa;--danger:#f87171;--warn:#fbbf24;--ok:#34d399;--text:#e6edf6;--text-2:#9aa6bd;--text-3:#4b5871;--serif:"Instrument Serif", Georgia, serif;--mono:"IBM Plex Mono", ui-monospace, monospace}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{font-family:var(--mono);background:var(--bg);color:var(--text);font-size:14px;line-height:1.55;overflow:hidden}button{font-family:inherit;font-size:inherit;cursor:pointer}input,textarea,select{font-family:inherit;font-size:inherit}a{color:inherit;text-decoration:none}.boot{display:grid;place-items:center;height:100%;color:var(--text-2);font-family:var(--serif);font-size:1.4rem}.login{display:grid;place-items:center;height:100%;background:radial-gradient(circle at 30% 30%,rgba(99,102,241,.1),transparent 50%),radial-gradient(circle at 70% 70%,rgba(125,211,252,.08),transparent 55%),var(--bg)}.login-card{width:min(380px,90vw);background:var(--bg-2);border:1px solid var(--border);border-radius:8px;padding:2rem;box-shadow:0 30px 60px -20px #00000080}.login-card h1{font-family:var(--serif);font-weight:400;font-size:1.8rem;margin-bottom:.4rem}.login-card .sub{color:var(--text-2);font-size:.85rem;margin-bottom:1.4rem}.login-card label{display:block;margin-bottom:1rem}.login-card label span{display:block;color:var(--text-2);font-size:.75rem;margin-bottom:.3rem;letter-spacing:.05em}.login-card input{width:100%;background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:.6rem .8rem;color:var(--text);outline:none;transition:.2s}.login-card input:focus{border-color:var(--accent);box-shadow:0 0 0 3px #7dd3fc1f}.btn{display:inline-flex;align-items:center;gap:.5rem;background:var(--accent);color:var(--bg);border:0;border-radius:4px;padding:.65rem 1.1rem;font-weight:500;transition:.2s}.btn:hover{filter:brightness(1.05)}.btn:disabled{opacity:.6;cursor:default}.btn.ghost{background:transparent;color:var(--text);border:1px solid var(--border)}.btn.ghost:hover{border-color:var(--accent);color:var(--accent)}.btn.danger{background:var(--danger);color:#fff}.btn.full{width:100%;justify-content:center}.err{color:var(--danger);font-size:.8rem;margin-bottom:1rem;background:#f871710f;border:1px solid rgba(248,113,113,.2);padding:.5rem .7rem;border-radius:4px}.topbar{display:flex;align-items:center;justify-content:space-between;height:50px;padding:0 1rem;background:var(--bg-2);border-bottom:1px solid var(--border);flex-shrink:0}.topbar .brand{font-family:var(--serif);font-size:1.2rem}.topbar .brand span{color:var(--accent)}.topbar .right{display:flex;align-items:center;gap:.8rem;color:var(--text-2);font-size:.8rem}.topbar .right .user{color:var(--text)}.topbar a.back{display:inline-flex;align-items:center;gap:.3rem;color:var(--text-2)}.topbar a.back:hover{color:var(--accent)}.dashboard{height:100%;display:flex;flex-direction:column}.dashboard .inner{flex:1;overflow:auto;padding:2.5rem 2rem;max-width:1200px;margin:0 auto;width:100%}.dashboard h2{font-family:var(--serif);font-weight:400;font-size:1.8rem;margin-bottom:1.5rem}.dashboard .new-project{display:flex;gap:.6rem;flex-wrap:wrap;margin-bottom:2rem;background:var(--bg-2);border:1px solid var(--border);border-radius:6px;padding:1rem}.dashboard .new-project input{flex:1;min-width:180px;background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:.55rem .8rem;color:var(--text);outline:none}.dashboard .new-project input:focus{border-color:var(--accent)}.project-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem}.project-card{background:var(--bg-2);border:1px solid var(--border);border-radius:6px;padding:1.2rem;display:flex;flex-direction:column;transition:.2s;cursor:pointer;position:relative}.project-card:hover{border-color:var(--accent);background:var(--bg-3)}.project-card h3{font-family:var(--serif);font-weight:400;font-size:1.3rem;margin-bottom:.4rem}.project-card .desc{color:var(--text-2);font-size:.85rem;margin-bottom:1rem;min-height:2.4em;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.project-card .meta{display:flex;justify-content:space-between;color:var(--text-3);font-size:.7rem;letter-spacing:.05em}.project-card .del{position:absolute;top:.6rem;right:.6rem;background:transparent;border:0;color:var(--text-3);padding:.3rem;border-radius:4px;opacity:0;transition:.2s}.project-card:hover .del{opacity:1}.project-card .del:hover{color:var(--danger);background:#f871711a}.empty{text-align:center;color:var(--text-2);padding:3rem 1rem;font-style:italic}.carto{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column}.carto-body{flex:1 1 auto;min-height:0;display:grid;grid-template-columns:64px 1fr 280px;grid-template-rows:100%;height:100%;overflow:hidden}.carto-canvas-wrap{position:relative;background:var(--bg);overflow:hidden;width:100%;height:100%;min-width:0;min-height:0}.carto-canvas-wrap>.konvajs-content{display:block;width:100%;height:100%}.toolbar{background:var(--bg-2);border-right:1px solid var(--border);display:flex;flex-direction:column;gap:.3rem;padding:.5rem .35rem}.toolbar .tool-btn{width:46px;height:46px;background:transparent;border:1px solid transparent;border-radius:6px;color:var(--text-2);display:grid;place-items:center;transition:.15s;position:relative}.toolbar .tool-btn:hover{background:var(--bg-3);color:var(--text)}.toolbar .tool-btn.active{background:var(--bg-4);color:var(--accent);border-color:var(--accent)}.toolbar .tool-btn:hover:after{content:attr(data-label);position:absolute;left:calc(100% + 6px);top:50%;transform:translateY(-50%);background:var(--bg-3);border:1px solid var(--border-2);border-radius:4px;padding:.25rem .5rem;white-space:nowrap;font-size:.7rem;z-index:50;pointer-events:none}.toolbar .sep{height:1px;background:var(--border);margin:.3rem 0}.props{background:var(--bg-2);border-left:1px solid var(--border);overflow-y:auto;padding:1rem;display:flex;flex-direction:column;gap:1rem}.props h3{font-family:var(--serif);font-weight:400;font-size:1.1rem;display:flex;align-items:center;gap:.4rem}.props .section{background:var(--bg-3);border:1px solid var(--border);border-radius:6px;padding:.8rem}.props .section h4{font-size:.7rem;letter-spacing:.08em;color:var(--text-2);text-transform:uppercase;margin-bottom:.6rem;font-weight:600}.field{margin-bottom:.6rem}.field:last-child{margin-bottom:0}.field label{display:block;color:var(--text-2);font-size:.7rem;margin-bottom:.25rem;letter-spacing:.04em}.field input,.field select,.field textarea{width:100%;background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:.45rem .6rem;color:var(--text);outline:none;font-size:.85rem}.field textarea{resize:vertical;min-height:60px}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--accent)}.field-row{display:flex;gap:.4rem}.field-row>*{flex:1}.range-field{display:flex;align-items:center;gap:.6rem}.range-field input[type=range]{flex:1}.range-field .val{color:var(--text-2);font-size:.75rem;min-width:30px;text-align:right}.layers .layer{display:flex;align-items:center;justify-content:space-between;padding:.35rem .5rem;border-radius:4px;font-size:.8rem}.layers .layer:hover{background:var(--bg-4)}.layers .layer .name{display:flex;align-items:center;gap:.4rem;color:var(--text-2)}.layers .layer.on .name{color:var(--text)}.layers .layer button.eye{background:transparent;border:0;color:var(--text-3);padding:0;width:22px;height:22px;display:grid;place-items:center;border-radius:3px}.layers .layer.on button.eye{color:var(--accent)}.carto-actions{display:flex;align-items:center;gap:.4rem;padding:0 1rem;height:50px;background:var(--bg-2);border-bottom:1px solid var(--border);flex-shrink:0}.carto-actions .title{font-family:var(--serif);font-size:1.2rem;margin-right:auto;display:flex;align-items:center;gap:.6rem}.carto-actions .title input{background:transparent;border:0;color:var(--text);font:inherit;outline:none;border-bottom:1px solid transparent;padding:.1rem 0;min-width:200px}.carto-actions .title input:focus,.carto-actions .title input:hover{border-bottom-color:var(--border-2)}.carto-actions .save-state{font-size:.7rem;color:var(--text-3)}.carto-actions .save-state.unsaved{color:var(--warn)}.carto-actions .save-state.saved{color:var(--ok)}.minimap{position:absolute;right:12px;bottom:12px;width:180px;height:135px;background:#0a0e1ad9;border:1px solid var(--border-2);border-radius:4px;overflow:hidden;z-index:10;pointer-events:none}.minimap canvas{width:100%;height:100%}.minimap .viewport{position:absolute;border:2px solid var(--accent);background:#7dd3fc1a;pointer-events:none}.zoomhud{position:absolute;left:12px;bottom:12px;background:#0a0e1ab3;border:1px solid var(--border);border-radius:4px;padding:.3rem .6rem;font-size:.7rem;color:var(--text-2);pointer-events:none}.color-row{display:flex;gap:.3rem;flex-wrap:wrap}.color-swatch{width:24px;height:24px;border-radius:50%;border:2px solid transparent;cursor:pointer;transition:.15s}.color-swatch:hover{transform:scale(1.1)}.color-swatch.active{border-color:#fff;box-shadow:0 0 0 2px var(--bg-3)}.terrain-palette{display:grid;grid-template-columns:repeat(2,1fr);gap:.4rem;margin-top:.5rem}.terrain-palette .swatch{display:flex;align-items:center;gap:.4rem;padding:.4rem .5rem;border:1px solid var(--border);border-radius:4px;background:var(--bg);cursor:pointer;font-size:.75rem;color:var(--text-2);transition:.15s}.terrain-palette .swatch:hover{border-color:var(--border-2);color:var(--text)}.terrain-palette .swatch.active{border-color:var(--accent);color:var(--accent);background:var(--bg-3)}.terrain-palette .swatch .dot{width:16px;height:16px;border-radius:3px;flex-shrink:0}.iconbtn{background:transparent;border:1px solid var(--border);color:var(--text-2);padding:.4rem .6rem;border-radius:4px;display:inline-flex;align-items:center;gap:.4rem;font-size:.75rem;transition:.15s}.iconbtn:hover{border-color:var(--accent);color:var(--accent)}.iconbtn.danger:hover{border-color:var(--danger);color:var(--danger)}.toolbar::-webkit-scrollbar,.props::-webkit-scrollbar,.dashboard .inner::-webkit-scrollbar{width:8px}.toolbar::-webkit-scrollbar-thumb,.props::-webkit-scrollbar-thumb,.dashboard .inner::-webkit-scrollbar-thumb{background:var(--border-2);border-radius:4px}.toolbar::-webkit-scrollbar-track,.props::-webkit-scrollbar-track,.dashboard .inner::-webkit-scrollbar-track{background:transparent}
