*{margin:0;padding:0;box-sizing:border-box}:root{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif;line-height:1.5;font-weight:400;color:#213547;background-color:#fff;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{margin:0;min-width:320px;min-height:100vh;overflow:hidden;background-color:#fff}#root{width:100vw;height:100vh}.context-menu{position:fixed;background-color:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 8px #00000026;z-index:1000;min-width:150px;padding:4px 0}.context-menu-item{padding:8px 16px;cursor:pointer;font-size:14px;color:#333;transition:background-color .15s;-webkit-user-select:none;user-select:none}.context-menu-item:hover{background-color:#f5f5f5}.context-menu-item:active{background-color:#e0e0e0}.context-menu-header{padding:8px 16px;font-size:13px;font-weight:600;color:#666;border-bottom:1px solid #e0e0e0;-webkit-user-select:none;user-select:none}.context-menu-item-danger{color:#f44336}.context-menu-item-danger:hover{background-color:#ffebee}.point-tooltip{position:absolute;background:#000000d9;color:#fff;padding:6px 10px;border-radius:4px;font-size:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;white-space:nowrap;pointer-events:none;user-select:none;-webkit-user-select:none;box-shadow:0 2px 8px #0000004d;z-index:1000;animation:fadeIn .15s ease-out}.point-tooltip--above{transform:translate(-50%,calc(-100% - 12px))}.point-tooltip--below{transform:translate(-50%,12px)}@keyframes fadeIn{0%{opacity:0;transform:translate(-50%,calc(-100% - 8px))}to{opacity:1;transform:translate(-50%,calc(-100% - 12px))}}.point-tooltip--below{animation:fadeInBelow .15s ease-out}@keyframes fadeInBelow{0%{opacity:0;transform:translate(-50%,8px)}to{opacity:1;transform:translate(-50%,12px)}}.image-canvas-container{width:100%;height:100%;display:flex;align-items:flex-start;padding:20px}.image-canvas{position:relative;width:100%;height:100%;overflow:hidden;background:#fff9e938;border:1px solid rgba(255,255,255,.25);box-shadow:0 12px 34px #00000038;user-select:none;-webkit-user-select:none}.image-loading-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:#ffffffbf;color:#555;font-size:16px;z-index:5;pointer-events:all;user-select:none;-webkit-user-select:none}.move-mode-banner{position:absolute;top:12px;left:50%;transform:translate(-50%);z-index:6;padding:8px 12px;border-radius:8px;background:#14181e73;color:#f5f7fa;font-size:13px;line-height:1.3;text-align:center;pointer-events:none;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);user-select:none;-webkit-user-select:none}.image-wrapper{position:relative;display:inline-block;width:fit-content;height:fit-content}.image-canvas img{display:block;max-width:100%;max-height:calc(100vh - 40px);-webkit-user-select:none;user-select:none;pointer-events:none}.points-overlay{position:absolute;top:0;left:0;pointer-events:none}.point{fill:#4caf5099;stroke:#4caf50;stroke-width:2;transition:all .2s}.point.hovered{fill:#4caf50e6;stroke:#2e7d32;stroke-width:3}.point-center{fill:#fff;pointer-events:none}.no-image{display:flex;align-items:center;justify-content:center;height:100%;color:#999;font-size:18px;text-align:center;padding:40px}.point-panel{width:300px;height:100vh;background:#f6f0e1db;border-left:1px solid rgba(255,255,255,.35);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);display:flex;flex-direction:column;overflow:hidden;box-shadow:-8px 0 24px #00000029}.panel-section{padding:16px;border-bottom:1px solid #e0e0e0}.panel-section h3{margin:0 0 12px;font-size:16px;color:#333;font-weight:600}.panel-controls{display:flex;gap:8px}.panel-controls button{border:1px solid rgba(255,255,255,.35);background:#181d23b8;color:#f5f7fa;border-radius:6px;padding:6px 10px;font-size:12px;cursor:pointer}.panel-controls button:hover{background:#181d23e6}.file-input{width:100%;padding:8px;border:1px solid #ddd;border-radius:4px;font-size:14px;cursor:pointer}.hover-details{height:280px;overflow-y:auto}.hover-details-header{min-width:0;display:flex;align-items:baseline;gap:8px}.hover-details-description{margin-top:8px;font-size:13px;color:#4a4a4a;line-height:1.4;white-space:pre-wrap;word-break:break-word}.hover-details-actions{display:flex;gap:8px;margin-top:8px}.hover-details-actions button{border:1px solid rgba(24,29,35,.25);background:#181d2314;color:#1a1f26;border-radius:6px;padding:4px 8px;font-size:12px;cursor:pointer}.hover-details-actions button:hover{background:#181d2329}.hover-details-actions .clear-selection-btn{border:1px solid rgba(255,255,255,.35);background:#181d23b8;color:#f5f7fa}.hover-details-actions .clear-selection-btn:hover{background:#181d23e6}.hover-details-description p{margin:0 0 6px}.hover-details-description p:last-child{margin-bottom:0}.hover-details-description ul{margin:0 0 6px 18px;padding:0}.hover-details-description li{margin:0}.hover-details-description code{font-family:ui-monospace,SFMono-Regular,SFMono-Regular,Menlo,Consolas,Liberation Mono,monospace;background:#0000000f;border-radius:4px;padding:1px 4px;font-size:12px}.hover-details-description strong{font-weight:700}.hover-details-description em{font-style:italic}.no-hover{color:#999;font-size:14px}.points-list-section{flex:1;display:flex;flex-direction:column;overflow:hidden;border-bottom:none}.points-list{flex:1;overflow-y:auto;margin-top:8px}.point-group{margin-bottom:8px}.point-group-header{width:100%;border:1px solid #d8d8d8;border-radius:6px;padding:8px 10px;background:#f7f7f7;display:flex;align-items:center;gap:6px;cursor:pointer;text-align:left}.point-group-header:hover{background:#efefef}.point-group-toggle{width:14px;font-weight:700;color:#444}.point-group-label{font-size:13px;font-weight:600;color:#333}.point-group-count{font-size:12px;color:#666}.point-group-items{margin-top:8px}.point-item{padding:8px 10px;border:1px solid #e0e0e0;border-radius:4px;margin-bottom:8px;transition:all .2s}.point-item.hovered{background-color:#e8f5e9;border-color:#4caf50}.point-item.selected{background-color:#e3f0ff;border-color:#3a7bd5}.point-row{display:flex;align-items:center;justify-content:space-between;gap:8px}.point-inline{min-width:0;display:flex;align-items:baseline;gap:8px}.point-label{font-weight:500;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.point-type{font-size:12px;color:#666;font-style:normal;margin-bottom:0;white-space:nowrap}.point-actions{display:flex;gap:6px}.point-actions button{padding:4px 8px;border:none;border-radius:4px;font-size:11px;cursor:pointer;transition:background-color .2s}.edit-btn{background-color:#2196f3;color:#fff}.edit-btn:hover{background-color:#1976d2}.delete-btn{background-color:#f44336;color:#fff}.delete-btn:hover{background-color:#d32f2f}.no-points{color:#999;font-size:14px;text-align:center;padding:20px}.dialog-overlay{position:fixed;inset:0;width:100vw;height:100vh;background-color:#00000080;display:grid;place-items:center;z-index:5000;margin:0;padding:16px}.dialog{background:#fff;border-radius:8px;padding:24px;width:min(440px,92vw);min-width:0;box-shadow:0 4px 6px #0000001a}.dialog h2{margin:0 0 16px;font-size:20px;color:#333}.dialog p{margin:0 0 24px;color:#666}.form-field{margin-bottom:16px}.form-field label{display:block;margin-bottom:6px;font-size:14px;font-weight:500;color:#333}.dialog input[type=text],.dialog textarea,.dialog select{width:100%;padding:10px;border:1px solid #ddd;border-radius:4px;font-size:14px;box-sizing:border-box;font-family:inherit}.dialog input[type=text]:focus,.dialog textarea:focus,.dialog select:focus{outline:none;border-color:#4caf50}.dialog textarea{resize:vertical;min-height:110px}.dialog select{cursor:pointer;background-color:#fff}.dialog-buttons{display:flex;gap:8px;justify-content:flex-end}.dialog-buttons button{padding:8px 16px;border:none;border-radius:4px;font-size:14px;cursor:pointer;transition:background-color .2s}.dialog-buttons button[type=button]{background-color:#f5f5f5;color:#333}.dialog-buttons button[type=button]:hover{background-color:#e0e0e0}.dialog-buttons button[type=submit],.dialog-buttons button:not([type]){background-color:#4caf50;color:#fff}.dialog-buttons button[type=submit]:hover,.dialog-buttons button:not([type]):hover{background-color:#45a049}.dialog-buttons button[type=submit]:disabled{background-color:#ccc;cursor:not-allowed}.dialog-buttons button.danger{background-color:#f44336;color:#fff}.dialog-buttons button.danger:hover{background-color:#d32f2f}.form-helper{margin-top:6px;font-size:12px;color:#777}.app{position:relative;display:flex;height:100vh;width:100vw;overflow:hidden;background:#11161d}.app:before{content:"";position:absolute;inset:-2%;background-image:url(/assets/background.jpg);background-size:cover;background-position:center;opacity:.22;transform:scale(1.05);pointer-events:none;z-index:0}.app:after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,#080c1259,#080c128c);pointer-events:none;z-index:0}.main-content,.point-panel,.splash-screen{position:relative;z-index:1}.app-version{position:fixed;right:10px;bottom:8px;z-index:20;padding:2px 6px;font-size:11px;line-height:1.2;letter-spacing:.02em;color:#ffffffd1;background:#0000006b;border:1px solid rgba(255,255,255,.2);border-radius:4px;pointer-events:none;-webkit-user-select:none;user-select:none;align-items:flex-end;text-align:right}.permission-notice{position:fixed;left:12px;bottom:8px;z-index:21;padding:4px 8px;font-size:12px;line-height:1.2;color:#f5f5f5;background:#991b1bdb;border:1px solid rgba(255,255,255,.22);border-radius:4px}.main-content{flex:1;display:flex;align-items:center;justify-content:center;background:#f5f5f526;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);overflow:hidden}.splash-screen{position:relative;width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:24px;text-align:center;overflow:hidden}.splash-screen:before{content:"";position:absolute;inset:-6%;background-image:url(/assets/splash_bg.jpeg);background-size:cover;background-position:center;transform:scale(1.06) translateZ(0);animation:splashBackgroundMotion 4s ease-in-out infinite alternate;filter:saturate(.95) brightness(.9);will-change:transform;backface-visibility:hidden;z-index:0}.splash-screen:after{content:"";position:absolute;inset:0;background:radial-gradient(circle at 20% 20%,rgba(255,236,196,.32),transparent 55%),linear-gradient(180deg,#080c1273,#080c129e);z-index:0}.splash-screen>*{position:relative;z-index:1}.splash-screen h1{margin:0;font-size:2rem;letter-spacing:.03em;color:#f4edd9;text-shadow:0 2px 10px rgba(0,0,0,.45)}.splash-screen p{margin:0;color:#e9eef6;max-width:680px;text-shadow:0 1px 8px rgba(0,0,0,.45)}.enter-button{margin-top:8px;padding:10px 16px;border:none;border-radius:8px;background:#1b4dff;color:#fff;font-size:1rem;cursor:pointer}.enter-button:hover{background:#163fce}@keyframes splashBackgroundMotion{0%{transform:scale(1.06) translate3d(-.9%,-.5%,0)}to{transform:scale(1.09) translate3d(.9%,.5%,0)}}.login-overlay{position:fixed;inset:0;background:#0a0a0a99;display:flex;align-items:center;justify-content:center;z-index:999}.login-dialog{width:min(420px,90vw);background:#fff;border-radius:10px;padding:24px;box-shadow:0 20px 60px #00000040;display:flex;flex-direction:column;gap:12px}.login-dialog h2{margin:0;font-size:1.4rem}.login-dialog p{margin:0;color:#444}.login-dialog form{display:flex;flex-direction:column;gap:10px}.login-dialog input{padding:10px 12px;border:1px solid #ccc;border-radius:6px;font-size:1rem}.login-dialog button{padding:10px 12px;background:#1b4dff;color:#fff;border:none;border-radius:6px;font-size:1rem;cursor:pointer}.login-dialog button:disabled{opacity:.6;cursor:not-allowed}.login-status{font-size:.95rem;padding:8px 10px;border-radius:6px}.login-status.success{background:#e8f5e9;color:#1b5e20}.login-status.error{background:#ffebee;color:#b71c1c}
