:root{--color-bg-default: #eee;--color-bg-hover: #ddd;--color-bg-active: #007bff;--color-text-default: #000;--color-text-active: #000;--color-border-default: #ccc;--border-radius: 4px;--transition-speed: .2s;--font-size: 14px;--spacing: 8px;--gap: 6px;font-family:system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#242424;background-color:#242424;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--tg-color-primary: #229ED9;--tg-color-primary-dark: #1976b2;--tg-color-accent: #41bdfc;--tg-color-bg: #181a20;--tg-color-bg-alt: #232634;--tg-color-bg-sidebar: #20222b;--tg-color-border: #232634;--tg-color-text: #e6eaf0;--tg-color-text-secondary: #8a99b7;--tg-color-shadow: 0 2px 8px rgba(34, 158, 217, .1);--tg-font-family: "Segoe UI", "Roboto", "Arial", sans-serif;--tg-font-size: 15px;--tg-font-size-small: 13px;--tg-font-size-large: 18px;--tg-font-weight: 400;--tg-font-weight-bold: 600;--tg-spacing-xs: 4px;--tg-spacing-sm: 8px;--tg-spacing-md: 16px;--tg-spacing-lg: 24px;--tg-spacing-xl: 32px;--tg-radius: 12px;--tg-radius-sm: 6px;--tg-shadow: 0 2px 8px rgba(34, 158, 217, .1);--tg-transition: .18s cubic-bezier(.4, 0, .2, 1)}html,body{font-family:var(--tg-font-family),serif;font-size:var(--tg-font-size);font-weight:var(--tg-font-weight);background:var(--tg-color-bg);color:var(--tg-color-text);min-height:100vh;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{width:100vw;min-height:100vh;overflow:hidden}a{color:var(--tg-color-primary);text-decoration:none;transition:color var(--tg-transition)}a:hover{color:var(--tg-color-primary-dark)}::selection{background:var(--tg-color-primary);color:#fff}::-webkit-scrollbar{width:8px;background:var(--tg-color-bg-sidebar)}::-webkit-scrollbar-thumb{background:var(--tg-color-border);border-radius:var(--tg-radius-sm)}::-webkit-scrollbar-thumb:hover{background:var(--tg-color-primary)}h1{font-size:3.2em;line-height:1.1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}@media (prefers-color-scheme: light){:root{color:#213547;background-color:#242424}a:hover{color:#747bff}button{background-color:#242424}}.app-layout{display:flex;height:100vh;background:var(--tg-color-bg)}.sidebar{width:320px;background:var(--tg-color-bg-sidebar);border-right:1px solid var(--tg-color-border);box-shadow:var(--tg-shadow);display:flex;flex-direction:column;padding:var(--tg-spacing-lg) var(--tg-spacing-md)}.header{height:56px;background:var(--tg-color-bg-alt);border-bottom:1px solid var(--tg-color-border);display:flex;align-items:center;padding:0 var(--tg-spacing-lg);font-size:var(--tg-font-size-large);font-weight:var(--tg-font-weight-bold);color:var(--tg-color-primary);box-shadow:var(--tg-shadow)}.main{flex:1 1 0;display:flex;flex-direction:column;background:var(--tg-color-bg-alt);overflow:auto;padding:var(--tg-spacing-lg)}@media (max-width: 900px){.sidebar{width:72px;padding:var(--tg-spacing-md) var(--tg-spacing-xs)}.header{font-size:var(--tg-font-size);padding:0 var(--tg-spacing-md)}}.grid{width:100vw;height:100vh;cursor:grab;background-color:#121212;position:relative;z-index:0}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow:hidden;background-color:#242424}.block-selector::-webkit-scrollbar{width:8px}.block-selector::-webkit-scrollbar-track{border-radius:4px}.block-selector::-webkit-scrollbar-thumb{border-radius:4px}.block-selector::-webkit-scrollbar-thumb:hover{background:#242424}.grid-cell:hover{box-shadow:0 0 10px #0000004d!important}.block-selector{width:320px;height:100vh;background-color:#242424;border-left:2px solid #242424;padding:20px;overflow-y:auto;box-sizing:border-box}.block-selector__title{margin:0 0 20px;color:#333;font-size:1.5rem;text-align:center;border-bottom:2px solid #242424;padding-bottom:10px}.block-selector__list{display:flex;flex-direction:column;gap:15px}.structure-item{padding:15px;background-color:#242424;border:1px solid #242424;border-radius:8px;cursor:pointer;transition:all .2s ease;display:flex;flex-direction:column;gap:10px;box-shadow:0 1px 3px #0000001a}.structure-item--selected{background-color:#242424;border:2px solid #2196f3;box-shadow:0 2px 8px #2196f34d}.structure-item:hover:not(.structure-item--selected){background-color:#242424;transform:translateY(-2px)}.structure-item:not(.structure-item--selected){background-color:#242424;transform:translateY(0)}.structure-item__id{font-weight:700;color:#333;font-size:14px;margin-bottom:4px}.structure-item__color{font-size:10px;margin-bottom:4px}.structure-item__rotation{font-size:10px;color:#666;background-color:#242424;padding:2px 6px;border-radius:3px}.pointer-tool{padding:15px;border-radius:8px;cursor:pointer;transition:all .2s ease;display:flex;flex-direction:row;align-items:center;gap:10px;box-shadow:0 1px 3px #0000001a;border:1px solid #242424;background-color:#242424}.pointer-tool--selected{background-color:#242424;border:2px solid #2196f3;box-shadow:0 2px 8px #2196f34d}.pointer-tool__delete{margin-left:8px;padding:8px 12px;background:#f44336;color:#242424;border:none;border-radius:6px;font-weight:700;font-size:14px;cursor:pointer;transition:background .2s}.toolbar{position:fixed;top:20px;left:20px;background-color:#242424;padding:15px;border-radius:8px;box-shadow:0 4px 12px #00000026;z-index:1000;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(0,0,0,.1);min-width:200px}.toolbar__title{margin:0 0 15px;color:#333;font-size:16px}.toolbar__controls{display:flex;flex-direction:column;gap:12px}.toolbar__label{display:block;font-size:12px;color:#666;margin-bottom:4px}.toolbar__button{padding:8px 12px;background-color:#666;color:#242424;border:none;border-radius:4px;cursor:pointer;font-size:12px;flex:1;transition:background-color .2s}.toolbar__button--primary{background-color:#2196f3}.toolbar__button--primary:hover{background-color:#1976d2}.toolbar__button--orange{background-color:#ff9800}.toolbar__button--orange:hover{background-color:#f57c00}.toolbar__info{margin-top:10px;padding:8px;background-color:#242424;border-radius:4px;font-size:11px;color:#666}.map-grid-canvas{display:block;width:100%;height:100%;background-color:#242424}:root{font-family:system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#242424;background-color:#242424}.block-sidebar{position:absolute;top:0;right:0;width:20vw;height:100vh;min-width:200px;max-width:320px;background-color:#f8f9fa;border-left:1px solid #ccc;overflow-y:auto;padding:12px;box-sizing:border-box;z-index:10;box-shadow:-2px 0 6px #0003}.app-layout{display:flex;height:100vh;overflow:hidden}.app-main{flex:1 1 80%;display:flex;flex-direction:column;overflow:hidden}.block-list{display:flex;flex-direction:column;gap:8px}.block-item{background:var(--tg-color-bg);border:1px solid #ddd;padding:8px;border-radius:4px;cursor:pointer;transition:background-color .2s ease}.block-item:hover{background-color:var(--tg-color-bg-alt)}.toolbar{position:fixed;top:var(--tg-spacing-lg);left:var(--tg-spacing-lg);background-color:var(--tg-color-bg-sidebar);padding:var(--tg-spacing-md);border-radius:var(--tg-radius);box-shadow:var(--tg-shadow);z-index:1000;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid var(--tg-color-border);min-width:220px;display:flex;gap:var(--tg-spacing-md);-webkit-user-select:none;user-select:none;flex-direction:column}.toolbar__title{margin:0 0 var(--tg-spacing-md) 0;color:var(--tg-color-primary);font-size:var(--tg-font-size-large);font-weight:var(--tg-font-weight-bold)}.toolbar__controls{display:flex;flex-direction:column;gap:var(--tg-spacing-sm)}.toolbar__label{display:block;font-size:var(--tg-font-size-small);color:var(--tg-color-text-secondary);margin-bottom:2px}.toolbar__button{padding:var(--tg-spacing-sm) var(--tg-spacing-md);background-color:var(--tg-color-primary);color:#fff;border:none;border-radius:var(--tg-radius-sm);cursor:pointer;font-size:var(--tg-font-size);font-weight:var(--tg-font-weight-bold);transition:background var(--tg-transition);box-shadow:0 1px 3px #229ed91a}.toolbar__button:hover{background-color:var(--tg-color-primary-dark)}.toolbar__button--danger{background-color:#f44336}.toolbar__button--danger:hover{background-color:#d32f2f}.toolbar__button--success{background-color:#4caf50}.toolbar__button--success:hover{background-color:#388e3c}.toolbar__info{margin-top:var(--tg-spacing-sm);padding:var(--tg-spacing-sm);background-color:var(--tg-color-bg-alt);border-radius:var(--tg-radius-sm);font-size:var(--tg-font-size-small);color:var(--tg-color-text-secondary)}.toolbar-button{all:unset;display:inline-flex;align-items:center;gap:var(--tg-spacing-xs);padding:var(--tg-spacing-sm) var(--tg-spacing-md);cursor:pointer;background-color:var(--tg-color-bg-alt);color:var(--tg-color-text);border:1px solid var(--tg-color-border);border-radius:var(--tg-radius-sm);font-size:var(--tg-font-size);transition:background-color var(--tg-transition),color var(--tg-transition),border-color var(--tg-transition);-webkit-user-select:none;user-select:none;text-align:center}.toolbar-button.active{background-color:var(--tg-color-primary);color:#fff;border-color:var(--tg-color-primary)}.toolbar-button:hover,.toolbar-button:focus-visible{background-color:var(--tg-color-primary-dark);color:#fff}.toolbar-button svg{width:1em;height:1em;flex-shrink:0}.block-selector{width:320px;height:100vh;background-color:var(--tg-color-bg-sidebar);border-left:2px solid var(--tg-color-border);padding:var(--tg-spacing-lg) var(--tg-spacing-md);overflow-y:auto;box-sizing:border-box}.block-selector__title{margin:0 0 var(--tg-spacing-lg) 0;color:var(--tg-color-primary);font-size:var(--tg-font-size-large);text-align:center;border-bottom:2px solid var(--tg-color-border);padding-bottom:var(--tg-spacing-sm);font-weight:var(--tg-font-weight-bold)}.block-selector__list{display:flex;flex-direction:column;gap:var(--tg-spacing-md)}.structure-item{padding:var(--tg-spacing-md);background-color:var(--tg-color-bg-alt);border:1px solid var(--tg-color-border);border-radius:var(--tg-radius);cursor:pointer;transition:all var(--tg-transition);display:flex;flex-direction:column;gap:var(--tg-spacing-xs);box-shadow:0 1px 3px #229ed91a}.structure-item--selected{background-color:var(--tg-color-primary);border:2px solid var(--tg-color-primary);color:#fff;box-shadow:0 2px 8px #229ed933}.structure-item:hover:not(.structure-item--selected){background-color:var(--tg-color-bg-sidebar);transform:translateY(-2px)}.structure-item:not(.structure-item--selected){background-color:var(--tg-color-bg-alt);transform:translateY(0)}.structure-preview{flex-shrink:0;position:relative}.structure-item__id{font-weight:var(--tg-font-weight-bold);color:var(--tg-color-primary);font-size:var(--tg-font-size);margin-bottom:2px}.structure-item__color{font-size:var(--tg-font-size-small);margin-bottom:2px;color:var(--tg-color-text-secondary)}.structure-item__rotation{font-size:var(--tg-font-size-small);color:var(--tg-color-text-secondary);background-color:var(--tg-color-bg-sidebar);padding:2px 6px;border-radius:var(--tg-radius-sm)}.pointer-tool{padding:var(--tg-spacing-md);border-radius:var(--tg-radius);cursor:pointer;transition:all var(--tg-transition);display:flex;flex-direction:row;align-items:center;gap:var(--tg-spacing-sm);box-shadow:0 1px 3px #229ed91a;border:1px solid var(--tg-color-border);background-color:var(--tg-color-bg-alt)}.pointer-tool--selected{background-color:var(--tg-color-primary);border:2px solid var(--tg-color-primary);color:#fff;box-shadow:0 2px 8px #229ed933}.pointer-tool__icon{font-size:2rem;flex-shrink:0}.pointer-tool__delete{margin-left:var(--tg-spacing-xs);padding:var(--tg-spacing-xs) var(--tg-spacing-md);background:#f44336;color:#fff;border:none;border-radius:var(--tg-radius-sm);font-weight:var(--tg-font-weight-bold);font-size:var(--tg-font-size);cursor:pointer;transition:background var(--tg-transition)}.pointer-tool__delete:hover{background:#d32f2f}.metadata-editor-modal{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#181a20d9;display:flex;align-items:center;justify-content:center;z-index:9999}.metadata-editor-content{background:var(--tg-color-bg-alt);color:var(--tg-color-text);padding:var(--tg-spacing-lg);border-radius:var(--tg-radius);min-width:400px;max-width:600px;box-shadow:var(--tg-shadow);font-family:var(--tg-font-family);font-size:var(--tg-font-size);border:1px solid var(--tg-color-border)}.metadata-editor-table{width:100%;border-collapse:collapse;margin-bottom:var(--tg-spacing-md)}.metadata-editor-key{padding:var(--tg-spacing-sm);border:1px solid var(--tg-color-border);font-weight:var(--tg-font-weight-bold);background:var(--tg-color-bg-sidebar);color:var(--tg-color-text);font-size:var(--tg-font-size);border-radius:var(--tg-radius-sm) 0 0 var(--tg-radius-sm)}.metadata-editor-value{padding:var(--tg-spacing-sm);border:1px solid var(--tg-color-border);background:var(--tg-color-bg-alt);color:var(--tg-color-text);border-radius:0 var(--tg-radius-sm) var(--tg-radius-sm) 0}.metadata-editor-value input{width:100%;padding:var(--tg-spacing-xs) var(--tg-spacing-sm);border-radius:var(--tg-radius-sm);border:1px solid var(--tg-color-border);font-size:var(--tg-font-size);color:var(--tg-color-text);background:var(--tg-color-bg);transition:border-color var(--tg-transition)}.metadata-editor-value input:focus{outline:none;border-color:var(--tg-color-primary);box-shadow:0 0 0 2px #229ed926}.metadata-editor-actions{margin-top:var(--tg-spacing-md);text-align:right}.metadata-editor-actions button{padding:var(--tg-spacing-xs) var(--tg-spacing-md);border-radius:var(--tg-radius-sm);border:none;font-size:var(--tg-font-size);font-family:var(--tg-font-family);background:var(--tg-color-primary);color:#fff;margin-left:var(--tg-spacing-sm);cursor:pointer;font-weight:var(--tg-font-weight-bold);box-shadow:0 1px 3px #229ed91a;transition:background var(--tg-transition)}.metadata-editor-actions button:hover{background:var(--tg-color-primary-dark)}
