html,body,#root{margin:0;height:100%;font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial}.app{display:flex;flex-direction:column;height:100%}.topbar{flex-shrink:0;display:flex;align-items:center;gap:4px;padding:0 10px;height:46px;background:#f5f5f7;border-bottom:1px solid #d8d8d8}.tb-btn{display:inline-flex;align-items:center;gap:5px;padding:5px 9px;border:1px solid transparent;border-radius:7px;background:transparent;cursor:pointer;font-size:13px;color:#333;white-space:nowrap;transition:background .12s}.tb-btn:hover{background:#e5e5ea}.tb-btn--file{cursor:pointer}.tb-btn--file input[type=file]{display:none}.tb-btn--disabled{opacity:.6;cursor:not-allowed;pointer-events:none}@keyframes tb-spin{to{transform:rotate(360deg)}}.tb-spin{animation:tb-spin .8s linear infinite}.tb-btn--primary{background:#007aff;color:#fff;border-color:#007aff}.tb-btn--primary:hover{background:#0062cc;border-color:#0062cc}.tb-btn--danger:hover{background:#fee2e2;color:#dc2626}.tb-sep{width:1px;height:20px;background:#d0d0d5;margin:0 4px;flex-shrink:0}.workspace{display:flex;flex:1;overflow:hidden}.left-panel{width:400px;flex-shrink:0;display:flex;flex-direction:column;border-right:1px solid #ddd;background:#fff;overflow:hidden}.tool-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px;padding:10px;border-bottom:1px solid #eee}.tool-btn{display:flex;flex-direction:column;align-items:center;gap:4px;padding:9px 6px;border:1px solid #e0e0e0;border-radius:8px;background:#fafafa;cursor:pointer;font-size:11px;color:#555;transition:background .12s,border-color .12s,color .12s}.tool-btn:hover{background:#f0f0f5}.tool-btn--active{background:#eff6ff;border-color:#3b82f6;color:#3b82f6}.panel-actions{display:flex;flex-direction:column;gap:6px;padding:8px 10px;border-bottom:1px solid #eee;min-height:44px}.action-btn{display:inline-flex;align-items:center;gap:5px;padding:6px 10px;border:1px solid #ddd;border-radius:6px;background:#fafafa;cursor:pointer;font-size:12px;color:#444;transition:background .12s;width:100%}.action-btn:hover{background:#f0f0f5}.action-btn--primary{background:#eff6ff;border-color:#bfdbfe;color:#1d4ed8}.action-btn--primary:hover{background:#dbeafe}.action-btn--warp{background:linear-gradient(135deg,#f0fdf4,#dcfce7);border-color:#86efac;color:#15803d;font-weight:600;justify-content:center;padding:8px 10px}.action-btn--warp:hover:not(:disabled){background:linear-gradient(135deg,#dcfce7,#bbf7d0);border-color:#4ade80}.action-btn--warp:disabled{background:#f3f4f6;border-color:#e5e7eb;color:#9ca3af;cursor:not-allowed}.action-btn--tif{background:linear-gradient(135deg,#eff6ff,#dbeafe);border-color:#93c5fd;color:#1d4ed8;font-weight:600;justify-content:center}.action-btn--tif:hover{background:linear-gradient(135deg,#dbeafe,#bfdbfe);border-color:#60a5fa}.action-btn--reset-warp{background:linear-gradient(135deg,#fff7ed,#ffedd5);border-color:#fdba74;color:#c2410c;font-weight:600;justify-content:center}.action-btn--reset-warp:hover{background:linear-gradient(135deg,#ffedd5,#fed7aa);border-color:#fb923c}.warp-btn-count{margin-left:auto;font-size:10px;font-weight:700;background:#d1d5db;color:#6b7280;border-radius:10px;padding:1px 6px}.panel-objects{flex:1;overflow-y:auto;padding:6px 0}.panel-section-title{padding:7px 10px 4px;font-size:11px;font-weight:600;color:#888;text-transform:uppercase;letter-spacing:.5px}.panel-section-title--clickable{display:flex;align-items:center;gap:4px;cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:4px;transition:background .1s}.panel-section-title--clickable:hover{background:#f0f0f5;color:#555}.panel-section-chevron{display:flex;align-items:center;color:#aaa;flex-shrink:0}.panel-section-label{flex:1}.panel-section-count{background:#e8e8ed;color:#666;font-size:10px;font-weight:600;padding:1px 6px;border-radius:10px;min-width:18px;text-align:center}.panel-section-eye{display:flex;align-items:center;justify-content:center;width:20px;height:20px;border:none;background:transparent;border-radius:4px;cursor:pointer;color:#bbb;padding:0;flex-shrink:0;transition:color .1s,background .1s;opacity:0}.panel-section-title--clickable:hover .panel-section-eye{opacity:1}.panel-section-header-row{display:flex;align-items:center;gap:4px}.panel-section-header-row>.panel-section-title--clickable{flex:1;min-width:0}.coord-format-toggle{display:flex;border:1px solid #ddd;border-radius:6px;overflow:hidden;flex-shrink:0;margin-right:6px;height:24px}.cft-btn{padding:2px 7px;font-size:10px;font-weight:600;border:none;background:transparent;color:#999;cursor:pointer;transition:background .12s,color .12s;letter-spacing:.3px}.cft-btn:hover{background:#f0f0f5;color:#555}.cft-btn--active{background:#007aff;color:#fff}.panel-section-eye:hover{color:#555;background:#e0e0e8}.panel-item{display:flex;align-items:center;gap:7px;padding:5px 8px 5px 10px;cursor:pointer;font-size:12px;color:#333;transition:background .1s}.panel-item:hover{background:#f5f5f7}.panel-item--hidden{opacity:.45}.panel-item__dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.panel-item__name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.panel-item__actions{display:flex;align-items:center;gap:1px;flex-shrink:0;opacity:0;transition:opacity .1s}.panel-item:hover .panel-item__actions{opacity:1}.panel-item__icon-btn{display:flex;align-items:center;justify-content:center;width:22px;height:22px;border:none;background:transparent;border-radius:4px;cursor:pointer;color:#999;transition:color .1s,background .1s;flex-shrink:0;padding:0}.panel-item__icon-btn:hover{color:#555;background:#e8e8ed}.panel-item__icon-btn--del:hover{color:#ef4444;background:#fee2e2}.canvas-anchor-tooltip{position:absolute;transform:translate(-50%,calc(-100% - 10px));background:#14141ee0;color:#fff;border-radius:7px;padding:5px 9px;pointer-events:none;z-index:200;display:flex;flex-direction:column;gap:2px;white-space:nowrap;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);box-shadow:0 2px 8px #0000004d}.canvas-anchor-tooltip:after{content:"";position:absolute;bottom:-5px;left:50%;transform:translate(-50%);border:5px solid transparent;border-bottom:none;border-top-color:#14141ee0}.canvas-anchor-tooltip__name{font-size:12px;font-weight:600}.canvas-anchor-tooltip__geo{font-size:11px;color:#ffffffa6;font-family:monospace}.canvas-wrap{flex:1;position:relative;overflow:hidden;background:#1e1e1e}.canvas-wrap canvas{display:block;width:100%;height:100%}.empty-hint{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:#aaa;font-size:15px;text-align:center;pointer-events:none}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000059;display:grid;place-items:center;z-index:1000}.modal-overlay--nodismiss{pointer-events:none;background:#00000059}.modal-overlay--nodismiss .modal{pointer-events:auto}.modal{width:min(520px,92vw);background:#fff;border-radius:10px;box-shadow:0 10px 25px #0003;overflow:hidden}.modal-title{padding:14px 16px;font-weight:600;border-bottom:1px solid #eee}.modal-title--draggable{cursor:grab;-webkit-user-select:none;user-select:none}.modal-title--draggable:active{cursor:grabbing}.modal form{padding:14px 16px}.modal-fields{display:grid;gap:10px}.field{display:grid;gap:6px}.field label{font-size:13px;color:#444}.field input,.field select{padding:8px 10px;border:1px solid #ccc;border-radius:6px;font-size:14px}.modal-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:14px}.modal-btn{padding:8px 18px;border-radius:7px;font-size:14px;font-weight:500;cursor:pointer;border:none;transition:background .15s}.modal-btn--cancel{background:#f2f2f7;color:#555;border:1px solid #e0e0e0}.modal-btn--cancel:hover{background:#e5e5ea}.modal-btn--ok{background:#007aff;color:#fff}.modal-btn--ok:hover{background:#0062cc}.reset-confirm-modal{width:min(440px,92vw)}.reset-confirm-modal__body{padding:16px 18px;font-size:14px;line-height:1.55;color:#444}.reset-confirm-modal__actions{display:flex;justify-content:flex-end;gap:10px;padding:12px 16px 16px;border-top:1px solid #eee}.reset-confirm-modal__btn{padding:9px 18px;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;border:none;transition:background .12s}.reset-confirm-modal__btn--cancel{background:#f2f2f7;color:#444;border:1px solid #e0e0e0}.reset-confirm-modal__btn--cancel:hover{background:#e5e5ea}.reset-confirm-modal__btn--danger{background:#dc2626;color:#fff}.reset-confirm-modal__btn--danger:hover{background:#b91c1c}.replace-image-modal{width:min(480px,94vw)}.replace-image-modal__body{padding:14px 18px 8px;font-size:14px;line-height:1.55;color:#444}.replace-image-modal__body p{margin:0 0 12px}.replace-image-modal__muted{color:#888;font-size:13px}.replace-image-modal__warn{color:#b45309;font-size:13px;font-weight:500}.replace-image-modal__actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px;padding:12px 16px 16px;border-top:1px solid #eee}.replace-image-modal__btn{padding:9px 14px;border-radius:8px;font-size:13px;font-weight:500;cursor:pointer;border:none;transition:background .12s,opacity .12s}.replace-image-modal__btn:disabled{opacity:.45;cursor:not-allowed}.replace-image-modal__btn--cancel{background:#f2f2f7;color:#444;border:1px solid #e0e0e0}.replace-image-modal__btn--cancel:hover:not(:disabled){background:#e5e5ea}.replace-image-modal__btn--secondary{background:#fff;color:#1a1a2e;border:1px solid #d1d5db}.replace-image-modal__btn--secondary:hover:not(:disabled){background:#f9fafb}.replace-image-modal__btn--primary{background:#007aff;color:#fff}.replace-image-modal__btn--primary:hover:not(:disabled){background:#0062cc}.palette-row{display:flex;flex-wrap:wrap;gap:7px;padding:2px 0}.palette-row--compact{gap:5px}.palette-row--compact .palette-swatch{width:20px;height:20px}.grid-colors{display:flex;flex-direction:column;gap:6px;padding:6px 0 2px}.grid-color-row{display:flex;flex-direction:column;gap:3px}.grid-color-label{font-size:11px;color:#888;font-weight:500}.palette-swatch{width:26px;height:26px;border-radius:50%;border:2px solid transparent;cursor:pointer;transition:transform .1s,border-color .1s;outline:none}.palette-swatch:hover{transform:scale(1.15)}.palette-swatch--active{border-color:#fff;box-shadow:0 0 0 2px #007aff;transform:scale(1.12)}.anchor-modal-floating{position:fixed;z-index:1100;padding:10px;width:min(480px,calc(100vw - 32px));background:#fff;border-radius:12px;box-shadow:0 8px 30px #0000002e,0 2px 8px #0000001a;overflow:hidden;border:1px solid rgba(0,0,0,.08)}.anchor-modal__header{display:flex;align-items:center;gap:8px;padding:11px 12px 11px 10px;border-bottom:1px solid #eee;cursor:grab;-webkit-user-select:none;user-select:none;background:#f8f8fb}.anchor-modal__header:active{cursor:grabbing}.anchor-modal__drag-icon{font-size:16px;color:#bbb;letter-spacing:-2px;flex-shrink:0}.anchor-modal__pin{font-size:17px;line-height:1;flex-shrink:0}.anchor-modal__header-text{flex:1;font-size:14px;font-weight:600;color:#222}.anchor-modal__close{width:24px;height:24px;border:none;background:transparent;border-radius:5px;font-size:13px;color:#999;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .12s,color .12s;padding:0}.anchor-modal__close:hover{background:#eee;color:#333}.anchor-modal{width:min(480px,96vw)}.anchor-modal__title{display:flex;align-items:center;gap:8px;font-size:15px}.anchor-tabs{display:flex;border-bottom:1px solid #eee;background:#fafafa}.anchor-tab{flex:1;padding:10px 12px;border:none;background:transparent;font-size:13px;font-weight:500;color:#888;cursor:pointer;border-bottom:2px solid transparent;transition:color .15s,border-color .15s}.anchor-tab:hover{color:#333}.anchor-tab--active{color:#007aff;border-bottom-color:#007aff;background:#fff}.anchor-modal__body{display:flex;flex-direction:column;gap:14px}.anchor-row{display:flex;flex-direction:column;gap:8px}.anchor-row__label{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:#555;text-transform:uppercase;letter-spacing:.5px;padding-left:8px;border-left:3px solid #ccc}.anchor-row__icon{font-size:14px}.anchor-dms-inputs{display:grid;grid-template-columns:1fr 1fr 1.4fr;gap:8px}.anchor-dms-cell{position:relative;display:flex;align-items:center}.anchor-dms-unit{position:absolute;right:9px;font-size:14px;color:#999;pointer-events:none}.anchor-dd-input{display:flex;flex-direction:column;gap:4px}.anchor-dd-hint{font-size:11px;color:#aaa;padding-left:2px}.anchor-input{width:100%;padding:9px 28px 9px 10px;border:1px solid #d0d5dd;border-radius:7px;font-size:15px;background:#fff;box-sizing:border-box;transition:border-color .15s,box-shadow .15s;-moz-appearance:textfield}.anchor-input::-webkit-outer-spin-button,.anchor-input::-webkit-inner-spin-button{-webkit-appearance:none}.anchor-input:focus{outline:none;border-color:#007aff;box-shadow:0 0 0 3px #007aff26}.anchor-input--wide{padding-right:10px;font-size:16px;letter-spacing:.5px}.anchor-modal__actions{padding-top:20px;margin-top:0}.anchor-btn{padding:9px 18px;border-radius:7px;font-size:14px;font-weight:500;cursor:pointer;border:none;transition:background .15s}.anchor-btn--cancel{background:#f2f2f7;color:#555}.anchor-btn--cancel:hover{background:#e5e5ea}.anchor-btn--ok{background:#007aff;color:#fff}.anchor-btn--ok:hover{background:#0062cc}.offset-modal{width:min(420px,96vw)}.export-method-modal{width:min(560px,96vw);max-height:90vh;overflow-y:auto;padding:20px 24px 24px}.export-method-modal .modal-title{padding:0 0 14px;margin:0 0 4px;border-bottom:none}.export-method-modal__subtitle{font-size:13px;color:#6b7280;margin:-8px 0 16px}.export-method-modal__list{display:flex;flex-direction:column;gap:10px}.export-method-card{display:flex;flex-direction:column;gap:6px;padding:14px 16px;background:#f9fafb;border:2px solid #e5e7eb;border-radius:10px;cursor:pointer;text-align:left;transition:border-color .15s,background .15s;width:100%}.export-method-card:hover:not(.export-method-card--disabled){background:#eff6ff;border-color:#93c5fd}.export-method-card--selected{background:#eff6ff;border-color:#007aff}.export-method-card--disabled{opacity:.5;cursor:not-allowed}.export-method-card__header{display:flex;align-items:center;gap:8px}.export-method-card__icon{font-size:18px;line-height:1}.export-method-card__label{font-size:14px;font-weight:600;color:#111827;flex:1}.export-method-card__badge{font-size:11px;font-weight:600;color:#fff;padding:2px 8px;border-radius:99px;white-space:nowrap}.export-method-card__desc{font-size:12px;color:#4b5563;line-height:1.55;margin:0}.export-method-card__accuracy{font-size:11px;font-weight:600;color:#059669;margin-top:2px}.excel-kml-modal{position:relative;width:min(520px,92vw);max-height:min(90vh,640px);overflow-y:auto;padding:20px 20px 18px}.excel-kml-modal__close{position:absolute;top:12px;right:12px;display:flex;align-items:center;justify-content:center;width:34px;height:34px;border:none;border-radius:8px;background:#f3f4f6;color:#555;cursor:pointer;transition:background .12s}.excel-kml-modal__close:hover{background:#e5e7eb}.excel-kml-modal__title{display:flex;align-items:center;padding-right:40px;border-bottom:none;font-size:17px}.excel-kml-modal__lead{margin:0 0 16px;font-size:13px;line-height:1.55;color:#4b5563}.excel-kml-modal__row{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}.excel-kml-modal__label{font-size:13px;font-weight:500;color:#374151}.excel-kml-modal__select{padding:9px 11px;border:1px solid #d1d5db;border-radius:8px;font-size:14px;background:#fff;max-width:100%}.excel-kml-modal__actions{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:12px}.excel-kml-modal__btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 14px;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;transition:background .12s,opacity .12s;border:none}.excel-kml-modal__btn:disabled{opacity:.55;cursor:not-allowed}.excel-kml-modal__btn--secondary{background:#f3f4f6;color:#1f2937;border:1px solid #e5e7eb}.excel-kml-modal__btn--secondary:hover:not(:disabled){background:#e5e7eb}.excel-kml-modal__btn--primary{background:#007aff;color:#fff}.excel-kml-modal__btn--primary:hover:not(:disabled){background:#0062cc}.excel-kml-modal__error{margin:0 0 12px;padding:10px 12px;background:#fef2f2;border:1px solid #fecaca;border-radius:8px;font-size:12px;color:#991b1b;white-space:pre-wrap;line-height:1.45}.excel-kml-modal__hint{margin:0;font-size:12px;color:#9ca3af;line-height:1.45}.offset-section{display:flex;flex-direction:column;gap:8px}.offset-dir-group{display:flex;gap:6px}.offset-dir-btn{flex:1;padding:8px 10px;border:1.5px solid #e0e0e0;border-radius:7px;background:#fafafa;font-size:13px;font-weight:500;color:#555;cursor:pointer;transition:background .15s,border-color .15s,color .15s}.offset-dir-btn:hover{background:#f0f0f5;border-color:#c0c0cc}.offset-dir-btn--active{background:#eff6ff;border-color:#3b82f6;color:#1d4ed8}.offset-input-wrap{position:relative;display:flex;align-items:center}.offset-input-wrap .anchor-input{padding-right:32px}.offset-summary{display:flex;flex-direction:column;gap:2px;padding:4px 8px;background:#3b82f614;border-left:2px solid #3b82f6;border-radius:4px;font-size:11px;color:#6b7280;line-height:1.5}.loading-screen{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;background:#f8f8f8;font-size:15px;color:#888}.loading-spinner{width:32px;height:32px;border:3px solid #e0e0e0;border-top-color:#007aff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.login-screen{min-height:100%;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#e8f0fe,#f0f4ff);padding:24px}.login-card{width:360px;background:#fff;border-radius:16px;box-shadow:0 8px 32px #0000001f;padding:40px 36px 32px;display:flex;flex-direction:column;align-items:center;gap:0}.login-logo{font-size:42px;margin-bottom:12px}.login-title{margin:0 0 6px;font-size:22px;font-weight:700;color:#1a1a2e}.login-subtitle{margin:0 0 28px;font-size:14px;color:#888}.login-form{width:100%;display:flex;flex-direction:column;gap:16px}.login-field{display:flex;flex-direction:column;gap:6px}.login-field label{font-size:13px;font-weight:500;color:#444}.login-field input{padding:10px 12px;border:1.5px solid #e0e0e0;border-radius:8px;font-size:15px;transition:border-color .15s,box-shadow .15s}.login-field input:focus{outline:none;border-color:#007aff;box-shadow:0 0 0 3px #007aff1f}.login-error{padding:10px 12px;background:#fff0f0;border:1px solid #fecaca;border-radius:8px;font-size:13px;color:#dc2626}.login-btn{padding:12px;background:#007aff;color:#fff;border:none;border-radius:8px;font-size:15px;font-weight:600;cursor:pointer;transition:background .15s;margin-top:4px}.login-btn:hover{background:#0062cc}.login-btn:disabled{opacity:.6;cursor:not-allowed}.login-hint{margin:20px 0 0;font-size:12px;color:#aaa;text-align:center;line-height:1.6}.projects-screen{min-height:100%;background:#f7f8fa;display:flex;flex-direction:column}.projects-header{display:flex;align-items:center;justify-content:space-between;padding:0 28px;height:56px;background:#fff;border-bottom:1px solid #e8e8e8;flex-shrink:0}.projects-header__brand{display:flex;align-items:center;gap:10px;font-size:16px;font-weight:700;color:#1a1a2e}.projects-header__user{display:flex;align-items:center;gap:12px}.projects-username{font-size:14px;color:#555;font-weight:500}.projects-logout-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border:1px solid #e0e0e0;border-radius:7px;background:#fff;font-size:13px;color:#555;cursor:pointer;transition:background .12s}.projects-logout-btn:hover{background:#f5f5f7}.projects-main{flex:1;margin:0 auto;padding:32px 28px}.projects-title-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px}.projects-title-row h2{margin:0;font-size:20px;font-weight:700;color:#1a1a2e}.projects-new-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;background:#007aff;color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;transition:background .12s}.projects-new-btn:hover{background:#0062cc}.projects-create-form{display:flex;gap:8px;margin-bottom:24px;align-items:center}.projects-create-form input{flex:1;max-width:360px;padding:9px 12px;border:1.5px solid #007aff;border-radius:8px;font-size:14px;outline:none}.projects-create-form button{padding:9px 16px;border:1px solid #e0e0e0;border-radius:8px;background:#fff;font-size:14px;cursor:pointer;transition:background .12s}.projects-create-form button[type=submit]{background:#007aff;color:#fff;border-color:#007aff}.projects-create-form button[type=submit]:hover{background:#0062cc}.projects-create-form button[type=submit]:disabled{opacity:.5;cursor:not-allowed}.projects-loading{display:flex;justify-content:center;padding:60px 0}.projects-empty{display:flex;flex-direction:column;align-items:center;gap:16px;padding:80px 0;color:#aaa}.projects-empty p{margin:0;font-size:16px}.projects-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:20px}.project-card{position:relative;background:#fff;border:1px solid #e8e8e8;border-radius:12px;overflow:hidden;cursor:pointer;transition:box-shadow .15s,transform .15s}.project-card:hover{box-shadow:0 4px 20px #0000001a;transform:translateY(-2px)}.project-card__thumb{width:100%;aspect-ratio:4/3;overflow:hidden;background:#f0f0f5}.project-card__thumb img{width:100%;height:100%;object-fit:cover}.project-card__no-img{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:#ccc}.project-card__body{padding:12px 14px}.project-card__name{font-size:14px;font-weight:600;color:#1a1a2e;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.project-card__date{font-size:12px;color:#aaa;margin-top:3px}.project-card__del{position:absolute;top:8px;right:8px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:#ffffffe6;border:1px solid #ddd;border-radius:6px;cursor:pointer;color:#888;opacity:0;transition:opacity .12s,color .12s,background .12s}.project-card:hover .project-card__del{opacity:1}.project-card__del:hover{color:#dc2626;background:#fff0f0;border-color:#fecaca}.project-card__export{position:absolute;top:8px;right:42px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:#ffffffe6;border:1px solid #ddd;border-radius:6px;cursor:pointer;color:#888;opacity:0;transition:opacity .12s,color .12s,background .12s}.project-card:hover .project-card__export{opacity:1}.project-card__export:hover{color:#007aff;background:#eff6ff;border-color:#bfdbfe}.project-card__bundle{position:absolute;top:8px;right:76px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:#ffffffe6;border:1px solid #ddd;border-radius:6px;cursor:pointer;color:#888;opacity:0;transition:opacity .12s,color .12s,background .12s}.project-card:hover .project-card__bundle{opacity:1}.project-card__bundle:hover{color:#7c3aed;background:#f5f3ff;border-color:#ddd6fe}.projects-title-row__actions{display:flex;align-items:center;gap:8px}.projects-import-btn{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;background:#f2f2f7;color:#1a1a2e;border:1.5px solid #d1d5db;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;transition:background .12s,border-color .12s}.projects-import-btn:hover{background:#e5e5ea;border-color:#9ca3af}.projects-import-conflict-label{font-size:13px;color:#ca8a04;font-weight:500;align-self:center}.tb-project-name{font-size:14px;font-weight:600;color:#1a1a2e;padding:4px 8px;border-radius:5px;cursor:default;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tb-project-name:hover{background:#e5e5ea}.tb-project-name-input{font-size:14px;font-weight:600;padding:4px 8px;border:1.5px solid #007aff;border-radius:5px;outline:none;width:200px}.tb-spacer{flex:1}.tb-save-status{font-size:12px;color:#22c55e;padding:0 8px;white-space:nowrap}.tb-save-status--saving{color:#888}.tb-username{font-size:13px;color:#555;font-weight:500;padding:0 4px;white-space:nowrap}.mode-tabs{display:flex;align-items:flex-end;gap:0;padding:8px 8px 0;border-bottom:1px solid #e5e5ea;background:#fafafa;flex-shrink:0}.mode-tabs__btns{display:flex;flex:1;gap:0}.mode-tabs .coord-format-toggle{margin-left:auto;margin-bottom:4px;margin-right:0}.mode-tab{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:5px;padding:7px 6px;border:none;border-bottom:2px solid transparent;background:transparent;cursor:pointer;font-size:12px;font-weight:500;color:#888;transition:color .12s,border-color .12s;border-radius:0;white-space:nowrap}.mode-tab:hover{color:#444}.mode-tab--active{color:#007aff;border-bottom-color:#007aff}.stage-tabs{display:flex;gap:6px;padding:7px 8px;border-bottom:1px solid #eee;background:#fff;flex-shrink:0}.stage-tab{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:5px;padding:6px 8px;border:1px solid #e0e0e0;border-radius:7px;background:#fafafa;cursor:pointer;font-size:12px;color:#666;transition:background .12s,border-color .12s,color .12s}.stage-tab:hover{background:#f0f0f5;border-color:#c8c8d0}.stage-tab--active{background:#eff6ff;border-color:#93c5fd;color:#1d4ed8}.globe-controls{display:flex;flex-direction:column;gap:8px}.globe-opacity-row{display:flex;align-items:center;gap:8px}.globe-opacity-label{font-size:11px;color:#666;flex-shrink:0;white-space:nowrap}.globe-opacity-slider{flex:1;height:4px;accent-color:#007aff;cursor:pointer}.globe-opacity-value{font-size:11px;color:#888;min-width:28px;text-align:right;flex-shrink:0}.auto-warp-badge{display:flex;align-items:center;gap:6px;padding:5px 8px;background:#22c55e1a;border:1px solid rgba(34,197,94,.35);border-radius:6px;font-size:11px;font-weight:600;color:#16a34a}.auto-warp-badge__icon{font-size:13px;line-height:1}.globe-hint{margin:0;font-size:11px;color:#888;line-height:1.5;padding:6px 8px;background:#3b82f60f;border-left:2px solid #93c5fd;border-radius:4px}.globe-hint--warn{background:#fbbf2414;border-left-color:#fbbf24;color:#b45309}.globe-anchor-count{display:flex;align-items:center;gap:6px;padding:4px 0}.globe-anchor-count__badge{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 5px;border-radius:10px;background:#ff3b30;color:#fff;font-size:11px;font-weight:600;flex-shrink:0}.globe-anchor-count__label{font-size:11px;color:#666;line-height:1.4}.globe-loading{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:#111820;color:#89b;font-size:14px}.panel-empty-hint{margin:16px 10px;padding:10px 12px;font-size:12px;color:#aaa;background:#f8f8f8;border-radius:6px;line-height:1.5;text-align:center}.globe-label{position:absolute;pointer-events:none;-webkit-user-select:none;user-select:none;transform:translate(-50%,-50%);font-size:10px;font-family:JetBrains Mono,monospace,sans-serif;font-weight:500;white-space:nowrap;text-shadow:0 0 4px rgba(0,0,30,1),0 0 8px rgba(0,0,30,.7)}.globe-label-lat{color:#b4dcfff2}.globe-label-lon{color:#a0ffc8d9}.canvas-view-toggle{position:absolute;top:10px;left:50%;transform:translate(-50%);z-index:20;display:flex;background:#141416d1;border-radius:8px;padding:3px;gap:2px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.1);box-shadow:0 2px 10px #0006}.cvt-btn{display:flex;align-items:center;gap:5px;padding:5px 14px;border:none;border-radius:6px;background:transparent;color:#ffffff8c;font-size:12px;font-weight:500;cursor:pointer;transition:background .15s,color .15s;white-space:nowrap}.cvt-btn:hover{background:#ffffff14;color:#fff}.cvt-btn--active{background:#ffffff26;color:#fff}.globe-readonly-badge{position:absolute;bottom:12px;left:50%;transform:translate(-50%);z-index:20;background:#141416bf;color:#ffffff80;font-size:11px;padding:3px 10px;border-radius:20px;pointer-events:none;border:1px solid rgba(255,255,255,.08);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
