.intersection-viewer{width:100%;height:100%;position:relative;font-family:Arial,sans-serif;overflow:hidden;box-sizing:border-box}.intersection-viewer:fullscreen,.intersection-viewer:-webkit-full-screen,.intersection-viewer:-moz-full-screen,.intersection-viewer:-ms-fullscreen{overflow:hidden!important}body:has(.intersection-viewer:fullscreen),body:has(.intersection-viewer:-webkit-full-screen),body:has(.intersection-viewer:-moz-full-screen),body:has(.intersection-viewer:-ms-fullscreen){margin:0!important;padding:0!important;overflow:hidden!important}html:has(.intersection-viewer:fullscreen),html:has(.intersection-viewer:-webkit-full-screen),html:has(.intersection-viewer:-moz-full-screen),html:has(.intersection-viewer:-ms-fullscreen){margin:0!important;padding:0!important;overflow:hidden!important}.intersection-viewer:not(:fullscreen):not(:-webkit-full-screen):not(:-moz-full-screen):not(:-ms-fullscreen){width:100%;height:100%}.intersection-viewer:fullscreen{width:100vw!important;height:100vh!important;background:#f5f5f5!important;margin:0!important;padding:0!important;box-sizing:border-box!important}.intersection-viewer:-webkit-full-screen{width:100vw!important;height:100vh!important;background:#f5f5f5!important;margin:0!important;padding:0!important;box-sizing:border-box!important}.intersection-viewer:-moz-full-screen{width:100vw!important;height:100vh!important;background:#f5f5f5!important;margin:0!important;padding:0!important;box-sizing:border-box!important}.intersection-viewer:-ms-fullscreen{width:100vw!important;height:100vh!important;background:#f5f5f5!important;margin:0!important;padding:0!important;box-sizing:border-box!important}.intersection-viewer:fullscreen .canvas-container,.intersection-viewer:-webkit-full-screen .canvas-container,.intersection-viewer:-moz-full-screen .canvas-container,.intersection-viewer:-ms-fullscreen .canvas-container{width:100vw!important;height:100vh!important;position:fixed!important;top:0!important;left:0!important;margin:0!important;padding:0!important;z-index:0!important}.intersection-viewer:fullscreen *,.intersection-viewer:-webkit-full-screen *,.intersection-viewer:-moz-full-screen *,.intersection-viewer:-ms-fullscreen *{box-sizing:border-box!important}.intersection-viewer:fullscreen:before,.intersection-viewer:-webkit-full-screen:before,.intersection-viewer:-moz-full-screen:before,.intersection-viewer:-ms-fullscreen:before{content:"";position:fixed;top:0;left:0;width:100vw;height:100vh;background:#f5f5f5;z-index:-1}.canvas-container{width:100%;height:100%;position:relative}.canvas-container canvas{position:absolute;top:0;left:0}.toolbar{position:absolute;top:var(--margin-size, 2%);left:var(--margin-size, 2%);background:#fffffff2;padding:calc(16px * var(--font-scale, 1));border-radius:12px;box-shadow:0 4px 20px #00000026;z-index:1000;display:flex;flex-direction:column;gap:calc(16px * var(--font-scale, 1));min-width:var(--toolbar-size, 200px);max-width:calc(var(--viewer-width, 100%) * var(--max-width-ratio, .4));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.2);max-height:calc(var(--viewer-height, 100%) * .8);overflow-y:auto;font-size:calc(1em * var(--font-scale, 1))}.tool-group{display:flex;flex-direction:column;gap:8px}.tool-group-title{font-size:12px;font-weight:600;color:#666;text-transform:uppercase;letter-spacing:.5px;margin-bottom:4px;border-bottom:1px solid #e0e0e0;padding-bottom:4px}.switch-container{padding:4px 0}.switch-label{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:13px;color:#333;-webkit-user-select:none;user-select:none;transition:all .2s ease}.switch-label:hover{color:#2196f3}.switch-checkbox{display:none}.switch-slider{position:relative;width:40px;height:20px;background:#ccc;border-radius:20px;transition:all .3s ease;box-shadow:inset 0 2px 4px #0000001a}.switch-checkbox:checked+.switch-slider{background:#2196f3}.switch-slider:before{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;background:#fff;border-radius:50%;transition:all .3s ease;box-shadow:0 2px 4px #0003}.switch-checkbox:checked+.switch-slider:before{transform:translate(20px)}.switch-text{font-weight:500;white-space:nowrap}.tool-button{padding:calc(8px * var(--font-scale, 1)) calc(12px * var(--font-scale, 1));background:linear-gradient(135deg,#4caf50,#45a049);color:#fff;border:none;border-radius:8px;cursor:pointer;font-size:calc(12px * var(--font-scale, 1));font-weight:500;transition:all .3s ease;box-shadow:0 2px 4px #0000001a;position:relative;overflow:hidden;text-align:left}.tool-button:hover{background:linear-gradient(135deg,#45a049,#3d8b40);transform:translateY(-1px);box-shadow:0 4px 8px #4caf504d}.tool-button.active{background:linear-gradient(135deg,#388e3c,#2e7d32);box-shadow:0 4px 8px #28a7454d}.tool-button:disabled{background:linear-gradient(135deg,#ccc,#999);cursor:not-allowed;transform:none;box-shadow:none;opacity:.7}.tool-button:disabled:hover{background:linear-gradient(135deg,#ccc,#999);transform:none;box-shadow:none}.tool-button.active:before{content:"";position:absolute;left:0;top:0;width:3px;height:100%;background:#fff;opacity:.8}.tool-button.config-btn{color:#fff;border:none;border-radius:8px;padding:8px 12px;font-size:12px;font-weight:500;cursor:pointer;transition:all .3s ease;box-shadow:0 2px 4px #0000001a}.tool-button.config-btn:disabled{background:linear-gradient(135deg,#ccc,#999)!important;cursor:not-allowed;transform:none;box-shadow:none;opacity:.7}.tool-button.config-btn:disabled:hover{background:linear-gradient(135deg,#ccc,#999)!important;transform:none;box-shadow:none}.tool-button.clear-btn:disabled{background:linear-gradient(135deg,#ccc,#999)!important;cursor:not-allowed;transform:none;box-shadow:none;opacity:.7}.tool-button.clear-btn:disabled:hover{background:linear-gradient(135deg,#ccc,#999)!important;transform:none;box-shadow:none}.tool-button.export-btn{background:linear-gradient(135deg,#2196f3,#1976d2)}.tool-button.export-btn:hover{background:linear-gradient(135deg,#1976d2,#1565c0);transform:translateY(-1px);box-shadow:0 4px 8px #2196f34d}.tool-button.import-btn{background:linear-gradient(135deg,#ff9800,#f57c00)}.tool-button.import-btn:hover{background:linear-gradient(135deg,#f57c00,#ef6c00);transform:translateY(-1px);box-shadow:0 4px 8px #ff98004d}.tool-button.view-btn{background:linear-gradient(135deg,#9c27b0,#7b1fa2)}.tool-button.view-btn:hover{background:linear-gradient(135deg,#7b1fa2,#6a1b9a);transform:translateY(-1px);box-shadow:0 4px 8px #9c27b04d}.tool-button.clear-btn{background:linear-gradient(135deg,#f44336,#d32f2f)}.tool-button.clear-btn:hover{background:linear-gradient(135deg,#d32f2f,#c62828);transform:translateY(-1px);box-shadow:0 4px 8px #f443364d}.canvas-stats{position:absolute;bottom:var(--margin-size, 2%);left:var(--margin-size, 2%);background:#2a2a2af2;color:#fff;padding:calc(12px * var(--font-scale, 1)) calc(16px * var(--font-scale, 1));border-radius:12px;font-size:calc(12px * var(--font-scale, 1));z-index:1000;min-width:var(--toolbar-size, 200px);max-width:calc(var(--viewer-width, 100%) * var(--max-width-ratio, .4));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid #555;box-shadow:0 4px 12px #0000004d}.stats-title{font-weight:600;margin-bottom:8px;color:#4caf50;border-bottom:1px solid #555;padding-bottom:4px}.stats-content{line-height:1.4}.properties-panel{position:absolute;top:var(--margin-size, 2%);right:var(--margin-size, 2%);background:#fffffff2;padding:calc(20px * var(--font-scale, 1));border-radius:12px;box-shadow:0 4px 20px #00000026;z-index:1000;min-width:var(--panel-size, 250px);max-width:calc(var(--viewer-width, 100%) * var(--max-width-ratio, .4));max-height:calc(var(--viewer-height, 100%) * .96);overflow-y:auto;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.2);font-size:calc(1em * var(--font-scale, 1))}.properties-panel h3{margin:0 0 15px;color:#333;font-size:16px;border-bottom:2px solid #4caf50;padding-bottom:5px}.color-presets{display:flex;gap:8px;margin-bottom:15px;padding:10px;background:#f5f5f5;border-radius:8px}.color-preset{width:25px;height:25px;border:2px solid #ddd;border-radius:6px;cursor:pointer;transition:border-color .3s,transform .2s}.color-preset:hover{border-color:#4caf50;transform:scale(1.1)}.property-group{margin-bottom:15px;padding:12px;border:1px solid #e0e0e0;border-radius:8px;background-color:#fafafa}.property-group .lane-count{display:flex}.property-group label{display:block;margin-bottom:8px;font-weight:700;color:#555;font-size:14px;margin-right:15px}.property-group input,.property-group select{width:100%;padding:8px;border:1px solid #ddd;border-radius:6px;font-size:14px;background-color:#fff;box-sizing:border-box;transition:border-color .3s}.property-group input:focus,.property-group select:focus{border-color:#4caf50;outline:none;box-shadow:0 0 0 2px #4caf5033}.property-group input[type=color]{height:40px;padding:2px;cursor:pointer}.property-group input[type=number]{width:60px;display:inline-block}.property-button{width:100%;padding:10px;background:linear-gradient(135deg,#4caf50,#45a049);color:#fff;border:none;border-radius:6px;cursor:pointer;font-size:14px;font-weight:500;margin-top:8px;transition:all .3s ease}.property-button:hover{background:linear-gradient(135deg,#45a049,#3d8b40);transform:translateY(-1px);box-shadow:0 2px 8px #4caf504d}.property-button:disabled{background:linear-gradient(135deg,#ccc,#999);cursor:not-allowed;transform:none;box-shadow:none;opacity:.7}.property-button:disabled:hover{background:linear-gradient(135deg,#ccc,#999);transform:none;box-shadow:none}.property-button.delete-button{background:linear-gradient(135deg,#f44336,#d32f2f);margin-top:10px}.property-button.delete-button:hover{background:linear-gradient(135deg,#d32f2f,#c62828);box-shadow:0 2px 8px #f443364d}.property-button.delete-button:disabled{background:linear-gradient(135deg,#ccc,#999);cursor:not-allowed;transform:none;box-shadow:none;opacity:.7}.info-display{background:#f8f9fa;border:1px solid #e9ecef;border-radius:6px;padding:12px;margin-top:8px}.info-display p{margin:6px 0;font-size:13px;line-height:1.4;color:#495057}.info-display p strong{color:#2c3e50;font-weight:600;min-width:80px;display:inline-block}.properties-panel h4{margin:0 0 10px;color:#2c3e50;font-size:14px;font-weight:600;display:flex;align-items:center;gap:6px;border-bottom:1px solid #dee2e6;padding-bottom:6px}.property-group:has(.info-display){background-color:#f8f9fa;border-color:#4caf50;border-width:2px}.property-group:has(h4:contains("修改")){background-color:#fff3cd;border-color:#ffc107}.status-info{position:absolute;bottom:var(--margin-size, 2%);right:var(--margin-size, 2%);background:#2a2a2af2;color:#fff;padding:calc(12px * var(--font-scale, 1)) calc(16px * var(--font-scale, 1));border-radius:12px;font-size:calc(12px * var(--font-scale, 1));z-index:1000;min-width:var(--toolbar-size, 200px);max-width:calc(var(--viewer-width, 100%) * var(--max-width-ratio, .4));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid #555;box-shadow:0 4px 12px #0000004d}.status-info p{margin:4px 0;line-height:1.4}.properties-panel{animation:slideInRight .3s ease-out}.toolbar{animation:slideInLeft .3s ease-out}.canvas-stats{animation:slideInUp .3s ease-out}@keyframes slideInRight{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@keyframes slideInLeft{0%{opacity:0;transform:translate(-20px)}to{opacity:1;transform:translate(0)}}@keyframes slideInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.tool-button:focus{outline:none;box-shadow:0 0 0 3px #4caf504d}.tool-button:active{transform:translateY(0)}.canvas-container canvas{border:1px solid #ddd}.intersection-info-panel{position:absolute;top:80px;right:20px;background:#2a2a2af2;border:1px solid #555;border-radius:12px;padding:15px;min-width:280px;max-width:350px;color:#fff;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;box-shadow:0 4px 12px #0000004d;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:1001}.intersection-info-panel h3{margin:0 0 15px;color:#4caf50;font-size:16px;font-weight:600;border-bottom:1px solid #555;padding-bottom:8px}.intersection-info-panel .info-item{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;padding:5px 0}.intersection-info-panel .info-item label{font-weight:500;color:#ccc;font-size:13px}.intersection-info-panel .info-item span{color:#fff;font-size:13px;background:#ffffff1a;padding:2px 8px;border-radius:4px}.name-edit{display:flex;gap:5px;align-items:center}.name-edit input{background:#ffffff1a;border:1px solid #555;border-radius:4px;padding:4px 8px;color:#fff;font-size:12px;width:120px}.name-edit input:focus{outline:none;border-color:#4caf50}.name-edit button{background:#4caf50;border:none;border-radius:3px;padding:4px 8px;color:#fff;font-size:11px;cursor:pointer;transition:background-color .2s}.name-edit button:hover{background:#45a049}.name-edit button:last-child{background:#f44336}.name-edit button:last-child:hover{background:#da190b}.name-display{display:flex;gap:8px;align-items:center}.name-display button{background:#ffffff1a;border:1px solid #555;border-radius:3px;padding:2px 6px;color:#ccc;font-size:11px;cursor:pointer;transition:all .2s}.name-display button:hover{background:#fff3;color:#fff}.tool-button.info-button{background:linear-gradient(135deg,#2196f3,#1976d2);border:1px solid #1976d2}.tool-button.info-button:hover{background:linear-gradient(135deg,#1976d2,#1565c0)}.tool-button.info-button:disabled{background:#2196f34d;border-color:#1976d24d}.tool-button.apply-button{background:linear-gradient(135deg,#4caf50,#388e3c);border:1px solid #388e3c}.tool-button.apply-button:hover{background:linear-gradient(135deg,#388e3c,#2e7d32)}.tool-button.apply-button:disabled{background:#4caf504d;border-color:#388e3c4d}.intersection-status-indicator{position:absolute;bottom:90px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:8px;background:#2a2a2af2;border:1px solid #555;border-radius:20px;padding:8px 15px;color:#fff;font-size:12px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:1000;box-shadow:0 4px 12px #0000004d}.status-dot{width:8px;height:8px;border-radius:50%;background:#666;animation:pulse 2s infinite}.status-dot.active{background:#4caf50}@keyframes pulse{0%{box-shadow:0 0 #4caf50b3}70%{box-shadow:0 0 0 10px #4caf5000}to{box-shadow:0 0 #4caf5000}}.lane-groups-info-section{margin-top:20px;padding:15px;background:#ffffff0d;border:1px solid #555;border-radius:8px}.lane-groups-info-section h4{margin:0 0 15px;color:#4caf50;font-size:14px;font-weight:600;border-bottom:1px solid #555;padding-bottom:8px}.lane-groups-list{display:flex;flex-direction:column;gap:12px}.lane-group-item{background:#ffffff0d;border:1px solid #666;border-radius:6px;padding:12px;transition:box-shadow .2s,background-color .2s}.lane-group-item:hover{background:#ffffff14;box-shadow:0 2px 8px #0000004d}.lane-group-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.lane-group-header strong{color:#fff;font-size:14px}.lane-group-id{font-size:11px;color:#aaa;font-family:monospace;background:#ffffff1a;padding:2px 6px;border-radius:3px}.lane-group-details{display:grid;grid-template-columns:1fr 1fr;gap:6px;font-size:12px;color:#ccc}.lane-group-details>div{display:flex;justify-content:space-between;align-items:center;padding:2px 0}.no-lane-groups{text-align:center;color:#888;font-style:italic;font-size:13px;padding:20px}.lanes-info-header{margin-bottom:10px;padding:10px;background:#e3f2fd;border:1px solid #bbdefb;border-radius:6px}.lanes-direction-info{margin:0;font-size:12px;color:#1976d2;line-height:1.4}.lanes-container{max-height:300px;overflow-y:auto;border:1px solid #e0e0e0;border-radius:6px;padding:10px;background:#fafafa}.lane-item{background:#fff;border:1px solid #ddd;border-radius:6px;margin-bottom:10px;padding:12px;box-shadow:0 1px 3px #0000001a}.lane-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid #eee}.lane-header-left{display:flex;flex-direction:column;gap:2px}.lane-number-row{display:flex;align-items:center;gap:8px}.lane-number{font-weight:700;color:#2c3e50;font-size:14px}.direction-icon{width:24px;height:16px;object-fit:contain;opacity:.8;transition:opacity .2s}.direction-icon:hover{opacity:1}.lane-position{font-size:11px;color:#6c757d;font-style:italic}.remove-lane-btn{background:#dc3545;color:#fff;border:none;border-radius:50%;width:24px;height:24px;cursor:pointer;font-size:16px;display:flex;align-items:center;justify-content:center;transition:background-color .3s}.remove-lane-btn:hover{background:#c82333}.lane-controls{display:flex;flex-direction:column;gap:8px}.lane-control-row{display:flex;align-items:center;gap:10px}.lane-control-row label{min-width:80px;margin:0;font-size:12px;color:#495057;font-weight:500}.lane-control-row input,.lane-control-row select{flex:1;padding:4px 8px;border:1px solid #ced4da;border-radius:4px;font-size:12px;min-height:24px}.lane-control-row input[type=number]{width:60px;flex:none}.lane-control-row input[type=color]{width:40px;height:24px;padding:0;border:1px solid #ced4da;border-radius:4px;cursor:pointer;flex:none}.direction-select-container{display:flex;align-items:center;gap:8px;flex:1}.direction-select{font-family:Arial Unicode MS,Arial,sans-serif;flex:1}.direction-preview-icon{width:32px;height:20px;object-fit:contain;opacity:.9;transition:opacity .2s;background:#6c7680;border:1px solid #dee2e6;border-radius:3px;padding:2px}.direction-preview-icon:hover{opacity:1;background:#e9ecef}.unit{font-size:11px;color:#6c757d;margin-left:4px}.add-lane-btn{width:100%;padding:8px;background:#28a745;color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:12px;margin-top:10px;transition:background-color .3s}.add-lane-btn:hover{background:#218838}.no-lanes-message{text-align:center;padding:20px;color:#6c757d;font-style:italic;background:#f8f9fa;border:1px dashed #dee2e6;border-radius:4px}.no-lanes-message p{margin:0;font-size:13px}.intersection-viewer[style*="--layout-mode: tiny"] .toolbar{min-width:var(--toolbar-size);max-width:calc(var(--viewer-width) * var(--max-width-ratio));top:var(--margin-size);left:var(--margin-size)}.intersection-viewer[style*="--layout-mode: tiny"] .properties-panel{min-width:var(--panel-size);max-width:calc(var(--viewer-width) * var(--max-width-ratio));top:var(--margin-size);right:var(--margin-size)}.intersection-viewer[style*="--layout-mode: small"] .toolbar{min-width:var(--toolbar-size);max-width:calc(var(--viewer-width) * var(--max-width-ratio))}.intersection-viewer[style*="--layout-mode: small"] .properties-panel{min-width:var(--panel-size);max-width:calc(var(--viewer-width) * var(--max-width-ratio))}.intersection-viewer[style*="--layout-mode: responsive"] .toolbar{min-width:var(--toolbar-size, 200px);max-width:35%;top:var(--margin-size, 2%);left:var(--margin-size, 2%)}.intersection-viewer[style*="--layout-mode: responsive"] .properties-panel{min-width:var(--panel-size, 250px);max-width:35%;top:var(--margin-size, 2%);right:var(--margin-size, 2%)}.intersection-viewer[style*="--layout-mode: responsive"] .canvas-stats{min-width:var(--toolbar-size, 200px);max-width:35%;bottom:var(--margin-size, 2%);left:var(--margin-size, 2%)}.intersection-viewer[style*="--layout-mode: responsive"] .status-info{min-width:var(--toolbar-size, 200px);max-width:35%;bottom:var(--margin-size, 2%);right:var(--margin-size, 2%)}.intersection-viewer[style*="--layout-mode: tiny"] .canvas-stats,.intersection-viewer[style*="--layout-mode: tiny"] .status-info{display:none}.intersection-viewer[style*="--layout-mode: tiny"] .tool-group-title{font-size:calc(10px * var(--font-scale, .6))}.intersection-viewer[style*="--layout-mode: tiny"] .tool-button{padding:calc(4px * var(--font-scale, .6)) calc(8px * var(--font-scale, .6));font-size:calc(10px * var(--font-scale, .6))}:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{margin:0;padding:0;min-width:320px;min-height:100vh;overflow-x:hidden}#root{width:100%;height:100vh}.page-transition{transition:opacity .3s ease;height:100%;opacity:1}.ant-layout-content{transition:all .3s;min-height:calc(100vh - 112px)}.ant-menu{border-right:none!important}.ant-menu-item{cursor:pointer!important;transition:all .3s!important}.ant-menu-item a{pointer-events:none}.ant-layout{min-height:100vh;transition:all .3s}.ant-menu-item-selected{background-color:#1890ff!important}.ant-menu-sub{transition:all .3s!important}.ant-layout-content>*{transition:opacity .3s ease}.ant-menu a{color:inherit;text-decoration:none;display:inline-block;width:100%}
