:root{--bg: #0f1419;--panel: #1a2332;--border: #2d3a4f;--text: #e7ecf3;--muted: #8b9cb3;--accent: #539bf5;--danger: #e35555;--btn-primary-bg: #1e3a5f;--btn-danger-bg: #3d1f1f;--input-bg: #0a0e14;color:var(--text);background:var(--bg);font-family:Segoe UI,system-ui,sans-serif;font-size:14px;color-scheme:dark}*{box-sizing:border-box}html,body,#root{margin:0;height:100%}button,input,select{font:inherit;color:inherit}.app{height:100%;display:grid;grid-template-columns:168px 1fr 280px;grid-template-rows:auto 1fr}.topbar{grid-column:1 / -1;display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--panel);color:var(--text);border-bottom:1px solid var(--border)}.brand{display:flex;align-items:center;gap:.85rem;margin-right:auto;min-width:0;font-size:16px}.top-logo{display:block;height:2.25em;width:auto;flex-shrink:0;filter:brightness(0) invert(1)}.brand h1{margin:0;font-family:Segoe UI,system-ui,sans-serif;font-size:1.5em;font-weight:600;line-height:1.2}.topbar .map-name{margin:.2em 0 0;color:var(--muted);font-size:.9em}.topbar button,.file-button{background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:6px 10px;cursor:pointer}.topbar button:hover:not(:disabled),.file-button:hover{border-color:var(--accent)}.topbar button.primary{background:var(--btn-primary-bg);border-color:var(--accent);color:var(--text)}.topbar button:disabled{opacity:.5;cursor:not-allowed}.file-button input{display:none}.tools{grid-row:2;display:flex;flex-direction:column;gap:4px;padding:10px;background:var(--bg);border-right:1px solid var(--border);overflow:auto}.tool{text-align:left;background:transparent;color:var(--muted);border:1px solid transparent;border-radius:6px;padding:8px 10px;cursor:pointer}.tool:hover{color:var(--text);border-color:var(--border)}.tool.active{color:var(--accent);background:#539bf51f;border-color:var(--accent)}.stage{position:relative;min-width:0;min-height:0;background:var(--bg)}.stage,.stage svg,.stage svg text{user-select:none;-webkit-user-select:none}.stage svg{position:relative;z-index:1;display:block;width:100%;height:100%;touch-action:none;cursor:crosshair}.stage.selecting svg{cursor:default}.map-layer{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;pointer-events:none;z-index:0}.map-rotator{position:absolute}.map-canvas{width:100%;height:100%}.map-note{position:absolute;left:12px;top:12px;margin:0;max-width:28rem;padding:8px 10px;background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:6px}.status{position:absolute;left:12px;right:12px;bottom:10px;margin:0;padding:6px 10px;background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:6px;pointer-events:none}.inspector{min-width:0;overflow:auto;padding:12px 14px 24px;background:var(--panel);border-left:1px solid var(--border);color:var(--text)}.inspector h2{margin:0 0 8px;font-size:13px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}.inspector section{padding-bottom:14px;margin-bottom:14px;border-bottom:1px solid var(--border)}.inspector label{display:flex;flex-direction:column;gap:4px;margin:8px 0;font-size:12px}.inspector label.check{flex-direction:row;align-items:center;gap:8px}.inspector input,.inspector select,dialog.modal input,dialog.modal select{border:1px solid var(--border);background:var(--input-bg);color:var(--text);border-radius:6px;padding:6px 8px}.inspector select:disabled,dialog.modal select:disabled{opacity:.5}.inspector .pair{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px}.inspector .pair>label{min-width:0}.inspector .pair input{width:100%;min-width:0;max-width:100%}.inspector .row{display:flex;flex-wrap:wrap;gap:8px}.inspector .row button{flex:1 1 8rem}.depth-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}.depth-row button{display:flex;align-items:center;justify-content:center;padding:7px 0}.depth-row svg{display:block}.inspector input[type=color],dialog.modal input[type=color]{width:100%;height:32px;padding:2px}.inspector .aspects{display:flex;flex-wrap:wrap;gap:6px}.inspector .aspects button{flex:1}.inspector .aspects button.active{background:var(--btn-primary-bg);border-color:var(--accent);color:var(--text)}.inspector button,.inspector .row button,dialog.modal button{margin-top:8px;border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:6px;padding:6px 8px;cursor:pointer}.inspector button:hover:not(:disabled),dialog.modal button:hover:not(:disabled){border-color:var(--accent)}.inspector button:disabled,dialog.modal button:disabled{opacity:.5;cursor:not-allowed}.inspector button.danger,dialog.modal button.danger{background:var(--btn-danger-bg);border-color:var(--danger)}.map-settings{padding-bottom:14px;margin-bottom:14px;border-bottom:1px solid var(--border)}.map-settings summary{cursor:pointer;list-style:none;font-size:13px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}.map-settings summary::-webkit-details-marker{display:none}.map-settings summary:before{content:"▸  "}.map-settings[open] summary:before{content:"▾  "}.map-settings button{display:block;width:100%;text-align:left}dialog.modal{border:1px solid var(--border);border-radius:10px;padding:0;margin:auto;max-width:min(28rem,calc(100vw - 2rem));max-height:calc(100vh - 2rem);width:100%;background:var(--panel);color:var(--text);overflow:hidden}dialog.modal.wide{max-width:min(42rem,calc(100vw - 2rem))}dialog.modal::backdrop{background:#000000a6}.modal-inner{padding:1rem;max-height:calc(100vh - 2rem);overflow-y:auto}.modal-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-bottom:.75rem}.modal-head h3{margin:0;font-size:1rem;font-weight:600}.modal-close{flex-shrink:0;min-width:2rem;margin-top:0;padding:.25rem .5rem;line-height:1;font-size:1.25rem}.legend-list{max-height:420px;overflow:auto;margin-top:8px;padding:4px 8px;background:var(--input-bg);border:1px solid var(--border);border-radius:6px}.legend-group{margin:10px 0 2px;color:var(--muted);font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.legend-row{display:grid;grid-template-columns:auto auto 1fr auto;gap:8px;align-items:center;margin:6px 0;border-radius:4px}.legend-row.site{grid-template-columns:auto auto 1fr auto auto auto}.legend-row.drop-target{background:#539bf51f;outline:1px dashed var(--accent)}.legend-swatch{width:36px;height:24px;padding:0}.legend-swatch:disabled{opacity:.35}.legend-grip{width:10px;height:16px;cursor:grab;background:radial-gradient(circle,var(--muted) 1.1px,transparent 1.3px) 0 0 / 5px 5px}.legend-grip:active{cursor:grabbing}.legend-row input[type=checkbox]{width:auto;margin:0;padding:0}.legend-row input[type=text]{width:100%}.legend-used{color:var(--muted);font-size:11px}.note{margin:6px 0;color:var(--muted);font-size:12px;line-height:1.4}.preview{position:fixed;top:0;right:0;bottom:0;left:0;grid-row:1;grid-column:1;background:var(--bg);display:flex;flex-direction:column;z-index:5}.preview-bar{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 14px;background:var(--panel);color:var(--text);border-bottom:1px solid var(--border)}.preview-bar button{background:var(--btn-primary-bg);color:var(--text);border:1px solid var(--accent);border-radius:6px;padding:6px 10px;cursor:pointer}.preview-sheet{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;overflow:hidden}.preview-sheet svg{width:auto;height:auto;max-width:100%;max-height:100%}.tip{position:fixed;z-index:6;background:var(--panel);color:var(--text);border:1px solid var(--border);padding:6px 8px;border-radius:6px;pointer-events:none;font-size:13px}.library{height:100%;display:flex;flex-direction:column;background:var(--bg)}.library-status{margin:24px}.library-columns{flex:1;min-height:0;display:grid;grid-template-columns:minmax(260px,380px) 1fr}.library-pane{min-height:0;display:flex;flex-direction:column;gap:10px;padding:16px;border-right:1px solid var(--border)}.library-pane h2{margin:12px 0 6px;font-size:13px;font-weight:600;color:var(--muted)}.library-search{display:flex;flex-direction:column;gap:6px;color:var(--muted)}.library-search input,.new-map input{background:var(--input-bg);border:1px solid var(--border);border-radius:6px;padding:8px 10px}.library-scroll{overflow:auto;min-height:0}.library-pane ul{list-style:none;margin:0;padding:0}.library-pane li button{width:100%;text-align:left;background:transparent;border:1px solid transparent;border-radius:6px;padding:7px 8px;cursor:pointer}.library-pane li button.active,.library-pane li button:hover{background:var(--panel);border-color:var(--border)}.library-pane li button.active{border-color:var(--accent)}.library-error{margin:0;color:var(--danger)}.map-cards{display:flex;flex-direction:column;gap:8px}.map-cards li{display:grid;grid-template-columns:1fr auto auto;gap:8px;align-items:center;padding:10px;background:var(--panel);border:1px solid var(--border);border-radius:8px}.map-cards li div{display:flex;flex-direction:column;gap:2px;min-width:0}.map-cards li span{color:var(--muted);font-size:12px}.map-cards button,.new-map button,.library .topbar button{background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:6px 10px;cursor:pointer}.map-cards button:hover,.new-map button:hover,.library .topbar button:hover{border-color:var(--accent)}.new-map{display:flex;gap:8px;align-items:end}.new-map label{display:flex;flex-direction:column;gap:6px;flex:1;color:var(--muted)}.new-map button.primary,.library .topbar button.primary{background:var(--btn-primary-bg);border-color:var(--accent)}.facility-gap{margin:0 0 8px;color:var(--muted)}.facility-gap summary{cursor:pointer}.facility-gap ul{margin:6px 0 0;padding-left:18px}.login-page{min-height:100%;display:flex;align-items:center;justify-content:center;padding:1.5rem;background:var(--bg);color:var(--text)}.login-card{width:min(24rem,100%);text-align:center}.login-card .top-logo{height:4.5rem;margin:0 auto 1rem}.login-card h1{margin:0;font-size:1.5rem;font-weight:600}.login-card form{text-align:left;margin-top:1.25rem}.login-card .flash-msg{text-align:left;padding:.6rem .75rem;border-radius:6px;font-size:.9rem;margin:1rem 0 0;border:1px solid var(--border)}.login-card .flash-msg.ok{background:#3dd68c1a;color:#3dd68c;border-color:#3dd68c4d}.login-card .flash-msg.err{background:#f071781a;color:#f07178;border-color:#f071784d}.login-page .field{margin-bottom:.9rem}.login-page .field label{display:block;font-size:.8rem;color:var(--muted);text-transform:uppercase;letter-spacing:.03em;margin-bottom:.25rem}.login-page .field input{width:100%;background:var(--input-bg);border:1px solid var(--border);border-radius:6px;color:var(--text);padding:.45rem .75rem}.login-page .field input:focus{outline:none;border-color:var(--accent)}.login-card button.primary,.login-actions button,dialog.modal .modal-actions button{margin-top:0;border:1px solid var(--border);background:var(--panel);color:var(--text);padding:.5rem 1rem;border-radius:6px;font:inherit;cursor:pointer}.login-card button.primary{width:100%;background:var(--btn-primary-bg);border-color:var(--accent)}.login-card button.primary:hover:not(:disabled),.login-actions button:hover:not(:disabled),dialog.modal .modal-actions button:hover:not(:disabled){border-color:var(--accent)}.login-card button.primary:disabled,.login-actions button:disabled,dialog.modal .modal-actions button:disabled{opacity:.5;cursor:not-allowed}.login-card .hint{text-align:center;margin:.85rem 0 0;font-size:.8rem;color:var(--muted)}.login-card .hint button{background:transparent;border:none;color:var(--accent);padding:0;cursor:pointer;font:inherit}.login-card .hint button:hover{text-decoration:underline}.login-actions,.modal-actions{display:flex;flex-wrap:wrap;gap:.5rem}.login-actions button.primary,dialog.modal .modal-actions button.primary{width:auto;margin-top:0;background:var(--btn-primary-bg);border-color:var(--accent)}.modal-actions{justify-content:flex-end;margin-top:.75rem}.modal-actions button{margin-top:0}@media(max-width:800px){.library-columns{grid-template-columns:1fr;overflow:auto}.library-pane{border-right:0;border-bottom:1px solid var(--border)}}
