.header{background-color:#222;color:#fff;padding:13.5px 32px;position:sticky;top:0;z-index:1000;height:45px}.header-inner{display:flex;justify-content:space-between;align-items:center}.logo{margin:0;height:40px}.nav-link{margin-left:20px;color:#fff;text-decoration:none;font-weight:500}.nav-link:hover{text-decoration:underline}.logout-btn{margin-left:20px;padding:8px 16px;background-color:#444;color:#fff;border:none;border-radius:6px;font-weight:500;cursor:pointer;transition:background-color .2s ease-in-out}.logout-btn:hover{background-color:#666}.admin-dropdown{position:relative;display:inline-block}.admin-dropdown-content{display:none;position:absolute;background-color:#fff;min-width:160px;box-shadow:0 8px 16px #0000001a;z-index:100;top:100%;left:0;border-radius:4px;overflow:hidden}.admin-dropdown:hover .admin-dropdown-content{display:block}.dropdown-item{padding:10px 16px;display:block;text-decoration:none;color:#333;font-size:14px}.dropdown-item:hover{background-color:#f2f2f2}.footer{width:100%;padding:16px 0;background:#222;color:#fff;text-align:center;font-size:14px;margin-top:auto;height:20px}.layout-container{display:flex;flex-direction:column;min-height:100vh;width:100%;background-color:#f9f9f9;font-family:Segoe UI,sans-serif}.main-content{flex:1;display:flex;flex-direction:column;width:100%;padding:0;margin:0;box-sizing:border-box;overflow:hidden}.main-content.full-width{padding-left:32px;padding-right:32px}@media (max-width: 768px){.main-content,.main-content.full-width{padding-left:16px;padding-right:16px}}.login-wrapper{display:flex;justify-content:center;align-items:center;padding:80px 16px;background-color:#f8fafc;flex-grow:1}.login-card{background:#fff;padding:24px;border-radius:12px;box-shadow:0 4px 12px #0000001a;width:100%;max-width:560px;display:flex;flex-direction:column;gap:1rem}.login-title{margin-bottom:.5rem;font-size:1.5rem;text-align:center;font-weight:600}.login-input{padding:10px 12px;font-size:1rem;border-radius:8px;border:1px solid #ccc;outline:none}.login-button{padding:10px 12px;font-size:1rem;border-radius:8px;background-color:#2563eb;color:#fff;font-weight:700;border:none;cursor:pointer}.login-error{color:red;font-size:.9rem;text-align:center}.admin-user-page{padding:24px;max-width:900px;margin:0 auto;position:relative}.admin-user-title{font-size:24px;font-weight:700;margin-bottom:24px;color:#222}.admin-user-actions{text-align:right;margin-bottom:16px}.create-user-button{background-color:#4f46e5;color:#fff;border:none;border-radius:4px;padding:8px 14px;font-size:14px;cursor:pointer;transition:background-color .2s ease}.create-user-button:hover{background-color:#4338ca}.user-form-overlay{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:#00000080;display:flex;justify-content:center;align-items:center;z-index:1000}.user-form-modal{background-color:#fff;padding:24px 32px;border-radius:8px;width:400px;box-shadow:0 0 12px #0003;position:relative}.user-form-close{position:absolute;top:12px;right:16px;font-size:20px;background:none;border:none;cursor:pointer}.user-form-title{margin-bottom:20px;font-size:20px;font-weight:700;text-align:center}.user-form{display:flex;flex-direction:column;gap:16px}.user-form-group{display:flex;flex-direction:column}.user-form-group label{margin-bottom:6px;font-weight:600}.user-form-group input,.user-form-group select{padding:8px 10px;font-size:14px;border-radius:4px;border:1px solid #ccc}.user-form-actions{display:flex;justify-content:flex-end}.user-form-button,.user-form-actions button{padding:8px 16px;font-size:14px;font-weight:700;border:none;border-radius:4px;background-color:#007bff;color:#fff;cursor:pointer;transition:background-color .2s}.user-form-button:hover,.user-form-actions button:hover{background-color:#0056b3}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#00000080;display:flex;justify-content:center;align-items:center;z-index:1000}.modal-container{background-color:#fff;border-radius:8px;width:400px;max-width:90%;padding:24px;box-shadow:0 4px 20px #0003;position:relative}.modal-title{font-size:20px;margin-bottom:16px;font-weight:700;color:#222}.modal-content{margin-bottom:20px}.modal-content div{margin-bottom:10px;font-size:15px}.form-group{display:flex;align-items:center;gap:8px;margin-bottom:12px}.form-group label{width:80px;font-weight:700}.form-group input,.form-group select{flex:1;padding:6px 8px;border:1px solid #ccc;border-radius:4px;font-size:14px}.form-group .modal-button{height:36px;min-width:110px;padding:0 12px;font-size:14px;margin-left:auto}.form-group .modal-button:hover{background-color:#a9ccff}.modal-close{position:absolute;top:12px;right:16px;font-size:20px;background:none;border:none;cursor:pointer}.modal-actions{display:flex;justify-content:flex-end;gap:10px}.modal-button{padding:6px 12px;border-radius:4px;font-weight:700;cursor:pointer;border:none}.modal-button.primary{background-color:#06c;color:#fff}.modal-button.primary:hover{background-color:#005bb5}.modal-button.secondary{background-color:#eee;color:#333}.modal-button.secondary:hover{background-color:#ddd}.modal-button.danger{background-color:#ff4d4f;color:#fff}.modal-button.danger:hover{background-color:#e60000}.role-badge{padding:2px 8px;border-radius:12px;font-size:12px;font-weight:600}.role-badge.role_client{background-color:#f0f0f0;color:#333}.role-badge.role_admin{background-color:#e6f0ff;color:#1a4db3}.user-table-wrapper{overflow-x:auto;border:1px solid #ddd;border-radius:6px;box-shadow:0 1px 3px #0000000d;background:#fff;min-width:600px;min-height:400px}.user-table{width:100%;border-collapse:collapse}.user-table th,.user-table td{width:50%;padding:12px 16px;text-align:center;border-bottom:1px solid #eee}.user-table thead{background-color:#f9f9f9;font-weight:700}.user-table-row{cursor:pointer;transition:background-color .2s}.user-table-row:hover{background-color:#f5f5f5}.role-badge{display:inline-block;padding:4px 8px;border-radius:4px;font-size:12px;font-weight:700}.role-badge.admin{background-color:#e6f0ff;color:#1a4db3}.role-badge.client{background-color:#f0f0f0;color:#333}.no-users-message{padding:32px;text-align:center;color:#777;font-size:15px}.project-table-wrapper{overflow-x:auto;border:1px solid #ddd;border-radius:6px;box-shadow:0 1px 3px #0000000d;background:#fff;min-width:800px;min-height:400px}.project-table{width:100%;border-collapse:collapse}.project-table th,.project-table td{padding:12px 16px;text-align:left;border-bottom:1px solid #eee}.project-table th:first-child,.project-table td:first-child{width:25%}.project-table th:nth-child(2),.project-table td:nth-child(2){width:50%}.project-table thead{background-color:#f9f9f9;font-weight:700}.project-table tbody tr{cursor:pointer;transition:background-color .2s}.project-table tbody tr:hover{background-color:#f5f5f5}.empty-message{padding:32px;text-align:center;color:#777;font-size:15px}.pagination{display:flex;justify-content:center;gap:6px;padding:16px 0;border-top:1px solid #eee}.pagination-button{padding:6px 10px;font-size:13px;background-color:#f3f3f3;border:1px solid #ccc;border-radius:4px;cursor:pointer;transition:all .2s ease}.pagination-button:hover{background-color:#e0e0e0}.pagination-button.active{background-color:#4f46e5;color:#fff;font-weight:700;border-color:#4f46e5}.pagination-button:disabled{background-color:#f5f5f5;color:#aaa;cursor:not-allowed}.modal-form .form-group{margin-bottom:16px}.modal-form label{display:block;font-weight:700;margin-bottom:6px}.modal-form input,.modal-form textarea{width:100%;padding:8px;box-sizing:border-box}.modal-actions{text-align:right}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#0006;display:flex;justify-content:center;align-items:center}.modal-container{background:#fff;width:500px;padding:24px;border-radius:8px;position:relative}.modal-title{font-size:20px;margin-bottom:16px}.form-group{margin-bottom:12px}.form-group label{display:block;font-weight:700;margin-bottom:4px;width:20%}.form-group input,.form-group textarea{flex:1;padding:8px}.modal-actions{margin-top:16px;text-align:right}.modal-button{padding:8px 12px;margin-left:8px}.modal-button:hover{background-color:#a9ccff}.modal-button.danger{background-color:#e74c3c;color:#fff}.modal-button.secondary{background-color:#ccc}.admin-project-page{padding:24px;max-width:900px;margin:0 auto;position:relative}.admin-project-title{font-size:24px;font-weight:700;margin-bottom:24px;color:#222}.admin-project-actions{text-align:right;margin-bottom:16px}.create-project-button{background-color:#4f46e5;color:#fff;border:none;border-radius:4px;padding:8px 14px;font-size:14px;cursor:pointer;transition:background-color .2s ease}.create-project-button:hover{background-color:#4338ca}.modal-overlay{z-index:1000}.project-user-tab{display:flex;gap:24px;height:100%}.project-list{flex:1;border-right:1px solid #ddd}.project-list ul{list-style:none;padding:0;margin:0}.project-list li{padding:8px 12px;cursor:pointer;border-bottom:1px solid #eee}.project-list li:hover{background-color:#f5f5f5}.project-list li.active{background-color:#4f46e5;color:#fff;font-weight:700}.user-list{flex:2;display:flex;flex-direction:column;height:100%}.user-list ul{list-style:none;padding:0;margin:0 0 12px;flex:1}.user-list li{padding:6px 10px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #eee}.user-section{flex:1;display:flex;flex-direction:column}.add-user-form{display:flex;gap:8px;margin-top:10px}.add-user-form input{flex:1;padding:6px}.add-user-form button{padding:6px 12px}.scroll-box{max-height:130px;overflow-y:auto;padding-right:6px;scrollbar-width:thin;scrollbar-color:#ccc transparent}.admin-project-user-page{padding:24px;max-width:1000px;margin:0 auto}.admin-project-user-title{font-size:24px;font-weight:700;margin-bottom:24px;color:#222}.admin-tab-buttons{display:flex;gap:8px;margin-bottom:20px}.tab-button{padding:8px 16px;font-size:14px;background-color:#f3f3f3;border:1px solid #ccc;border-radius:4px;cursor:pointer}.tab-button.active{background-color:#4f46e5;color:#fff;border-color:#4f46e5;font-weight:700}.admin-tab-content{border:1px solid #eee;border-radius:4px;background:#fff;padding:20px;min-width:800px;min-height:400px;height:400px}.project-action-button{padding:4px 8px;margin-left:8px;background-color:#f0f0f0;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:14px}.project-action-button:hover{background-color:#e0e0e0}.project-action-button.add{color:green}.project-action-button.remove{color:red}/*!
 * Photo Sphere Viewer 5.13.3
 * @copyright 2014-2015 Jérémy Heleine
 * @copyright 2015-2025 Damien "Mistic" Sorel
 * @licence MIT (https://opensource.org/licenses/MIT)
 */.psv-container{--psv-core-loaded: true;container-name:psv-container;container-type:size;width:100%;height:100%;margin:0;padding:0;position:relative;background:radial-gradient(#fff,#fdfdfd 16%,#fbfbfb 33%,#f8f8f8 49%,#efefef 66%,#dfdfdf 82%,#bfbfbf);overflow:hidden}.psv-container *{box-sizing:content-box}.psv-canvas-container{position:absolute;top:0;left:0;z-index:0;transition:opacity linear .1s}.psv-fullscreen-emulation{position:fixed!important;top:0!important;left:0!important;width:100%!important;height:100%!important}.psv-loader-container{display:flex;align-items:center;justify-content:center;position:absolute;top:0;left:0;width:100%;height:100%;z-index:80}.psv-loader{--psv-loader-border: 3px;--psv-loader-tickness: 10px;position:relative;display:flex;justify-content:center;align-items:center;color:#ffffffb3;width:150px;height:150px}.psv-loader-canvas{position:absolute;top:0;left:0;width:100%;height:100%;color:#3d3d3d80;z-index:-1}.psv-loader-text{font:600 16px sans-serif;text-align:center}.psv-loader--undefined .psv-loader-canvas{animation:psv-loader 2s cubic-bezier(.75,.25,.25,.75) infinite}@keyframes psv-loader{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.psv-navbar{display:flex;position:absolute;z-index:90;bottom:-40px;left:0;width:100%;height:40px;background:#3d3d3d80;transition:bottom ease-in-out .1s;font:16px sans-serif;cursor:default}.psv-navbar--open{bottom:0}.psv-navbar,.psv-navbar *{box-sizing:content-box}.psv-button{flex:0 0 auto;padding:10px;position:relative;cursor:pointer;height:20px;width:20px;background:transparent;color:#ffffffb3}.psv-button--active{background:#fff3}.psv-button--disabled{pointer-events:none;opacity:.5}.psv-button-svg{width:100%;transform:scale(1);transition:transform .2s ease;vertical-align:initial}.psv-button:not(.psv-button--disabled):focus-visible{outline:2px solid #007cff;outline-offset:-2px}.psv-container:not(.psv--is-touch) .psv-button--hover-scale:not(.psv-button--disabled):hover .psv-button-svg{transform:scale(1.2)}.psv-move-button+.psv-move-button{margin-left:-10px}.psv-download-button{color:#ffffffb3!important;text-decoration:none!important}.psv-download-button:before,.psv-download-button:after{display:none!important}.psv-custom-button{width:auto;min-width:20px}.psv-custom-button--no-padding{padding:0;height:100%}.psv-caption{flex:1 1 100%;color:#ffffffb3;overflow:hidden;text-align:center;cursor:unset;padding:unset;height:unset;width:unset}.psv-caption-content{display:inline-block;padding:10px;white-space:nowrap}.psv-zoom-range.psv-button{width:80px;height:1px;margin:10px 0;padding:9.5px 0;max-width:600px}.psv-zoom-range-line{position:relative;width:80px;height:1px;background:#ffffffb3;transition:all .3s ease}.psv-zoom-range-handle{position:absolute;border-radius:50%;top:-3px;width:7px;height:7px;background:#ffffffb3;transform:scale(1);transition:transform .3s ease}.psv-zoom-range:not(.psv-button--disabled):hover .psv-zoom-range-line{box-shadow:0 0 2px #ffffffb3}.psv-zoom-range:not(.psv-button--disabled):hover .psv-zoom-range-handle{transform:scale(1.3)}.psv-notification{position:absolute;z-index:100;bottom:-40px;display:flex;justify-content:center;box-sizing:border-box;width:100%;padding:0 2em;opacity:0;transition-property:opacity,bottom;transition-timing-function:ease-in-out;transition-duration:.2s}.psv-notification-content{max-width:50em;background:#3d3d3dcc;border-radius:4px;padding:.5em 1em;font:14px sans-serif;color:#fff}.psv-notification--visible{opacity:100;bottom:80px}.psv-overlay{display:flex;flex-direction:column;align-items:center;justify-content:center;position:absolute;z-index:110;top:0;right:0;bottom:0;left:0;background:radial-gradient(#fff,#fdfdfd 16%,#fbfbfb 33%,#f8f8f8 49%,#efefef 66%,#dfdfdf 82%,#bfbfbf);opacity:.8;cursor:default}.psv-overlay-image{width:100%;text-align:center;color:#303030}.psv-overlay-image svg{width:50%}@container psv-container (orientation: landscape){.psv-overlay-image svg{width:33%}}.psv-overlay-title{color:#000;margin-top:1em;font:30px sans-serif;text-align:center}.psv-overlay-text{color:#000c;font:20px sans-serif;opacity:.8;text-align:center}.psv-panel{position:absolute;z-index:90;right:0;height:100%;width:400px;max-width:calc(100% - 9px);background:#0a0a0ab3;transform:translate3d(100%,0,0);opacity:0;transition-property:opacity,transform;transition-timing-function:ease-in-out;transition-duration:.1s;cursor:default;margin-left:9px}.psv--has-navbar .psv-panel{height:calc(100% - 40px)}.psv-panel-close-button{display:none;position:absolute;top:-1px;right:0;width:19.2px;height:19.2px;padding:6.4px;background:transparent;color:#fff;transition:background .3s ease-in-out;cursor:pointer}.psv-panel-close-button svg{transition:transform .3s ease-in-out}.psv-panel-close-button:hover{background:#000000e6}.psv-panel-close-button:hover svg{transform:scale(-1)}.psv-panel-resizer{display:none;position:absolute;top:0;left:-9px;width:9px;height:100%;background-color:#000000e6;cursor:col-resize}.psv-panel-resizer:before{content:"";position:absolute;top:50%;left:5.5px;margin-top:-14.5px;width:1px;height:1px;box-shadow:1px 0 #fff,3px 0 #fff,5px 0 #fff,1px 2px #fff,3px 2px #fff,5px 2px #fff,1px 4px #fff,3px 4px #fff,5px 4px #fff,1px 6px #fff,3px 6px #fff,5px 6px #fff,1px 8px #fff,3px 8px #fff,5px 8px #fff,1px 10px #fff,3px 10px #fff,5px 10px #fff,1px 12px #fff,3px 12px #fff,5px 12px #fff,1px 14px #fff,3px 14px #fff,5px 14px #fff,1px 16px #fff,3px 16px #fff,5px 16px #fff,1px 18px #fff,3px 18px #fff,5px 18px #fff,1px 20px #fff,3px 20px #fff,5px 20px #fff,1px 22px #fff,3px 22px #fff,5px 22px #fff,1px 24px #fff,3px 24px #fff,5px 24px #fff,1px 26px #fff,3px 26px #fff,5px 26px #fff,1px 28px #fff,3px 28px #fff,5px 28px #fff;background:transparent}.psv-panel-content{width:100%;height:100%;box-sizing:border-box;color:#dcdcdc;font:16px sans-serif;overflow:auto}.psv-panel-content:not(.psv-panel-content--no-margin){padding:1em}.psv-panel-content--no-interaction{-webkit-user-select:none;user-select:none;pointer-events:none}.psv-panel--open{transform:translateZ(0);opacity:1;transition-duration:.2s}.psv-panel--open .psv-panel-close-button,.psv-panel--open .psv-panel-resizer{display:block}@container psv-container (max-width: 400px){.psv-panel{width:100%!important;max-width:none}.psv-panel-resizer{display:none!important}}.psv-panel-menu{height:100%;display:flex;flex-direction:column}.psv-panel-menu-title{flex:none;display:flex;align-items:center;font:24px sans-serif;margin:24px 12px}.psv-panel-menu-title svg{width:24px;height:24px;margin-right:12px}.psv-panel-menu-list{flex:1;list-style:none;margin:0;padding:0;overflow-x:hidden}.psv-panel-menu-item{min-height:1.5em;padding:.5em 1em;cursor:pointer;display:flex;align-items:center;justify-content:flex-start;transition:background .1s ease-in-out}.psv-panel-menu-item--active{outline:1px solid currentcolor;outline-offset:-1px}.psv-panel-menu-item-icon{flex:none;height:1.5em;width:1.5em;margin-right:.5em}.psv-panel-menu-item-icon img{max-width:100%;max-height:100%}.psv-panel-menu-item-icon svg{width:100%;height:100%}.psv-panel-menu-item:focus-visible{outline:2px solid #007cff;outline-offset:-2px}.psv-panel-menu--stripped .psv-panel-menu-item:hover{background:#fff3}.psv-panel-menu--stripped .psv-panel-menu-item:nth-child(odd),.psv-panel-menu--stripped .psv-panel-menu-item:nth-child(odd):before{background:#ffffff1a}.psv-panel-menu--stripped .psv-panel-menu-item:nth-child(2n),.psv-panel-menu--stripped .psv-panel-menu-item:nth-child(2n):before{background:transparent}.psv-container:not(.psv--is-touch) .psv-panel-menu-item:hover{background:#fff3}.psv-tooltip{position:absolute;z-index:50;box-sizing:border-box;max-width:200px;background:#3d3d3dcc;border-radius:4px;opacity:0;transition-property:opacity,transform;transition-timing-function:ease-in-out;transition-duration:.1s;cursor:default}.psv-tooltip-content{color:#fff;font:14px sans-serif;text-shadow:0 1px #000;padding:.5em 1em}.psv-tooltip-arrow{position:absolute;height:0;width:0;border:7px solid transparent}.psv-tooltip--top-left,.psv-tooltip--top-center,.psv-tooltip--top-right{transform:translate3d(0,5px,0)}.psv-tooltip--top-left .psv-tooltip-arrow,.psv-tooltip--top-center .psv-tooltip-arrow,.psv-tooltip--top-right .psv-tooltip-arrow{border-top-color:#3d3d3dcc}.psv-tooltip--bottom-left,.psv-tooltip--bottom-center,.psv-tooltip--bottom-right{transform:translate3d(0,-5px,0)}.psv-tooltip--bottom-left .psv-tooltip-arrow,.psv-tooltip--bottom-center .psv-tooltip-arrow,.psv-tooltip--bottom-right .psv-tooltip-arrow{border-bottom-color:#3d3d3dcc}.psv-tooltip--left-top,.psv-tooltip--center-left,.psv-tooltip--left-bottom{transform:translate3d(5px,0,0)}.psv-tooltip--left-top .psv-tooltip-arrow,.psv-tooltip--center-left .psv-tooltip-arrow,.psv-tooltip--left-bottom .psv-tooltip-arrow{border-left-color:#3d3d3dcc}.psv-tooltip--right-top,.psv-tooltip--center-right,.psv-tooltip--right-bottom{transform:translate3d(-5px,0,0)}.psv-tooltip--right-top .psv-tooltip-arrow,.psv-tooltip--center-right .psv-tooltip-arrow,.psv-tooltip--right-bottom .psv-tooltip-arrow{border-right-color:#3d3d3dcc}.psv-tooltip--left-top,.psv-tooltip--top-left{box-shadow:-3px -3px #5a5a5ab3}.psv-tooltip--top-center{box-shadow:0 -3px #5a5a5ab3}.psv-tooltip--right-top,.psv-tooltip--top-right{box-shadow:3px -3px #5a5a5ab3}.psv-tooltip--left-bottom,.psv-tooltip--bottom-left{box-shadow:-3px 3px #5a5a5ab3}.psv-tooltip--bottom-center{box-shadow:0 3px #5a5a5ab3}.psv-tooltip--right-bottom,.psv-tooltip--bottom-right{box-shadow:3px 3px #5a5a5ab3}.psv-tooltip--center-left{box-shadow:-3px 0 #5a5a5ab3}.psv-tooltip--center-right{box-shadow:3px 0 #5a5a5ab3}.psv-tooltip--visible{transform:translateZ(0);opacity:1}/*!
* Photo Sphere Viewer / Map Plugin 5.13.3
* @copyright 2015-2025 Damien "Mistic" Sorel
* @licence MIT (https://opensource.org/licenses/MIT)
*/.psv-container{--psv-map-plugin-loaded: true}.psv-map{position:absolute;margin:10px;z-index:40;transition:all ease-in-out .3s}.psv-map__container{position:absolute;top:0;left:0;width:100%;height:100%;z-index:-1;background:#3d3d3db3;overflow:hidden;transition:all ease-in-out .3s}.psv-map__container svg,.psv-map__container img,.psv-map__container canvas{width:100%;height:100%}.psv-map--round .psv-map__container{border-radius:50%;box-shadow:0 0 5px #000000b3}.psv-map--square{border-radius:8px;box-shadow:0 0 5px #000000b3;overflow:hidden}.psv-map__overlay{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.psv-map__toolbar{position:absolute;bottom:1em;left:calc(50% - 3.25em);display:flex;justify-content:center;align-items:center;font:12px sans-serif;padding:.25em;border-radius:1.5em;background:#222;color:#fff;-webkit-user-select:none;user-select:none;transition:opacity ease-in-out .3s}.psv-map__toolbar svg{height:1em;cursor:pointer}.psv-map__toolbar-text{width:4em;text-align:center}.psv-map__button{position:absolute;width:34px;aspect-ratio:1;line-height:0;background:#00000080;display:flex;justify-content:center;align-items:center;transform-origin:center;color:#ffffffb3;cursor:pointer;transition:all ease-in-out .3s}.psv-map__button svg{width:60%}.psv-map__button--top-left{left:0;top:0;border-bottom-right-radius:8px;transform:translate(-3px,-3px)}.psv-map__button--top-right{right:0;top:0;border-bottom-left-radius:8px;transform:translate(3px,-3px)}.psv-map__button--bottom-left{left:0;bottom:0;border-top-right-radius:8px;transform:translate(-3px,3px)}.psv-map__button--bottom-right{right:0;bottom:0;border-top-left-radius:8px;transform:translate(3px,3px)}.psv-map--round .psv-map__button{border-radius:50%}.psv-map--square .psv-map__button{transform:unset}.psv-map--maximized{margin:0!important;width:100%!important;height:100%!important}.psv--has-navbar .psv-map--maximized{height:calc(100% - 40px)!important}.psv-map--maximized,.psv-map--maximized .psv-map__container{border-radius:0}.psv-map--round.psv-map--maximized .psv-map__button{outline:2px solid currentcolor}.psv-map--round.psv-map--maximized .psv-map__button--top-left{left:10px;top:10px}.psv-map--round.psv-map--maximized .psv-map__button--top-right{right:10px;top:10px}.psv-map--round.psv-map--maximized .psv-map__button--bottom-left{left:10px;bottom:10px}.psv-map--round.psv-map--maximized .psv-map__button--bottom-right{right:10px;bottom:10px}.psv-map--collapsed{width:34px!important;height:34px!important}.psv-map--collapsed>*{opacity:0}.psv-map--collapsed .psv-map__button-close{opacity:1;transform:translate(0);z-index:1}.psv-map--top-left{top:0;left:0}.psv-map--top-right{top:0;right:0}.psv-map--bottom-left{bottom:0;left:0}.psv--has-navbar .psv-map--bottom-left{bottom:40px}.psv-map--bottom-right{bottom:0;right:0}.psv--has-navbar .psv-map--bottom-right{bottom:40px}/*!
* Photo Sphere Viewer / Virtual Tour Plugin 5.13.3
* @copyright 2015-2025 Damien "Mistic" Sorel
* @licence MIT (https://opensource.org/licenses/MIT)
*/.psv-container{--psv-virtual-tour-plugin-loaded: true}.psv-virtual-tour-tooltip h3{margin:0;padding:0;line-height:normal}.psv-virtual-tour-tooltip h3:not(:last-child){margin-bottom:.5em}.psv-virtual-tour-tooltip img{display:block;width:200px;margin:0 -1em}.psv-virtual-tour-tooltip img:first-child{border-radius:4px 4px 0 0}.psv-virtual-tour-tooltip img:last-child{border-radius:0 0 4px 4px}.psv-virtual-tour-tooltip img:not(:last-child){margin-bottom:.5em}.psv-virtual-tour-tooltip p{margin:0;padding:0;line-height:normal}.psv-virtual-tour-link{cursor:pointer;transform-origin:center}.psv-virtual-tour-arrows{position:absolute;overflow:visible!important;z-index:11;bottom:0;left:0;filter:drop-shadow(0 10px 2px rgba(0,0,0,.7));pointer-events:none;transition:margin ease-in-out .3s}.psv-virtual-tour-arrows .psv-virtual-tour-link{transition:opacity linear .2s}.psv-virtual-tour-arrows .psv-virtual-tour-link:hover{opacity:1!important}.psv-virtual-tour-arrow{width:100%;height:100%;padding:0;border:none;background:none;color:#fffc;border-radius:50%}.psv-virtual-tour-arrow:hover{animation:psv-virtual-tour-link-button-in 1s ease-out forwards}.psv-virtual-tour-loader{display:block;position:relative;width:40px;height:30px;margin:0 40px}.psv-virtual-tour-loader div{display:inline-block;position:absolute;left:10%;width:20%;background:#fff;animation:psv-virtual-tour-loader 1.2s cubic-bezier(0,.5,.5,1) infinite}.psv-virtual-tour-loader div:nth-child(1){left:10%;animation-delay:-.24s}.psv-virtual-tour-loader div:nth-child(2){left:40%;animation-delay:-.12s}.psv-virtual-tour-loader div:nth-child(3){left:70%;animation-delay:0}@keyframes psv-virtual-tour-loader{0%{top:10%;height:80%}50%,to{top:30%;height:40%}}@keyframes psv-virtual-tour-link-button-in{0%{box-shadow:0 0 #61aaf200}20%{box-shadow:0 0 0 5px #61aaf2}to{box-shadow:0 0 0 20px #61aaf200}}/*!
* Photo Sphere Viewer / Markers Plugin 5.13.3
* @copyright 2015-2025 Damien "Mistic" Sorel
* @licence MIT (https://opensource.org/licenses/MIT)
*/.psv-container{--psv-markers-plugin-loaded: true}.psv-markers{pointer-events:none;position:absolute;z-index:10;width:100%;height:100%}.psv-markers-svg-container{position:absolute;top:0;left:0;width:100%;height:100%;z-index:20}.psv-markers-css3d-container{position:absolute;z-index:21}.psv-marker{display:none;pointer-events:auto}.psv-marker--normal{position:absolute;top:0;left:0;z-index:30;overflow:visible;background-size:contain;background-repeat:no-repeat}.psv-marker--css3d{display:block}.psv-marker--transparent{display:block;opacity:0}.psv-marker--visible{display:block}.psv-marker--has-tooltip,.psv-marker--has-content{cursor:pointer}.psv-map{border-radius:8px!important;width:300px!important}.psv-map__container{background-color:#000}.psv-map--maximized{width:100%!important;height:100%!important}.psv-map__overlay svg{display:none!important}.psv-loader-canvas{display:none}.viewer-container{width:100%;position:relative;overflow:hidden;height:calc(100vh - 124px)}.viewer-container.admin-height{flex:none;height:50vh}.loading-overlay{position:absolute;top:0;left:0;z-index:1000;width:100%;height:100%;background-color:#000000a6;display:flex;flex-direction:column;justify-content:center;align-items:center}.loading-spinner{width:48px;height:48px;border:6px solid #fff;border-top:6px solid #3498db;border-radius:50%;animation:spin 1s linear infinite}.loading-text{color:#fff;font-size:16px;margin-top:12px}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.viewer-intro-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:2000;background-color:#0009;display:flex;align-items:center;justify-content:center;pointer-events:none}.viewer-intro-image{width:100%}@keyframes fadeOutIntro{0%{opacity:1}to{opacity:0;visibility:hidden}}.project-detail-page{display:flex;width:100%;overflow:hidden;min-width:95vw;position:relative;border:1px solid #ddd;box-sizing:border-box;background-color:#fff;height:80vh;scrollbar-width:thin;scrollbar-color:#ccc transparent}h3{margin-top:0}.project-detail-page *{-webkit-user-select:none;user-select:none}.viewer-panel{height:100%;overflow:hidden}.resizer{position:absolute;width:6px;background:#ccc;cursor:col-resize;height:100%;z-index:100;transition:background-color .2s;transform:translate(-50%)}.resizer:hover{background-color:#888}.control-panel{height:100%;overflow:auto}.tab-buttons{display:flex;gap:6px;padding:10px;border-bottom:1px solid #ddd;justify-content:center}.tab-buttons button{display:flex;align-items:center;gap:8px;padding:6px 10px;cursor:pointer;font-size:12px}.tab-buttons button.active{background-color:#4f46e5;color:#fff;font-weight:700}.tab-button .icon-img{width:20px;height:20px}.project-detail-button{padding:4px 8px;background-color:#f0f0f0;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:14px}.project-detail-button:hover{background-color:#e3f8ff}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.click-info{display:flex;flex-direction:column}.click-info>div>span{font-size:16px;color:#333}.icon-inline{margin-left:8px;font-size:16px;vertical-align:middle;cursor:pointer;background:none;border:none;border-radius:6px;transition:background-color .2s}.icon-inline:hover{background-color:#f1f3f5}.project-info-tab{padding:24px;border-radius:12px;display:flex;flex-direction:column;gap:20px}.field-group{display:flex;flex-direction:column}.field-group label{margin-bottom:8px;font-weight:600;color:#343a40}.field-group input,.field-group textarea{padding:10px 14px;border:1px solid #ced4da;border-radius:8px;font-size:16px;background-color:#fff;transition:border .2s ease}.field-group input:focus,.field-group textarea:focus{outline:none;border-color:#0d6efd;box-shadow:0 0 0 2px #0d6efd33}textarea{resize:vertical;min-height:100px}.save-btn{align-self:flex-end;background-color:#0d6efd;color:#fff;padding:10px 20px;border:none;border-radius:8px;font-weight:700;font-size:16px;cursor:pointer;transition:background-color .2s ease}.save-btn:hover{background-color:#0b5ed7}.project-info-tab .upload-video{display:grid;grid-template-columns:1fr auto;grid-template-areas:"label  label" "input  button";gap:10px 12px;align-items:center;padding-top:8px;border-top:1px dashed #e9ecef}.project-info-tab .upload-video>label{grid-area:label;margin-bottom:2px;font-weight:600;color:#343a40}.project-info-tab .upload-video input[type=file]{grid-area:input;padding:8px 10px;border:1px solid #ced4da;border-radius:8px;background-color:#fff;font-size:14px}.project-info-tab .upload-video input[type=file]::file-selector-button{padding:8px 12px;margin-right:10px;border:none;border-radius:6px;background-color:#e9ecef;cursor:pointer;transition:background-color .15s ease}.project-info-tab .upload-video input[type=file]::file-selector-button:hover{background-color:#dee2e6}.project-info-tab .upload-video input[type=file]::-webkit-file-upload-button{padding:8px 12px;margin-right:10px;border:none;border-radius:6px;background-color:#e9ecef;cursor:pointer;transition:background-color .15s ease}.project-info-tab .upload-video input[type=file]::-webkit-file-upload-button:hover{background-color:#dee2e6}.project-info-tab .upload-video .upload-btn{grid-area:button;align-self:stretch;padding:10px 16px;border:none;border-radius:8px;font-weight:700;font-size:15px;cursor:pointer;color:#fff;background-color:#6c757d;transition:background-color .2s ease,opacity .2s ease}.project-info-tab .upload-video .upload-btn:hover{background-color:#5c636a}.project-info-tab .upload-video .upload-btn:disabled{opacity:.6;cursor:not-allowed}.project-info-tab .video-preview{margin-top:8px;padding:12px;border:1px solid #e9ecef;border-radius:12px;background:#fafafa}.project-info-tab .video-preview h4{margin:0 0 8px;font-size:14px;color:#495057}.project-info-tab .video-preview video{width:100%;max-width:560px;height:auto;border-radius:8px;display:block;box-shadow:0 2px 10px #0000000d}@media (max-width: 640px){.project-info-tab .upload-video{grid-template-columns:1fr;grid-template-areas:"label" "input" "button"}}.project-detail-user-tab{display:flex;justify-content:space-between;padding:24px;flex-direction:column}.pd-user-list{flex:1;background-color:#f8f9fa;border-radius:12px;padding:20px;box-shadow:0 4px 12px #0000000f;display:flex;flex-direction:column;min-height:210px}.pd-user-list-title{font-size:18px;color:#343a40;margin:0}.user-row{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;background-color:#fff;border:1px solid #dee2e6;border-radius:8px;transition:background-color .2s ease}.user-row:hover{background-color:#f1f3f5}.username{font-weight:500;color:#212529}.user-row button{background-color:transparent;border:none;font-size:18px;cursor:pointer;transition:transform .15s ease}.user-row button:hover{transform:scale(1.2)}.scroll-box{overflow-y:auto;padding-right:6px;scrollbar-width:thin;scrollbar-color:#ccc transparent}.select-message{color:#777;font-style:italic;padding:16px 0}.project-map-tab{padding:24px;border-radius:12px;display:flex;flex-direction:column;gap:24px}.map-form{display:flex;flex-direction:column;gap:20px}.map-data-container{display:flex;gap:16px}.map-data{flex:1;display:flex;flex-direction:column}.map-form label{font-weight:600;margin-bottom:6px;color:#343a40}.map-form input{padding:10px 14px;border:1px solid #ced4da;border-radius:8px;font-size:16px;background-color:#fff;transition:border .2s ease}.dimension-group{display:flex;gap:16px}.dimension-group>div{width:50%;display:flex;flex-direction:column}.coordinate-group{display:flex;gap:16px}.coordinate-row{display:flex;gap:20px;flex-direction:column;width:50%}.coordinate-row>div{width:100%;display:flex;flex-direction:column}.coordinate-row>div>input{flex:1}.map-form input:focus{outline:none;border-color:#0d6efd;box-shadow:0 0 0 2px #0d6efd33}.map-actions{display:flex;gap:12px;margin-top:12px}.map-actions button{padding:10px 20px;border:none;border-radius:8px;font-weight:700;font-size:16px;cursor:pointer;transition:background-color .2s ease}.map-actions button.save-btn{background-color:#0d6efd;color:#fff}.map-actions button.save-btn:hover{background-color:#0b5ed7}.map-actions button.delete-btn{background-color:#dc3545;color:#fff}.map-actions button.delete-btn:hover{background-color:#c82333}.map-preview-image{max-width:20%;height:auto;border:1px solid #ccc;margin-bottom:.5rem}.map-change-btn{display:inline-block;padding:6px 12px;background-color:#eee;border:1px solid #999;border-radius:4px;cursor:pointer}.map-preview-wrapper{display:flex;flex-direction:column;align-items:center;gap:10px}.vr-image-add{padding:24px;border-radius:12px;display:flex;flex-direction:column;gap:24px;background-color:#fff;height:100%}.form-grid{display:flex;flex-direction:column;gap:20px}.form-grid.tab-scroll-box{max-height:44vh;overflow-y:auto;padding-right:6px;scrollbar-width:thin;scrollbar-color:#ccc transparent}.form-row{display:flex;flex-direction:column;gap:8px;width:100%}.form-row>div{width:100%;display:flex;flex-direction:column;gap:8px}.form-row.horizontal{gap:16px}.form-row.horizontal>div>div{display:flex;gap:8px}.form-row.horizontal>div>div>input{width:100%}.form-row.horizontal>div>div>select{width:100%;padding:10px 14px;border:1px solid #ced4da;border-radius:8px;font-size:16px;background-color:#fff}.form-row label{font-weight:600;margin-bottom:6px;color:#343a40;display:block}.form-row input{padding:10px 14px;border:1px solid #ced4da;border-radius:8px;font-size:16px;background-color:#fff;transition:border .2s ease}.form-row input:focus{outline:none;border-color:#0d6efd;box-shadow:0 0 0 2px #0d6efd33}.checkbox{display:flex;align-items:center;gap:8px;font-size:14px}.submit-btn{padding:10px 20px;border:none;border-radius:8px;font-weight:700;font-size:16px;cursor:pointer;background-color:#0d6efd;color:#fff;transition:background-color .2s ease}.submit-btn:hover{background-color:#0b5ed7}.vr-image-loading-overlay{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:#0006;display:flex;justify-content:center;align-items:center;z-index:9999}.vr-image-loading-overlay .loading-box{background-color:#fff;padding:24px 32px;border-radius:12px;font-size:18px;font-weight:700;box-shadow:0 4px 12px #0003}.color-selector{display:flex;align-items:center;gap:8px;position:relative}.color-circle{width:20px;height:20px;border-radius:50%;border:1px solid #ccc;cursor:pointer}.color-picker-popup{position:absolute;top:-10;left:50%;z-index:10;background:#fff;border:1px solid #ddd;padding:8px;border-radius:6px;box-shadow:0 2px 8px #0000001a}.vr-image-list{padding:16px}.filter-bar{display:flex;gap:12px;margin-bottom:16px;align-items:center;flex:1}.filter-bar input,.filter-bar select{padding:8px;font-size:14px;border:1px solid #ccc;border-radius:4px;width:30%}.vr-image-table{width:100%;border-collapse:collapse;font-size:14px}.vr-image-table thead{background-color:#f1f1f1}.vr-image-table th,.vr-image-table td{padding:10px 12px;border:1px solid #ddd;text-align:center}.vr-image-table tr:hover{background-color:#f0f8ff;cursor:pointer}.vr-image-table th:nth-child(2),.vr-image-table td:nth-child(2){width:25%}.vr-image-table th:last-child,.vr-image-table td:last-child{width:40%}.vr-image-tab{padding:24px}.vr-tab-buttons{display:flex;margin-bottom:10px;border-bottom:2px solid #ddd;box-sizing:border-box}.vr-tab-buttons button{padding:10px 20px;border:1px solid #ccc;background:#fff;cursor:pointer}.vr-tab-buttons button.active{background-color:#f2fdff;border-bottom:2px solid #000;font-weight:700}.vr-detail-container{flex:1;padding:20px;border-left:1px solid #ccc;background-color:#f9f9f9}.vr-detail-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.back-button{background-color:#ddd;color:#333;border:none;padding:6px 12px;border-radius:6px;cursor:pointer;font-size:14px;transition:background-color .2s ease}.back-button:hover{background-color:#ccc}.vr-detail-form{display:flex;flex-direction:column;gap:12px}.vr-detail-form label{font-weight:600;margin-bottom:4px;color:#555}.vr-detail-form input[type=text],.vr-detail-form input[type=number]{padding:8px 10px;border:1px solid #ccc;border-radius:4px;font-size:14px;background-color:#fff}.detail-form-row.horizontal>div>select{padding:8px 10px;border:1px solid #ccc;border-radius:4px;font-size:14px;background-color:#fff}.detail-form-row.horizontal>div>select:focus{outline:none;border-color:#0d6efd;box-shadow:0 0 0 2px #0d6efd33;transition:border .2s ease}.vr-detail-form input[type=checkbox]{margin-right:6px}.vr-detail-form button{margin-top:16px;padding:10px 14px;background-color:#4caf50;color:#fff;font-weight:700;border:none;border-radius:4px;cursor:pointer;width:100%}.vr-detail-form button:hover{background-color:#45a049}.vr-detail-form button:disabled{background-color:#ccc;cursor:not-allowed}.vr-detail-empty{padding:20px;color:#999;font-style:italic}.detail-form-row{display:flex;flex-direction:column;gap:8px;width:100%}.detail-form-row.horizontal{display:flex;flex-direction:row;width:100%;gap:8px;justify-content:space-between}.detail-form-row.horizontal>div{display:flex;flex-direction:column;width:48%}.detail-form-row.horizontal.gps-coordinates>div{width:30%}.detail-form-row label{font-weight:600;margin-bottom:6px;color:#343a40;display:block}.detail-form-row input{padding:10px 14px;border:1px solid #ced4da;border-radius:8px;font-size:16px;background-color:#fff;transition:border .2s ease}.detail-form-row input:focus{outline:none;border-color:#0d6efd;box-shadow:0 0 0 2px #0d6efd33}.detail-scroll-box{max-height:46vh;overflow-y:auto;padding-right:6px;scrollbar-width:thin;scrollbar-color:#ccc transparent}.delete-button{margin-top:10px;padding:10px 14px;background-color:#dc3545!important;color:#fff;font-weight:700;border:none;border-radius:4px;cursor:pointer;width:100%}.delete-button:hover{background-color:#c82333!important}.project-marker-tab{display:flex;flex-direction:column;padding:24px}.project-marker-content{display:flex}.left-panel{width:45%;border-right:1px solid #ccc;padding-right:12px;height:50vh}.right-panel{flex:1;position:relative}.marker-tab-header h4{margin-bottom:12px;margin-top:0}.submit-btn.marker-tab{margin-top:12px}.vr-image-selector{padding:10px}.vr-image-list{list-style:none;padding:0;margin:0;max-height:55vh;overflow-y:auto}.vr-image-item{display:flex;gap:10px;padding:6px;margin-bottom:8px;cursor:pointer;border:1px solid transparent;border-radius:6px;transition:background .2s ease}.vr-image-item:hover{background-color:#f0f0f0}.vr-image-item.selected{border-color:#007bff;background-color:#e8f0ff}.vr-image-thumb{width:60px;height:60px;object-fit:cover;border-radius:4px}.vr-image-info{flex:1}.vr-image-name{font-weight:700}.vr-image-meta{font-size:12px;color:#666}.vr-filter-input{width:100%;margin-top:6px;padding:6px 10px;font-size:14px;border:1px solid #ccc;border-radius:4px;box-sizing:border-box}.marker-editor-panel{padding:24px;border-radius:12px;background-color:#fff;display:flex;flex-direction:column;height:55vh;gap:24px}.marker-list{display:flex;flex-direction:column;gap:12px;max-height:50vh;overflow-y:auto;padding:0}.marker-list-item{padding:12px;border:1px solid #dee2e6;border-radius:8px;background:#f8f9fa;display:flex;align-items:center;cursor:pointer}.marker-thumbnail{width:50px;height:50px;object-fit:cover;border-radius:8px;margin-right:20px}.marker-info{display:flex;flex-direction:column;text-align:center;flex-grow:1}.marker-list-item:hover{background:#e9ecef}.marker-list-item span{font-size:14px;color:#343a40}.marker-add-btn{align-self:flex-start;background-color:#0d6efd;color:#fff;border:none;padding:10px 16px;border-radius:8px;font-weight:700;font-size:15px;cursor:pointer}.marker-add-btn:hover{background-color:#0b5ed7}.icon-btn{background:none;border:none;cursor:pointer;font-size:16px;padding:4px 8px;border-radius:6px;transition:background-color .15s ease}.icon-btn:hover{background-color:#e9ecef}.back-btn{background-color:#6c757d;color:#fff;padding:8px 14px;border-radius:8px;font-weight:700;border:none;cursor:pointer;margin-bottom:12px}.back-btn:hover{background-color:#5c636a}.click-info{display:flex;padding:10px}.click-info span{font-size:16px;color:#333;margin-bottom:4px}.click-info-text{display:flex;flex-direction:column}.icon-inline{margin:8px;font-size:16px;vertical-align:middle;cursor:pointer;background:none;border:none;padding:2px 6px;border-radius:6px;transition:background-color .2s;background-color:#f8f9fa}.icon-inline:hover{background-color:#ced0d3}.delete-btn{padding:10px 20px;border:none;border-radius:8px;font-weight:700;font-size:16px;cursor:pointer;background-color:#dc3545;color:#fff;transition:background-color .2s ease}.delete-btn:hover{background-color:#bb2d3b}.marker-form{display:flex;flex-direction:column;gap:16px;overflow-y:auto}.select-btn{padding:6px 12px;background-color:#007bff;color:#fff;border:none;border-radius:6px;font-size:14px;cursor:pointer;transition:background-color .2s ease}.select-btn:hover{background-color:#0056b3}.vr-image-select{display:flex;flex-direction:row!important}.form-row span{font-size:15px;color:#333;min-width:120px;font-weight:500;padding:4px 6px;background-color:#f8f9fa;border-radius:4px;border:1px solid #ccc}.vr-modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#00000080;display:flex;justify-content:center;align-items:center;z-index:9999}.vr-modal{background:#fff;padding:20px;width:600px;max-height:80vh;overflow-y:auto;border-radius:10px}.vr-modal-header{display:flex;justify-content:space-between;align-items:center}.close-btn{background:none;border:none;font-size:20px;cursor:pointer}.vr-image-list{margin-top:16px;display:flex;flex-direction:column;gap:10px}.vr-image-item{display:flex;align-items:center;cursor:pointer;border:1px solid #ccc;border-radius:8px;padding:8px;transition:background-color .2s ease}.vr-image-item:hover{background-color:#f1f1f1}.vr-image-item img{width:80px;height:60px;object-fit:cover;border-radius:4px;margin-right:12px}.vr-info .vr-name{font-weight:700}.vr-info .vr-meta{color:#666;font-size:14px}.tgv-wrap{width:100%;height:calc(100vh - 122px);display:flex;flex-direction:column;background:#111}.tgv-toolbar{display:flex;gap:8px;padding:8px;background:#000000b3;align-items:center;flex-wrap:wrap}.tgv-url{flex:1;min-width:240px;padding:6px 10px;border-radius:6px;border:1px solid #333;background:#1c1c1c;color:#eee}.tgv-filebtn{position:relative;display:inline-block;padding:6px 10px;border-radius:6px;background:#2a2a2a;color:#eee;cursor:pointer;-webkit-user-select:none;user-select:none}.tgv-filebtn input{display:none}.tgv-ctrl{display:flex;gap:6px;align-items:center;color:#ddd;font-size:12px;background:#202020;padding:4px 8px;border-radius:6px}.tgv-stage{position:relative;flex:1;min-height:300px;border-top:1px solid #222}.tgv-hint{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:#aaa;pointer-events:none;font-size:14px}.tgv-loading{position:absolute;top:10px;left:12px;color:#fff;font-weight:600;text-shadow:0 1px 2px rgba(0,0,0,.6);z-index:5}.threed-list .grid{width:100%;border-collapse:collapse}.threed-list th,.threed-list td{border:1px solid #ddd;padding:8px;vertical-align:top}.threed-list .desc{max-width:360px;white-space:pre-wrap}.threed-list .thumb img{width:64px;height:auto;border-radius:6px}.threed-list .empty{text-align:center;color:#888}.loading{padding:12px}.threed-form{display:flex;flex-direction:column;gap:12px}.threed-form .form-row{display:flex;flex-direction:column;gap:6px}.threed-form .form-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:8px}.threed-form .thumb-preview img{width:120px;border-radius:8px}.req{color:#ff4d4f;margin-left:4px}.hint{font-size:12px;color:#666}.btn{padding:6px 12px;border:1px solid #ccc;background:#fff;border-radius:6px;cursor:pointer}.btn.primary{background:#2b7cff;color:#fff;border-color:#2b7cff}.btn.danger{background:#ff4d4f;color:#fff;border-color:#ff4d4f}.back-row{margin-bottom:8px}.threed-model-tab{display:flex;flex-direction:column;gap:12px;padding:24px}.threed-tab-buttons{display:flex;gap:8px;margin-bottom:8px}.threed-tab-buttons button{padding:6px 12px;border:1px solid #ccc;background:#fff;border-radius:6px;cursor:pointer}.threed-tab-buttons .active{background:#2b7cff;color:#fff;border-color:#2b7cff}.viewer-select-page{display:flex;flex-direction:column;align-items:center;padding:40px;flex:1;background-image:url(https://d37ifvkay8wlc7.cloudfront.net/etc/background_01.png);background-size:cover;background-position:center;background-repeat:no-repeat}.vs-grid{margin-top:120px;display:flex;gap:50px}.vs-card{position:relative;padding:0;border:none;background:none;cursor:pointer;transition:transform .25s ease,box-shadow .25s ease;border-radius:15%}.vs-card:hover{transform:translateY(-5px);box-shadow:0 8px 20px #00000040}.vs-card img{display:block;width:320px;height:auto}.vs-card img:first-child{opacity:1;transition:opacity .3s ease}.vs-card img:last-child{position:absolute;top:0;left:0;opacity:0;transition:opacity .3s ease}.vs-card:hover img:first-child{opacity:0}.vs-card:hover img:last-child{opacity:1}
