:root{color:#202020;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;--ink:#202020;--muted:#6f777b;--faint:#9b9b9b;--line:#d7dadd;--line-strong:#b9b9b9;--panel:#fffffff5;--panel-solid:#fff;--surface:#f2f2f2;--surface-strong:#e4e4e4;--primary:#155873;--primary-soft:#8aa8b4;--accent:#da5d3b;--danger:#c74334;--canvas-ink:#edf4f6;--canvas-muted:#9aadb3;--mono:"SFMono-Regular", Consolas, "Liberation Mono", ui-monospace, monospace;background:#f2f2f2;font-family:Arial,Noto Sans KR,Segoe UI,sans-serif}*{box-sizing:border-box}html,body,#root{width:100%;height:100%;margin:0;overflow:hidden}body{min-width:320px}button,input{font:inherit}button{color:inherit}button:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}::selection{color:#fff;background:var(--primary)}.app-frame{background:var(--surface);height:100%}.login-page{color:#e9f1f3;background:radial-gradient(circle at 72% 28%,#1b667e47,#0000 32%),radial-gradient(circle at 22% 78%,#da5d3b1c,#0000 25%),linear-gradient(145deg,#03090b,#0b1a1f 55%,#071216);place-items:center;width:100%;height:100%;padding:24px;display:grid;position:relative;overflow:hidden}.login-page:before{content:"";opacity:.24;background-image:linear-gradient(#81b0be1c 1px,#0000 1px),linear-gradient(90deg,#81b0be1c 1px,#0000 1px);background-size:64px 64px;position:absolute;inset:0;-webkit-mask-image:radial-gradient(circle,#000,#0000 78%);mask-image:radial-gradient(circle,#000,#0000 78%)}.login-atmosphere{pointer-events:none;position:absolute;inset:0}.login-atmosphere i{background:#78c9df;border-radius:50%;width:5px;height:5px;position:absolute;box-shadow:0 0 18px #5eb7d0}.login-atmosphere i:first-child{top:21%;left:17%}.login-atmosphere i:nth-child(2){width:3px;height:3px;top:67%;right:14%}.login-atmosphere i:nth-child(3){background:var(--accent);width:2px;height:2px;bottom:14%;right:28%}.login-card{z-index:1;border:1px solid #a3c9d32e;border-top:4px solid var(--accent);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:#071418e6;border-radius:6px;width:min(420px,100%);padding:38px 40px 30px;position:relative;box-shadow:0 28px 80px #00000080}.login-brand{align-items:center;gap:12px;margin-bottom:34px;display:flex}.login-symbol{object-fit:contain;width:30px;height:30px}.login-wordmark{filter:brightness(0)invert();opacity:.92;width:116px}.login-heading>span{color:#7db5c5;font:700 9px/1 var(--mono);letter-spacing:.2em}.login-heading h1{color:#fff;letter-spacing:-.03em;margin:10px 0 9px;font-size:28px}.login-heading p{color:#91a2a7;margin:0;font-size:12px;line-height:1.6}.login-form{gap:16px;margin-top:28px;display:grid}.login-form label{gap:8px;display:grid}.login-form label>span{color:#b8c5c8;font-size:11px;font-weight:700}.login-form input{color:#eef5f7;background:#01080aa6;border:1px solid #9ebec740;border-radius:4px;outline:none;width:100%;height:46px;padding:0 14px;transition:border-color .18s,box-shadow .18s}.login-form input::placeholder{color:#53666b}.login-form input:focus{border-color:#64adc2;box-shadow:0 0 0 3px #64adc21f}.login-form button{color:#fff;background:var(--primary);cursor:pointer;border:0;border-radius:4px;height:46px;margin-top:4px;font-size:12px;font-weight:800;transition:background .18s,opacity .18s}.login-form button:hover:not(:disabled){background:var(--accent)}.login-form button:disabled{cursor:not-allowed;opacity:.48}.login-error{color:#ff9c89;margin:-2px 0 0;font-size:11px;line-height:1.45}.login-security{color:#60767c;font:400 9px/1.5 var(--mono);text-align:center;margin:24px 0 0}.viewer-message .secondary-button{color:var(--primary);background:0 0}.viewer-message .secondary-button:hover{color:#fff}.viewer-message button{border:1px solid var(--primary);background:var(--primary);color:#fff;cursor:pointer;border-radius:4px;height:34px;padding:0 18px;font-size:11px;font-weight:700;transition:background .18s,border-color .18s}.viewer-message button:hover{border-color:var(--accent);background:var(--accent)}.viewer-shell{background:radial-gradient(circle at 52% 40%,#17282e 0,#091317 48%,#04090b 100%);border-top:0;width:100%;height:100%;min-height:0;position:relative;overflow:hidden}.cesium-map-layer{z-index:0;pointer-events:none;background:#071014;position:absolute;inset:0;overflow:hidden}.cesium-map-layer[hidden]{display:none}.cesium-map-layer .cesium-viewer,.cesium-map-layer .cesium-viewer-cesiumWidgetContainer,.cesium-map-layer .cesium-widget,.cesium-map-layer canvas{width:100%;height:100%}.point-cloud-canvas{z-index:1;image-rendering:auto;outline:none;width:100%;height:100%;display:block;position:absolute;inset:0;transform:translateZ(0)}.point-cloud-canvas[data-tool-mode=point],.point-cloud-canvas[data-tool-mode=distance],.point-cloud-canvas[data-tool-mode=area],.point-cloud-canvas[data-tool-mode=volume],.point-cloud-canvas[data-tool-mode=visibility]{cursor:crosshair}.viewport-grid{z-index:2;pointer-events:none;opacity:.08;background-image:linear-gradient(#8aa8b42e 1px,#0000 1px),linear-gradient(90deg,#8aa8b42e 1px,#0000 1px);background-size:80px 80px;position:absolute;inset:0;-webkit-mask-image:radial-gradient(circle,#0000 30%,#000 100%);mask-image:radial-gradient(circle,#0000 30%,#000 100%)}.viewer-shell.has-basemap .viewport-grid{opacity:.025}.glass-panel{border:1px solid var(--line);background:var(--panel);box-shadow:0 3px 10px #0003}.viewer-topbar{z-index:5;pointer-events:none;justify-content:space-between;align-items:start;gap:16px;display:flex;position:absolute;top:20px;left:20px;right:20px}.viewer-topbar>*{pointer-events:auto}.dataset-identity{border-radius:4px;gap:8px;width:350px;max-width:min(350px,100vw - 40px);min-height:58px;padding:11px 13px 10px 15px;display:grid;position:relative;overflow:hidden}.dataset-identity:before{content:"";background:var(--accent);border-radius:0 2px 2px 0;width:4px;position:absolute;inset:4px auto 4px 0}.dataset-brand{border-bottom:1px solid var(--line);align-items:center;min-height:40px;padding:0 7px 9px;display:flex}.dataset-brand-logo{align-items:center;gap:2px;width:234px;height:44px;display:flex}.dataset-brand-symbol{object-fit:contain;flex:none;width:44px;height:44px;display:block}.dataset-brand-word{width:188px;height:32px;display:block;position:relative;overflow:hidden}.dataset-brand-word img{width:236px;height:auto;display:block;position:absolute;top:-3.4px;left:-48px}.dataset-identity>div{gap:4px;display:grid}.dataset-identity strong{max-width:190px;color:var(--ink);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:700;overflow:hidden}.dataset-list{flex:1;min-width:0}.dataset-row{align-items:center;gap:9px;min-width:0;display:flex}.dataset-row+.dataset-row{margin-top:4px}.dataset-row .build-pill{margin-left:auto}.project-toggle{cursor:pointer;border:1px solid #0000;border-radius:3px;min-height:38px;padding:5px 7px;transition:border-color .16s,background .16s,opacity .16s;position:relative}.project-toggle:hover{border-color:var(--line);background:var(--surface)}.project-toggle.is-off{opacity:.56}.project-toggle>input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.project-toggle-track{border:1px solid var(--line-strong);background:#c7cfd2;border-radius:9px;flex:none;width:28px;height:16px;transition:border-color .16s,background .16s;position:relative}.project-toggle-track i{background:#fff;border-radius:50%;width:10px;height:10px;transition:transform .16s;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #00000040}.project-toggle>input:checked+.project-toggle-track{border-color:var(--primary);background:var(--primary)}.project-toggle>input:checked+.project-toggle-track i{transform:translate(12px)}.project-toggle>input:focus-visible+.project-toggle-track{outline-offset:2px;outline:2px solid #15587340}.project-toggle:has(input:disabled){cursor:not-allowed}.project-copy{gap:3px;min-width:0;display:grid}.project-copy strong{max-width:240px;font-size:11px}.project-copy small{max-width:240px;color:var(--faint);font:400 8px/1 var(--mono);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.eyebrow{color:var(--accent);font:700 8px/1.2 var(--mono);letter-spacing:.13em}.build-pill{border:1px solid var(--line);max-width:170px;color:var(--muted);background:var(--surface);font:400 9px/1 var(--mono);text-overflow:ellipsis;white-space:nowrap;border-radius:3px;margin-left:auto;padding:6px 8px;overflow:hidden}.viewer-toolbar{border:1px solid var(--line);background:var(--panel);scrollbar-width:thin;border-radius:4px;align-items:center;gap:10px;max-width:calc(100vw - 426px);min-height:50px;padding:7px;display:flex;overflow-x:auto;box-shadow:0 3px 10px #0003}.segmented-control{gap:2px;display:flex}.segmented-control button,.icon-button,.display-toggle{color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:3px;font-size:10px;font-weight:600;transition:color .16s,background .16s}.segmented-control button{height:34px;padding:0 13px}.display-toggle{height:34px;padding:0 10px}.segmented-control button:hover:not(:disabled),.icon-button:hover:not(:disabled),.display-toggle:hover:not(:disabled){color:var(--primary);background:#eef2f3}.segmented-control button.is-active,.display-toggle.is-active{color:#fff;background:var(--primary);box-shadow:inset 0 -2px #ffffff29}button:disabled,input:disabled{opacity:.38;cursor:not-allowed}.toolbar-divider{background:var(--line);width:1px;height:26px}.point-size-control{color:var(--muted);white-space:nowrap;align-items:center;gap:8px;font-size:10px;font-weight:600;display:flex}.point-size-control input{width:82px;height:18px;accent-color:var(--primary);margin:0}.point-size-control input::-webkit-slider-runnable-track{background:var(--line-strong);border-radius:3px;height:6px}.point-size-control input::-webkit-slider-thumb{background:var(--primary);-webkit-appearance:none;border:0;border-radius:4px;width:18px;height:14px;margin-top:-4px}.point-size-control output{width:33px;color:var(--ink);font:600 10px/1 var(--mono)}.icon-button{align-items:center;gap:6px;height:34px;padding:0 9px;display:flex}.icon-button svg{fill:none;stroke:currentColor;stroke-width:1.7px;width:15px}.toolbar-logout{white-space:nowrap;flex:none}.toolbar-logout:hover{color:var(--danger)!important;background:#fff0ee!important}.adjustments-toggle{flex:none}.adjustments-toggle.is-active{color:var(--primary);box-shadow:inset 0 -2px 0 var(--primary);background:#e6eef1}.rendering-adjustments{align-items:center;gap:10px;animation:.14s ease-out reveal-adjustments;display:flex}@keyframes reveal-adjustments{0%{opacity:0;transform:translate(-5px)}to{opacity:1;transform:translate(0)}}.viewer-tool-dock{z-index:6;align-items:flex-start;gap:8px;display:flex;position:absolute;top:50%;left:18px;transform:translateY(-50%)}.viewer-tool-rail{border-radius:5px;width:44px;padding:4px;display:grid;overflow:visible}.viewer-tool-rail button{width:36px;height:38px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:3px;place-items:center;padding:0;transition:color .16s,background .16s,box-shadow .16s;display:grid;position:relative}.viewer-tool-rail button:hover:not(:disabled){color:var(--ink);background:var(--surface)}.viewer-tool-rail button.is-active{color:#fff;background:var(--primary);box-shadow:inset 3px 0 0 var(--accent)}.viewer-tool-rail button.is-active.is-map{background:#216d8d;box-shadow:inset 3px 0 #8ed5f3}.viewer-tool-rail button.is-active.is-visibility{background:#0b7f94;box-shadow:inset 3px 0 #4fdcf5}.viewer-tool-rail button.is-danger:hover{color:var(--danger)}.viewer-tool-rail button:after{content:attr(data-tooltip);z-index:2;color:#fff;font:600 9px/1 var(--mono);white-space:nowrap;opacity:0;pointer-events:none;background:#04090be6;border-radius:3px;padding:6px 8px;transition:opacity .12s,transform .12s;position:absolute;top:50%;left:calc(100% + 10px);transform:translate(3px,-50%)}.viewer-tool-rail button:hover:after{opacity:1;transform:translateY(-50%)}.viewer-tool-rail button.is-menu-open:after{display:none}.viewer-tool-rail svg{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.6px;width:21px;height:21px}.tool-menu-caret{border-top:4px solid #0000;border-right:4px solid;width:0;height:0;position:absolute;bottom:3px;right:3px}.viewer-measure-palette{border-radius:5px;gap:3px;padding:4px;display:flex}.viewer-measure-palette button{width:40px;height:38px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:3px;place-items:center;padding:0;display:grid}.viewer-measure-palette button:hover{color:var(--ink);background:var(--surface)}.viewer-measure-palette button.is-active.is-point{color:#fff;background:#147ca5}.viewer-measure-palette button.is-active.is-distance{color:#fff;background:#a85e0b}.viewer-measure-palette button.is-active.is-area{color:#fff;background:#087b67}.viewer-measure-palette button.is-active.is-volume{color:#fff;background:#77519a}.viewer-measure-palette button.is-danger:hover{color:var(--danger)}.viewer-measure-palette svg{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.6px;width:22px;height:22px}.viewer-tool-popover{border-left:3px solid var(--accent);width:216px;color:var(--muted);border-radius:4px;gap:8px;padding:11px;font-size:9px;line-height:1.45;display:grid}.viewer-tool-popover.is-distance{border-left-color:#ffb24a}.viewer-tool-popover.is-area{border-left-color:#36e0ba}.viewer-tool-popover.is-point{border-left-color:#42b9e8}.viewer-tool-popover.is-volume{border-left-color:#d58cff}.viewer-tool-popover.is-visibility{border-left-color:#4fdcf5}.viewer-tool-popover.is-map{border-left-color:#8ed5f3}.viewer-tool-popover strong{color:var(--ink);font-size:11px}.viewer-tool-popover small{color:var(--faint);font:500 8px/1.4 var(--mono)}.tool-popover-actions{grid-template-columns:1fr 1fr;gap:4px;display:grid}.tool-popover-actions button:only-child{grid-column:1/-1}.viewer-tool-popover button{border:1px solid var(--line);min-height:29px;color:var(--muted);background:var(--panel-solid);cursor:pointer;border-radius:3px;font-size:9px;font-weight:700}.viewer-tool-popover button:hover:not(:disabled){color:var(--primary);border-color:var(--primary-soft)}.viewer-tool-popover button.is-danger:hover:not(:disabled){color:var(--danger);border-color:var(--danger)}.compact-segmented{background:var(--surface);border-radius:3px;grid-auto-columns:1fr;grid-auto-flow:column;gap:2px;padding:2px;display:grid}.compact-segmented button{background:0 0;border-color:#0000;min-width:0;padding:0 5px}.compact-segmented button.is-active{color:#fff;border-color:var(--primary);background:var(--primary)}.tool-replace-button{width:100%}.z-clip-control{gap:3px;display:grid}.z-clip-control>span{color:var(--faint);font:600 8px/1.2 var(--mono);justify-content:space-between;align-items:center;display:flex}.z-clip-control input{width:100%;accent-color:var(--primary);margin:0}.z-clip-control output{color:var(--ink);font:700 9px/1 var(--mono)}.z-clip-control .z-clip-direction{color:var(--faint);font:600 8px/1 var(--mono);justify-content:space-between;display:flex}.visibility-box-actions{z-index:8;background:#040c0feb;border:1px solid #4fdcf58c;border-radius:5px;gap:3px;padding:4px;display:flex;position:absolute;transform:translate(-50%,calc(-100% - 10px));box-shadow:0 5px 18px #00000059}.visibility-box-actions[hidden]{display:none}.visibility-box-actions:after{content:"";border:5px solid #0000;border-top-color:#4fdcf5b3;position:absolute;top:100%;left:50%;transform:translate(-50%)}.visibility-box-actions button{height:28px;color:var(--muted);font:700 9px/1 var(--mono);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:3px;padding:0 9px}.visibility-box-actions button:hover{color:var(--ink);background:var(--surface)}.visibility-box-actions button.is-active{color:#032027;background:#4fdcf5;border-color:#4fdcf5}.visibility-box-actions.is-outside{border-color:#fa59}.visibility-box-actions.is-outside:after{border-top-color:#ffaa55bf}.visibility-box-actions.is-outside button.is-active{color:#2b1603;background:#fa5;border-color:#fa5}.status-dock{z-index:5;border-top:3px solid var(--primary);border-radius:4px;grid-template-columns:minmax(205px,1.25fr) 2.5fr;align-items:center;gap:18px;width:min(920px,100% - 36px);min-height:62px;padding:10px 16px;display:grid;position:absolute;bottom:16px;left:50%;transform:translate(-50%)}.status-primary{align-items:center;gap:10px;min-width:0;display:flex}.status-primary>div{gap:5px;min-width:0;display:grid}.status-primary strong,.status-primary small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.status-primary strong{color:var(--ink);font-size:11px;font-weight:700}.status-primary small{color:var(--faint);font:400 8px/1 var(--mono)}.status-indicator{border-radius:50%;flex:none;width:8px;height:8px}.status-indicator.is-ready{background:var(--primary);box-shadow:0 0 0 3px #1558731f}.status-indicator.is-busy{border:2px solid var(--accent);animation:1.2s infinite pulse}.status-indicator.has-error{background:var(--danger)}@keyframes pulse{50%{opacity:.3;transform:scale(.75)}}.status-metrics{grid-template-columns:repeat(6,1fr);gap:4px;margin:0;display:grid}.status-metrics div{border-left:1px solid var(--line);gap:5px;padding-left:11px;display:grid}.status-metrics dt{color:var(--faint);font:700 7px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase}.status-metrics dd{color:var(--ink);font:600 10px/1 var(--mono);margin:0}.status-metrics dd span{color:var(--faint);font-size:7px}.status-error{color:#8f2f24;font:500 9px/1.3 var(--mono);text-overflow:ellipsis;white-space:nowrap;background:#fff4f2;border:1px solid #e2aaa3;border-radius:4px;margin:0;padding:9px 12px;position:absolute;bottom:calc(100% + 7px);left:0;right:0;overflow:hidden;box-shadow:0 3px 8px #00000024}.axis-gizmo{z-index:4;width:68px;height:68px;color:var(--canvas-muted);font:600 8px/1 var(--mono);position:absolute;bottom:28px;right:25px}.axis-gizmo i{background:#ffffff14;border:1px solid #d7e0e2;border-radius:50%;width:6px;height:6px;position:absolute;top:31px;left:31px}.axis-gizmo span{text-shadow:0 1px 3px #000;position:absolute}.axis-z{color:#e6edf0;top:0;left:31px}.axis-y{color:var(--primary-soft);bottom:9px;right:0}.axis-x{color:#e36e50;bottom:9px;left:0}.axis-gizmo:before,.axis-gizmo:after{content:"";transform-origin:bottom;background:#d7e0e2;width:1px;height:25px;position:absolute;top:8px;left:34px}.axis-gizmo:after{background:linear-gradient(var(--primary-soft), transparent);height:30px;top:33px;transform:rotate(58deg)}.viewport-hint{z-index:4;color:#9eacb0;font:400 8px/1 var(--mono);letter-spacing:.01em;pointer-events:none;background:#04090bb3;border:1px solid #ffffff1f;border-radius:3px;align-items:center;gap:6px;padding:7px 9px;display:flex;position:absolute;bottom:106px;right:18px}.viewport-hint span{color:#e2e9eb}.viewport-hint i{background:var(--accent);border-radius:50%;width:2px;height:2px}.viewer-message{z-index:8;border-top:4px solid var(--primary);border-radius:4px;align-items:start;gap:15px;width:min(430px,100% - 40px);padding:22px;display:flex;position:absolute;top:48%;left:50%;transform:translate(-50%,-50%)}.viewer-message>div{gap:8px;min-width:0;display:grid}.viewer-message h2{color:var(--ink);margin:0;font-size:17px}.viewer-message p{color:var(--muted);overflow-wrap:anywhere;margin:0;font-size:11px;line-height:1.6}.viewer-message button{justify-self:start;margin-top:4px}.message-mark{border-radius:50%;flex:none;width:11px;height:11px;margin-top:2px}.message-mark.loading{border:2px solid var(--primary);border-top-color:#0000;animation:.8s linear infinite spin}.message-mark.error{background:var(--danger);box-shadow:0 0 0 4px #c743341a}@keyframes spin{to{transform:rotate(360deg)}}@media (width<=1000px){.viewer-topbar{align-items:stretch}.dataset-identity{width:230px;min-width:210px}.viewer-toolbar{max-width:calc(100vw - 286px)}.toolbar-divider{display:none}.status-dock{grid-template-columns:1fr}.status-primary{display:none}}@media (width<=720px){.login-card{padding:30px 24px 26px}.viewer-topbar{display:grid;top:10px;left:10px;right:10px}.dataset-identity{display:none}.viewer-toolbar{width:100%;max-width:none;overflow-x:auto}.segmented-control button{padding-inline:10px}.fit-button{display:none}.status-dock{width:auto;bottom:10px;left:10px;right:10px;transform:none}.status-metrics{grid-template-columns:repeat(3,1fr)}.status-metrics div:nth-child(4),.status-metrics div:nth-child(5),.axis-gizmo,.viewport-hint{display:none}.viewer-tool-dock{top:92px;left:10px;transform:none}.viewer-tool-popover{width:min(210px,100vw - 72px)}}
