body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent;border-radius:4px}::-webkit-scrollbar-thumb{background:#4a55684d;border-radius:4px;border:2px solid transparent;background-clip:content-box;transition:background .2s ease,background-clip .2s ease}::-webkit-scrollbar-thumb:hover{background:#4a556880;background-clip:content-box}*{scrollbar-width:thin;scrollbar-color:rgba(74,85,104,.3) transparent}*::-webkit-scrollbar{width:8px;height:8px}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background-color:#4a55684d;border-radius:4px;border:2px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background-color:#4a556880;background-clip:content-box}textarea::-webkit-scrollbar,input[type=text]::-webkit-scrollbar,input[type=search]::-webkit-scrollbar{width:8px}textarea::-webkit-scrollbar-track,input[type=text]::-webkit-scrollbar-track,input[type=search]::-webkit-scrollbar-track{background:transparent}textarea::-webkit-scrollbar-thumb,input[type=text]::-webkit-scrollbar-thumb,input[type=search]::-webkit-scrollbar-thumb{background:#4a55684d;border-radius:4px;border:2px solid transparent;background-clip:content-box}textarea::-webkit-scrollbar-thumb:hover,input[type=text]::-webkit-scrollbar-thumb:hover,input[type=search]::-webkit-scrollbar-thumb:hover{background:#4a556880;background-clip:content-box}.mobile-joystick-zone{position:fixed;bottom:calc(env(safe-area-inset-bottom,0px) + max(16px,2.5vh));left:max(16px,3vw);width:min(140px,35vmin);height:min(140px,35vmin);z-index:1001;pointer-events:auto;touch-action:none}.mobile-action-buttons{position:fixed;bottom:calc(env(safe-area-inset-bottom,0px) + max(16px,2.5vh));right:max(16px,3vw);z-index:1001;pointer-events:auto;display:grid;grid-template-columns:repeat(2,auto);gap:max(8px,1.5vmin);align-items:center;justify-items:center}.mobile-action-btn{width:min(54px,13vmin);height:min(54px,13vmin);border-radius:50%;border:1px solid rgba(255,255,255,.2);background:#1a202c99;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:#fff;display:flex;align-items:center;justify-content:center;touch-action:manipulation;-webkit-tap-highlight-color:transparent;cursor:pointer;box-shadow:0 4px 12px #0000004d;transition:transform .1s ease;padding:0;flex-shrink:0}.mobile-action-btn-primary{width:min(68px,16vmin);height:min(68px,16vmin);background:#667eeacc}@media(orientation:landscape)and (max-height:500px){.mobile-joystick-zone{width:min(196px,49vmin);height:min(196px,49vmin);bottom:calc(env(safe-area-inset-bottom,0px) + max(8px,1.5vh));left:max(8px,2vw)}.mobile-action-buttons{bottom:calc(env(safe-area-inset-bottom,0px) + max(8px,1.5vh));right:max(8px,2vw);gap:max(11px,2vmin)}.mobile-action-btn{width:min(76px,18vmin);height:min(76px,18vmin)}.mobile-action-btn-primary{width:min(95px,22vmin);height:min(95px,22vmin)}}.world-module{display:flex;flex-direction:column;height:100%;background:var(--color-bg-primary);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;border-radius:0}.world-container{flex:1;display:flex;position:relative}.game-canvas{flex:1;background:transparent;border-radius:0;display:flex;align-items:center;justify-content:center;overflow:hidden;width:100%;height:100%;position:relative}.game-canvas canvas{width:100%!important;height:100%!important;object-fit:contain;outline:none;transition:box-shadow .2s ease}.game-canvas canvas.keyboard-focused{box-shadow:inset 0 0 0 2px #1890ff80}.game-canvas canvas:focus{outline:none}.world-zoom-controls{user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.world-zoom-controls .ant-btn{transition:all .2s ease}.world-zoom-controls .ant-btn:disabled{opacity:.4;cursor:not-allowed}.world-zoom-controls .ant-btn:disabled:hover{background-color:var(--color-bg-tertiary)!important;color:var(--color-text-primary)!important}.modal-overlay{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#0009;display:flex;align-items:center;justify-content:center;z-index:2000;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.loading-modal{background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--spacing-md);padding:var(--spacing-2xl);text-align:center;box-shadow:0 20px 40px #00000080;color:var(--color-text-primary)}.loading-spinner{margin-bottom:20px}.spinner{width:40px;height:40px;border:4px solid #f3f3f3;border-top:4px solid #667eea;border-radius:50%;animation:spin 1s linear infinite;margin:0 auto}.meeting-modal{background:#fff;border-radius:20px;padding:0;max-width:480px;width:90%;max-height:80vh;overflow:hidden;box-shadow:0 25px 50px #0000004d;color:#333;position:relative}.modal-close{position:absolute;top:16px;right:16px;background:#0000001a;border:none;width:32px;height:32px;border-radius:50%;cursor:pointer;font-size:1.2rem;color:#666;display:flex;align-items:center;justify-content:center;transition:background-color .2s ease;z-index:10}.modal-close:hover{background:#0003}.modal-header{text-align:center;padding:40px 30px 20px;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}.modal-icon{font-size:3rem;margin-bottom:16px}.modal-header h3{margin:0 0 8px;font-size:1.5rem;font-weight:600}.modal-header p{margin:0;opacity:.9;font-size:1rem}.modal-content{padding:30px}.participants-section{margin-bottom:30px}.participants-section h4{margin:0 0 8px;font-size:1rem;font-weight:600;color:#333}.online-count{font-size:.9rem;color:#667eea;font-weight:500;margin-bottom:16px;display:block}.participants-list{display:flex;gap:8px;align-items:center}.participant-avatar{position:relative}.avatar-circle-small{width:40px;height:40px;border-radius:50%;background:linear-gradient(135deg,#4ecdc4,#44a08d);display:flex;align-items:center;justify-content:center;font-weight:600;font-size:.9rem;color:#fff;border:2px solid white;box-shadow:0 2px 8px #0000001a}.participant-avatar.add-more .avatar-circle-small{background:#f0f0f0;color:#999;border:2px dashed #ddd}.modal-actions{display:flex;flex-direction:column;gap:12px}.join-button{display:flex;align-items:center;justify-content:center;gap:8px;padding:14px 20px;border:none;border-radius:12px;font-size:1rem;font-weight:600;cursor:pointer;transition:all .2s ease}.join-button.primary{background:#333;color:#fff}.join-button.primary:hover{background:#555;transform:translateY(-1px)}.join-button.secondary{background:#f8f9fa;color:#333;border:1px solid #e9ecef}.join-button.secondary:hover{background:#e9ecef}.join-button.tertiary{background:transparent;color:#667eea;border:1px solid #667eea}.join-button.tertiary:hover{background:#667eea1a}.button-icon{font-size:1.1rem}@media(max-width:768px){.meeting-modal{width:95%;max-width:none}.modal-header{padding:30px 20px 20px}.modal-content{padding:20px}}.slideshow-container{position:relative;width:100%;height:100%;overflow:hidden;border-radius:8px}.slide{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:64px;height:64px;object-fit:cover;opacity:0;transition:opacity .5s ease-in-out;filter:brightness(1) drop-shadow(0 0 4px rgba(255,255,255,.8))}.slide.active{opacity:1;filter:brightness(1.2) drop-shadow(0 0 2px rgba(255,255,255,1))}.split-layout-component{height:100%;width:100%;background-color:var(--color-bg-primary)}.split-layout-component .ant-splitter-panel{overflow:hidden}.world-module-panel,.world-module-panel .world-module{height:100%;width:100%}.world-module-panel .world-container{height:100%;width:100%;position:relative}.world-module-panel .game-canvas,.video-panel{height:100%;width:100%}.video-panel-content{height:100%;width:100%;border-radius:6px;overflow:hidden}.chat-panel{height:100%;width:100%}@media(max-width:1200px){.split-layout-component .ant-splitter-panel:first-child{min-width:200px}}@media(max-width:768px){.split-layout-component .ant-splitter-panel:first-child{min-width:150px}.split-layout-component{flex-direction:column}}.video-communication-panel,.persistent-chat-panel{overflow:hidden}.persistent-chat-panel .ant-list{scrollbar-width:thin;scrollbar-color:var(--color-border-light) transparent}.persistent-chat-panel .ant-list::-webkit-scrollbar{width:6px}.persistent-chat-panel .ant-list::-webkit-scrollbar-track{background:transparent}.persistent-chat-panel .ant-list::-webkit-scrollbar-thumb{background-color:var(--color-border-light);border-radius:3px}.persistent-chat-panel .ant-list::-webkit-scrollbar-thumb:hover{background-color:var(--color-border)}.split-layout-component .ant-splitter-panel>div[style*="position: absolute"]{z-index:10;pointer-events:none}.split-layout-component .ant-splitter-panel>div[style*="position: absolute"]>*{pointer-events:auto}.split-layout-component .ant-splitter-panel{transition:all .3s ease}.split-layout-component .ant-splitter-panel:focus-within{outline:2px solid var(--color-primary);outline-offset:-2px}.video-panel .ant-spin-container{height:100%;display:flex;align-items:center;justify-content:center}.video-panel .ant-empty,.chat-panel .ant-empty{margin:auto}.main-split-layout,.main-split-layout>*,.main-split-layout .ant-splitter,.main-split-layout .ant-splitter-panel{height:100%}.video-panel>div:first-child,.chat-panel>div:first-child{height:100%}.split-layout-component .ant-splitter-resizer{background-color:var(--color-border-light);transition:background-color .2s ease}.split-layout-component .ant-splitter-resizer:hover{background-color:var(--color-primary)}.split-layout-component .ant-splitter-resizer-active{background-color:var(--color-primary)!important}.split-layout-component .ant-splitter-collapse-bar{background-color:var(--color-bg-secondary);border:1px solid var(--color-border-light);border-radius:4px}.split-layout-component .ant-splitter-collapse-bar:hover{background-color:var(--color-bg-tertiary);border-color:var(--color-primary)}[data-theme=dark] .split-layout-component{background-color:var(--color-bg-primary)}[data-theme=dark] .split-layout-component .ant-splitter-resizer{background-color:var(--color-border)}[data-theme=dark] .split-layout-component .ant-splitter-resizer:hover{background-color:var(--color-primary)}@media(prefers-contrast:high){.split-layout-component .ant-splitter-resizer{background-color:var(--color-text-primary)}.split-layout-component .ant-splitter-panel{border:1px solid var(--color-text-primary)}}@media(prefers-reduced-motion:reduce){.split-layout-component .ant-splitter-panel,.split-layout-component .ant-splitter-resizer{transition:none}}.split-layout-mobile .ant-tabs-nav{margin-bottom:0!important;background-color:var(--color-bg-secondary);border-bottom:1px solid var(--color-border-light)}.split-layout-mobile .ant-tabs-nav:before{border-bottom:none!important}.split-layout-mobile .ant-tabs-tab{padding:8px 12px!important}.split-layout-mobile .ant-tabs-tab-btn{color:var(--color-text-secondary)!important;display:flex!important;align-items:center!important;gap:6px!important;font-size:13px!important}.split-layout-mobile .ant-tabs-tab-active .ant-tabs-tab-btn{color:var(--color-accent)!important}.split-layout-mobile .ant-tabs-ink-bar{background:var(--color-accent)!important}.split-layout-mobile .ant-tabs{display:flex;flex-direction:column}.split-layout-mobile .ant-tabs-content-holder{flex:1;overflow:hidden}.split-layout-mobile .ant-tabs-content{height:100%}.split-layout-mobile .ant-tabs-tabpane{height:100%;overflow:hidden}.split-layout-mobile .world-container{height:100%}.mobile-meeting-hud{position:absolute;top:80px;left:50%;transform:translate(-50%);z-index:1002;display:flex;align-items:center;gap:8px;padding:4px 12px;border-radius:16px;background:#1ea06440;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid rgba(80,255,150,.4);box-shadow:0 4px 15px #0006;cursor:pointer;white-space:nowrap}.mobile-floating-controls{position:absolute;top:65px;left:16px;z-index:1100;display:flex;flex-direction:column;gap:16px}.mobile-fab.glass-button{width:54px;height:54px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:#2d3748b3;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid rgba(255,255,255,.2);box-shadow:0 8px 32px #00000080;color:#fff;transition:transform .2s ease,background .2s ease}.live-indicator{display:flex;align-items:center;gap:6px;background:#0006;padding:2px 8px;border-radius:12px}.live-indicator span{font-size:9px;font-weight:800;color:#50ff96;letter-spacing:.5px}.pulse-dot{width:8px;height:8px;background-color:#50ff96;border-radius:50%;box-shadow:0 0 #50ff9666;animation:pulse-green 1.5s infinite}@keyframes pulse-green{0%{transform:scale(.95);box-shadow:0 0 #50ff96b3}70%{transform:scale(1);box-shadow:0 0 0 6px #50ff9600}to{transform:scale(.95);box-shadow:0 0 #50ff9600}}.meeting-info{display:flex;align-items:center;gap:6px;color:#fff;font-size:13px;font-weight:500}.attention-pulse{animation:fab-pulse-chat 2s infinite ease-in-out;border-color:#667eeacc!important;background:#667eea66!important;box-shadow:0 0 20px #667eea80,0 8px 32px #00000080!important}.video-pulse{animation:fab-pulse-video 2s infinite ease-in-out;border-color:#ff3c3c!important;background:#dc2626!important;box-shadow:0 0 24px #ff3c3ccc,0 8px 32px #00000080!important}@keyframes fab-pulse-chat{0%{transform:scale(1);box-shadow:0 0 #667eeab3,0 8px 32px #00000080}50%{transform:scale(1.08);box-shadow:0 0 15px 5px #667eea4d,0 8px 32px #00000080;background-color:#667eea99}to{transform:scale(1);box-shadow:0 0 #667eea00,0 8px 32px #00000080}}@keyframes fab-pulse-video{0%{transform:scale(1);box-shadow:0 0 #ff3c3ce6,0 8px 32px #00000080;background-color:#dc2626}50%{transform:scale(1.12);box-shadow:0 0 20px 8px #ff3c3c80,0 8px 32px #00000080;background-color:#ff3c3c}to{transform:scale(1);box-shadow:0 0 #ff3c3c00,0 8px 32px #00000080;background-color:#dc2626}}.pulse-badge .ant-badge-count{animation:bounce-badge 1s infinite alternate}@keyframes bounce-badge{0%{transform:scale(1)}to{transform:scale(1.2)}}.glass-panel{background:#1a202c99;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.15)}.active-tab-label{color:var(--color-accent)!important;font-weight:600}.mobile-layout-component{height:100%;overflow:hidden;position:relative}.mobile-game-container{width:100%;height:100%;overflow:hidden;position:relative}.mobile-bottom-drawer .ant-drawer-body{display:flex!important;flex-direction:column!important}.mobile-drawer-tabs{flex:1;display:flex;flex-direction:column;overflow:hidden}.mobile-drawer-tabs .ant-tabs-nav{margin-bottom:0!important;padding-bottom:env(safe-area-inset-bottom,0px)!important}.mobile-drawer-tabs .ant-tabs-content-holder,.mobile-drawer-tabs .ant-tabs-content,.mobile-drawer-tabs .ant-tabs-tabpane.ant-tabs-tabpane-active{flex:1;display:flex;flex-direction:column;overflow:hidden}.tab-content-container{flex:1;display:flex;flex-direction:column;height:100%}.tablet-layout-component{height:100%;overflow:hidden;position:relative}.tablet-game-container{width:100%;height:100%;overflow:hidden;position:relative}.tablet-meeting-hud{position:absolute;top:80px;left:50%;transform:translate(-50%);z-index:1002;display:flex;align-items:center;gap:8px;padding:4px 12px;border-radius:16px;background:#1ea06440;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid rgba(80,255,150,.4);box-shadow:0 4px 15px #0006;cursor:pointer;white-space:nowrap}.tablet-floating-controls{position:absolute;top:72px;right:16px;z-index:1100;display:flex;flex-direction:column;gap:14px}.tablet-fab.glass-button{width:52px;height:52px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:#2d3748bf;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid rgba(255,255,255,.2);box-shadow:0 8px 32px #00000080;color:#fff;transition:transform .2s ease,background .2s ease}.tablet-video-overlay{position:absolute;top:72px;right:86px;width:320px;max-height:calc(100% - 160px);z-index:1050;border-radius:12px;display:flex;flex-direction:column;overflow:hidden;transition:max-height .25s ease,opacity .2s ease;background:#1a202c99;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.15)}.tablet-video-overlay.hidden{pointer-events:none;opacity:0;max-height:0}.tablet-video-overlay.visible{opacity:1}.tablet-video-overlay.collapsed{max-height:44px}.tablet-video-overlay-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:#252a3ae6;flex-shrink:0;min-height:44px;cursor:grab;-webkit-user-select:none;user-select:none}.tablet-video-overlay-header:active{cursor:grabbing}.tablet-video-title{color:#fff;font-size:13px;font-weight:500}.tablet-video-live-badge{color:#50ff96;font-size:11px;font-weight:700}.tablet-video-overlay-actions{display:flex;gap:2px}.tablet-video-overlay-body{flex:1;overflow:hidden;min-height:180px}.tablet-chat-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:#252a3ae6;flex-shrink:0;min-height:44px;cursor:grab;-webkit-user-select:none;user-select:none;border-bottom:1px solid rgba(255,255,255,.08)}.tablet-chat-header:active{cursor:grabbing}.tablet-chat-title{color:#ffffffbf;font-size:13px;font-weight:500}@keyframes messageSlideIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes messageFadeIn{0%{opacity:0}to{opacity:1}}@keyframes messageScaleIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes messageDelete{0%{opacity:1;transform:translate(0);max-height:200px}to{opacity:0;transform:translate(-100%);max-height:0;margin:0;padding:0}}@keyframes messageEdit{0%{background-color:#1890ff1a}to{background-color:transparent}}@keyframes reactionPop{0%{transform:scale(0);opacity:0}50%{transform:scale(1.2)}to{transform:scale(1);opacity:1}}@keyframes reactionBounce{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}@keyframes reactionPulse{0%,to{transform:scale(1)}50%{transform:scale(1.1)}}@keyframes typingDot{0%,60%,to{transform:translateY(0)}30%{transform:translateY(-10px)}}@keyframes typingFadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes uploadProgress{0%{width:0%}to{width:100%}}@keyframes uploadFadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}@keyframes uploadSuccess{0%{background-color:#52c41a33}to{background-color:transparent}}@keyframes uploadError{0%{background-color:#ff4d4f33}to{background-color:transparent}}@keyframes threadExpand{0%{max-height:0;opacity:0}to{max-height:1000px;opacity:1}}@keyframes threadCollapse{0%{max-height:1000px;opacity:1}to{max-height:0;opacity:0}}@keyframes threadHighlight{0%{background-color:#1890ff33}to{background-color:transparent}}@keyframes searchHighlight{0%{background-color:#faad1466}to{background-color:#faad1433}}@keyframes searchResultSlide{0%{opacity:0;transform:translate(-20px)}to{opacity:1;transform:translate(0)}}@keyframes roomJoin{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes roomLeave{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}@keyframes roomActive{0%,to{box-shadow:0 0 #1890ff66}50%{box-shadow:0 0 0 8px #1890ff00}}@keyframes notificationSlideIn{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}@keyframes notificationSlideOut{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(100%)}}@keyframes notificationPulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}@keyframes presenceOnline{0%{box-shadow:0 0 #52c41ab3}70%{box-shadow:0 0 0 10px #52c41a00}to{box-shadow:0 0 #52c41a00}}@keyframes presenceOffline{0%{opacity:1}to{opacity:.5}}@keyframes virtualItemFadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes virtualItemSlide{0%{opacity:0;transform:translate(-20px)}to{opacity:1;transform:translate(0)}}@keyframes modalFadeIn{0%{opacity:0}to{opacity:1}}@keyframes modalSlideUp{0%{opacity:0;transform:translateY(50px)}to{opacity:1;transform:translateY(0)}}@keyframes modalScale{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.message-enter{animation:messageSlideIn .3s ease-out}.message-enter-fast{animation:messageFadeIn .15s ease-out}.message-enter-scale{animation:messageScaleIn .2s ease-out}.message-exit{animation:messageDelete .3s ease-in forwards}.message-edit-highlight{animation:messageEdit 1s ease-out}.reaction-enter{animation:reactionPop .3s ease-out}.reaction-bounce{animation:reactionBounce .5s ease-in-out}.reaction-pulse{animation:reactionPulse .3s ease-in-out}.typing-enter{animation:typingFadeIn .2s ease-out}.upload-enter{animation:uploadFadeIn .3s ease-out}.upload-success{animation:uploadSuccess 1s ease-out}.upload-error{animation:uploadError 1s ease-out}.thread-expand{animation:threadExpand .3s ease-out}.thread-collapse{animation:threadCollapse .3s ease-out}.thread-highlight{animation:threadHighlight 1s ease-out}.search-highlight{animation:searchHighlight .5s ease-out}.search-result-enter{animation:searchResultSlide .3s ease-out}.room-enter{animation:roomJoin .3s ease-out}.room-exit{animation:roomLeave .3s ease-out}.room-active{animation:roomActive 2s ease-in-out infinite}.notification-enter{animation:notificationSlideIn .3s ease-out}.notification-exit{animation:notificationSlideOut .3s ease-in}.notification-pulse{animation:notificationPulse .5s ease-in-out}.presence-online{animation:presenceOnline 2s ease-in-out}.presence-offline{animation:presenceOffline .3s ease-out}.virtual-item-enter{animation:virtualItemFadeIn .2s ease-out}.modal-enter{animation:modalFadeIn .2s ease-out}.modal-enter-up{animation:modalSlideUp .3s ease-out}.modal-enter-scale{animation:modalScale .2s ease-out}.smooth-transition{transition:all .2s ease-in-out}.smooth-transition-fast{transition:all .1s ease-in-out}.smooth-transition-slow{transition:all .4s ease-in-out}.hover-lift{transition:transform .2s ease-out}.hover-lift:hover{transform:translateY(-2px)}.hover-scale{transition:transform .2s ease-out}.hover-scale:hover{transform:scale(1.02)}.hover-glow{transition:box-shadow .2s ease-out}.hover-glow:hover{box-shadow:0 0 10px #1890ff4d}.loading-pulse{animation:reactionPulse 1s ease-in-out infinite}.loading-shimmer{background:linear-gradient(90deg,#0000000d,#0000001a,#0000000d);background-size:200% 100%;animation:shimmer 1.5s infinite}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.dark-mode .message-enter{animation:messageSlideIn .3s ease-out}.dark-mode .reaction-enter{animation:reactionPop .3s ease-out}.dark-mode .upload-success{animation:uploadSuccess 1s ease-out}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.will-change-transform{will-change:transform}.will-change-opacity{will-change:opacity}.will-change-all{will-change:transform,opacity}.gpu-accelerated{transform:translateZ(0);backface-visibility:hidden;perspective:1000px}.map-editor-module{display:flex;flex-direction:column;height:100vh;background:var(--color-bg-primary);color:var(--color-text-primary);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;overflow:hidden}.editor-header{display:flex;flex-direction:column;justify-content:space-between;align-items:start;padding:var(--spacing-xs);background:var(--color-bg-secondary);border-bottom:1px solid var(--color-border-light);max-height:120px;overflow:hidden}.editor-title{display:flex;align-items:center;gap:var(--spacing-md)}.editor-icon{color:var(--color-accent)}.editor-title h1{margin:0;font-size:1.5rem;font-weight:600;color:var(--color-text-primary)}.editor-subtitle{font-size:.875rem;color:var(--color-text-secondary);margin-left:var(--spacing-sm)}.editor-actions{display:flex;gap:var(--spacing-sm)}.save-status-section .save-status-indicator{background:transparent;border:none;padding:0;min-width:auto}.editor-layout{display:grid;grid-template-columns:280px 1fr 320px;flex:1;overflow:hidden;position:relative}.editor-left-sidebar{width:280px;background:var(--color-bg-secondary);border-right:1px solid var(--color-border-light);display:flex;flex-direction:column;overflow:hidden}.editor-sidebar{width:320px;background:var(--color-bg-secondary);border-left:1px solid var(--color-border-light);display:flex;flex-direction:column;overflow:hidden}.sidebar-toolbar{background:var(--color-bg-tertiary);border-bottom:1px solid var(--color-border-light)}.toolbar-header{padding:var(--spacing-md) var(--spacing-lg);border-bottom:1px solid var(--color-border-light)}.toolbar-header h3{margin:0;font-size:.875rem;font-weight:600;color:var(--color-text-primary);text-transform:uppercase;letter-spacing:.5px}.editor-panel-tabs{display:flex;background:var(--color-bg-primary);border-bottom:1px solid var(--color-border-light)}.editor-panel-tab{flex:1;background:none;border:none;color:var(--color-text-secondary);padding:var(--spacing-md) var(--spacing-sm);cursor:pointer;transition:all .2s ease;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--spacing-xs);font-size:.875rem;position:relative;min-height:60px}.editor-panel-tab:hover{background:var(--color-bg-tertiary);color:var(--color-text-primary)}.editor-panel-tab.active{color:var(--color-accent);background:var(--color-bg-secondary)}.editor-panel-tab.active:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background:var(--color-accent)}.editor-panel-tab .tab-icon{font-size:1.2rem;display:flex;align-items:center;justify-content:center}.editor-panel-tab .tab-label{font-weight:500;font-size:.75rem;text-align:center}.sidebar-content{flex:1;overflow-y:auto;background:var(--color-bg-primary)}.tab-content-container{padding:var(--spacing-sm)}.editor-main{position:relative;overflow:hidden;min-width:0}.editor-content{padding:var(--spacing-lg);height:100%;overflow-y:auto;position:relative;z-index:10}.canvas-container{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;overflow:hidden}.fabric-canvas{border:1px solid var(--color-border-light);background:var(--color-bg-primary)}.save-status.saved{color:#10b981}.save-status.unsaved{color:#f59e0b}.save-status.saving{color:var(--color-accent)}.btn{display:flex;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-md);border:1px solid var(--color-border);border-radius:var(--spacing-xs);background:var(--color-bg-tertiary);color:var(--color-text-primary);font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s ease;text-decoration:none}.btn:hover{background:var(--color-bg-primary);border-color:var(--color-accent)}.btn-primary{background:var(--color-accent);border-color:var(--color-accent);color:var(--color-text-primary)}.btn-primary:hover{background:var(--color-accent-hover);border-color:var(--color-accent-hover)}.btn-secondary{background:var(--color-bg-tertiary);border-color:var(--color-border)}.btn-success{background:#10b981;border-color:#10b981;color:#fff}.btn-success:hover{background:#059669;border-color:#059669}.btn-danger{background:#ef4444;border-color:#ef4444;color:#fff}.btn-danger:hover{background:#dc2626;border-color:#dc2626}.impassable-area{cursor:pointer;transition:all .2s ease}.impassable-area:hover{fill:#ef444480;stroke-width:3}.placeholder-content{background:var(--color-bg-secondary);border:1px solid var(--color-border-light);border-radius:var(--spacing-sm);padding:var(--spacing-xl);text-align:center}.placeholder-content p{font-size:1.1rem;margin-bottom:var(--spacing-md);color:var(--color-text-secondary)}.placeholder-content ul{text-align:left;max-width:400px;margin:0 auto;color:var(--color-text-secondary)}.placeholder-content li{margin-bottom:var(--spacing-sm)}.preview-overlay{position:fixed;top:0;left:0;right:0;z-index:1000;background:var(--color-accent);color:#fff;padding:var(--spacing-sm)}.preview-notice{display:flex;align-items:center;justify-content:center;gap:var(--spacing-sm);font-weight:500}@media(max-width:1024px){.editor-layout{grid-template-columns:1fr;grid-template-rows:auto 1fr auto}.editor-left-sidebar{width:100%;max-height:200px;border-right:none;border-bottom:1px solid var(--color-border-light)}.editor-sidebar{width:100%;max-height:300px;border-left:none;border-top:1px solid var(--color-border-light)}}@media(max-width:768px){.editor-header{gap:var(--spacing-md);align-items:stretch;padding:var(--spacing-xs)}.editor-actions{justify-content:center}.sidebar-toolbar{border-bottom:1px solid var(--color-border-light)}.toolbar-header,.nav-header{padding:var(--spacing-sm) var(--spacing-md)}.toolbar-header h3,.nav-header h3{font-size:.75rem}.editor-panel-tabs{overflow-x:auto}.editor-panel-tab{min-width:80px;padding:var(--spacing-sm) var(--spacing-xs);min-height:50px}.editor-panel-tab .tab-icon{font-size:1rem}.editor-panel-tab .tab-label{font-size:.625rem}.sidebar-content{max-height:30vh}.editor-content{padding:var(--spacing-md)}}.drawing-overlay{position:absolute;inset:0;background:#4a90e21a;pointer-events:none;z-index:100}.drawing-notice{position:absolute;top:20px;left:50%;transform:translate(-50%);background:#4a90e2e6;color:#fff;padding:12px 20px;border-radius:6px;display:flex;align-items:center;gap:12px;font-size:14px;font-weight:500;pointer-events:auto;box-shadow:0 4px 12px #0003}.drawing-notice .btn{margin-left:8px;padding:4px 12px;font-size:12px;background:#fff3;border:1px solid rgba(255,255,255,.3);color:#fff}.drawing-notice .btn:hover{background:#ffffff4d;border-color:#ffffff80}.map-editor-page{width:100vw;height:100vh;background:var(--color-bg-primary);color:var(--color-text-primary);overflow:hidden}.access-denied{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;text-align:center;padding:var(--spacing-xl)}.access-denied h1{font-size:2rem;margin-bottom:var(--spacing-lg);color:var(--color-text-primary)}.access-denied p{font-size:1.1rem;margin-bottom:var(--spacing-md);color:var(--color-text-secondary);max-width:500px;line-height:1.6}.map-editor-page .map-editor-module{width:100%;height:100%}.App{display:flex;flex-direction:column;height:100dvh;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;position:relative;background:var(--color-bg-primary);color:var(--color-text-primary)}.App-header{background:var(--color-bg-secondary);color:var(--color-text-primary);padding:0 var(--spacing-md);display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--color-border-light);height:var(--header-height);box-sizing:border-box;flex-wrap:nowrap;overflow:hidden}.App-header h1{margin:0;font-size:1rem;font-weight:600;display:flex;align-items:center;gap:var(--spacing-sm)}.app-logo{color:var(--color-accent);flex-shrink:0;white-space:nowrap}.user-info{display:flex;gap:var(--spacing-md);font-size:.875rem;color:var(--color-text-secondary);align-items:center;flex-shrink:0}.admin-badge{background:var(--color-accent)!important;color:var(--color-text-primary)!important;padding:var(--spacing-xs) var(--spacing-sm)!important;border-radius:var(--spacing-xs)!important;font-size:.75rem!important;font-weight:600!important;text-transform:uppercase!important;letter-spacing:.5px!important;margin:0 var(--spacing-sm)!important}.map-editor-button{background:var(--color-accent);color:var(--color-text-primary);border:1px solid var(--color-accent);padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--spacing-xs);font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s ease;margin-left:var(--spacing-sm);display:flex;align-items:center;gap:var(--spacing-xs)}.map-editor-button:hover{background:var(--color-accent-hover);border-color:var(--color-accent-hover);transform:translateY(-1px);box-shadow:0 2px 8px #4299e14d}.logout-button{background:var(--color-bg-tertiary);color:var(--color-text-primary);border:1px solid var(--color-border);padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--spacing-xs);font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s ease;margin-left:var(--spacing-sm);display:flex;align-items:center;gap:var(--spacing-xs)}.logout-button:hover{background:var(--color-border);border-color:var(--color-accent)}.app-loading{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--color-bg-primary);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.loading-spinner{text-align:center;color:var(--color-text-primary)}.loading-spinner .spinner{width:40px;height:40px;border:4px solid var(--color-border);border-top:4px solid var(--color-accent);border-radius:50%;animation:spin 1s linear infinite;margin:0 auto var(--spacing-md) auto}.loading-spinner p{margin:0;font-size:1.1rem;font-weight:500;color:var(--color-text-secondary)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.main-content{flex:1;display:flex;overflow:hidden;background:var(--color-bg-primary)}.module-content{flex:1;height:100%}:root{--spacing-xs: .25rem;--spacing-sm: .5rem;--spacing-md: 1rem;--spacing-lg: 2rem;--spacing-xl: 3rem;--spacing-2xl: 4rem;--color-bg-primary: #1a1d29;--color-bg-secondary: #252a3a;--color-bg-tertiary: #2d3748;--color-text-primary: #ffffff;--color-text-secondary: #a0aec0;--color-text-muted: #718096;--color-accent: #4299e1;--color-accent-hover: #3182ce;--color-border: #4a5568;--color-border-light: #2d3748;--sidebar-width: 480px;--header-height: 50px}.main-content{transition:width .3s cubic-bezier(.4,0,.2,1),margin-right .3s cubic-bezier(.4,0,.2,1);width:100%}.main-content.panel-open{width:calc(100% - var(--sidebar-width));margin-right:0;padding-right:2px}@media(max-width:480px){:root{--sidebar-width: 100vw}.App-header{flex-direction:column;height:auto;gap:var(--spacing-xs);padding:var(--spacing-sm)}.user-info{justify-content:center}.main-content.panel-open{width:calc(100% - 100vw);margin-right:0}}@media(max-width:480px){.App-header h1{font-size:1.25rem}.user-info{flex-direction:column;gap:var(--spacing-sm)}.map-editor-button,.logout-button{margin-left:0;justify-content:center}}.mobile-drawer .ant-drawer-body{background-color:var(--color-bg-primary)}.mobile-drawer .ant-menu{color:var(--color-text-primary)}.mobile-drawer .ant-menu-item{height:50px!important;line-height:50px!important;margin-block:4px!important}.mobile-drawer .ant-menu-item-selected{background-color:var(--color-bg-tertiary)!important;color:var(--color-accent)!important}@media(max-width:768px){:root{--header-height: 40px}.ant-layout-header{padding:0 10px!important}.ant-list-item{padding:var(--spacing-sm) var(--spacing-md)!important}.ant-modal-content{padding:var(--spacing-md)!important}.ant-tabs-nav-list{overflow-x:auto!important;scrollbar-width:none}.ant-tabs-nav-list::-webkit-scrollbar{display:none}.ant-segmented-item-label{padding:0 4px!important}}.version-number{position:absolute;bottom:8px;right:12px;font-size:10px;opacity:.5;pointer-events:none}
