.auth-modal-backdrop{position:fixed;inset:0;background-color:#00000080;display:flex;align-items:center;justify-content:center;z-index:var(--z-modal-backdrop);animation:fadeIn var(--transition-fast) ease-out}.auth-modal{position:relative;background-color:var(--color-surface);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-xl);width:100%;max-width:400px;max-height:90vh;overflow:auto;z-index:var(--z-modal);animation:slideUp var(--transition-base) ease-out}.auth-modal-close{position:absolute;top:var(--space-3);right:var(--space-3);width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:var(--border-radius-md);color:var(--color-text-secondary);font-size:var(--font-size-2xl);cursor:pointer;transition:background-color var(--transition-fast),color var(--transition-fast)}.auth-modal-close:hover{background-color:var(--color-border-subtle);color:var(--color-text-primary)}.auth-modal-close:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.auth-modal-content{padding:var(--space-6)}.auth-modal-content h2{margin:0 0 var(--space-4);font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);text-align:center}.auth-error{padding:var(--space-3);margin-bottom:var(--space-4);background-color:var(--color-error-subtle);color:var(--color-error);border-radius:var(--border-radius-md);font-size:var(--font-size-sm)}.auth-message{padding:var(--space-3);margin-bottom:var(--space-4);background-color:var(--color-success-subtle);color:var(--color-success);border-radius:var(--border-radius-md);font-size:var(--font-size-sm)}.auth-oauth{display:flex;flex-direction:column;gap:var(--space-3);margin-bottom:var(--space-4)}.auth-oauth-button{display:flex;align-items:center;justify-content:center;gap:var(--space-2);width:100%;padding:var(--space-3) var(--space-4);background-color:var(--color-surface-elevated);color:var(--color-text-primary);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);cursor:pointer;transition:background-color var(--transition-fast),border-color var(--transition-fast)}.auth-oauth-button:hover:not(:disabled){background-color:var(--color-border-subtle);border-color:var(--color-border)}.auth-oauth-button:disabled{opacity:.6;cursor:not-allowed}.auth-divider{display:flex;align-items:center;margin:var(--space-4) 0;color:var(--color-text-tertiary);font-size:var(--font-size-sm)}.auth-divider:before,.auth-divider:after{content:"";flex:1;height:1px;background-color:var(--color-border)}.auth-divider:before{margin-right:var(--space-3)}.auth-divider:after{margin-left:var(--space-3)}.auth-field{margin-bottom:var(--space-4)}.auth-field label{display:block;margin-bottom:var(--space-1);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.auth-field input{width:100%;padding:var(--space-3);background-color:var(--color-surface-elevated);color:var(--color-text-primary);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);font-size:var(--font-size-base);transition:border-color var(--transition-fast);box-sizing:border-box}.auth-field input:focus{outline:none;border-color:var(--color-accent)}.auth-field input:disabled{opacity:.6;cursor:not-allowed}.auth-submit{width:100%;padding:var(--space-3) var(--space-4);background-color:var(--color-accent);color:var(--color-text-inverse);border:none;border-radius:var(--border-radius-md);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);cursor:pointer;transition:background-color var(--transition-fast)}.auth-submit:hover:not(:disabled){background-color:var(--color-accent-hover)}.auth-submit:disabled{opacity:.6;cursor:not-allowed}.auth-links{display:flex;flex-direction:column;align-items:center;gap:var(--space-2);margin-top:var(--space-4)}.auth-link{background:none;border:none;padding:0;color:var(--color-accent);font-size:var(--font-size-sm);cursor:pointer;transition:color var(--transition-fast)}.auth-link:hover{color:var(--color-accent-hover);text-decoration:underline}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media(max-width:480px){.auth-modal{max-width:calc(100% - var(--space-6));margin:var(--space-3)}.auth-modal-content{padding:var(--space-4)}}.user-button-container{position:relative}.user-button{display:flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;background:transparent;border:2px solid transparent;border-radius:var(--border-radius-full);cursor:pointer;transition:border-color var(--transition-fast)}.user-button:hover{border-color:var(--color-border)}.user-button:focus-visible{outline:none;border-color:var(--color-accent)}.user-avatar{width:36px;height:36px;border-radius:var(--border-radius-full);object-fit:cover}.user-avatar-fallback{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background-color:var(--color-accent);color:var(--color-text-inverse);border-radius:var(--border-radius-full);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium)}.user-dropdown{position:absolute;top:calc(100% + var(--space-2));right:0;min-width:200px;background-color:var(--color-surface-elevated);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);box-shadow:var(--shadow-lg);z-index:var(--z-dropdown);animation:dropdownFadeIn var(--transition-fast) ease-out}.user-dropdown-header{padding:var(--space-3) var(--space-4);display:flex;flex-direction:column;gap:var(--space-1)}.user-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary)}.user-email{font-size:var(--font-size-xs);color:var(--color-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-dropdown-divider{height:1px;background-color:var(--color-border-subtle)}.user-dropdown-item{display:block;width:100%;padding:var(--space-3) var(--space-4);background:transparent;border:none;text-align:left;font-size:var(--font-size-sm);color:var(--color-text-primary);cursor:pointer;transition:background-color var(--transition-fast)}.user-dropdown-item:hover{background-color:var(--color-border-subtle)}.user-dropdown-item:focus-visible{outline:none;background-color:var(--color-border-subtle)}@keyframes dropdownFadeIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.gate-blur-bg{filter:blur(6px);pointer-events:none;-webkit-user-select:none;user-select:none;height:100vh;overflow:hidden}.gate-container{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background-color:#0000004d;z-index:var(--z-modal);animation:fadeIn var(--transition-fast) ease-out}.gate-card{background-color:var(--color-surface);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-xl);width:100%;max-width:440px;padding:var(--space-8);text-align:center;animation:slideUp var(--transition-base) ease-out}.gate-card h2{margin:0 0 var(--space-2);font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary)}.gate-card p{margin:0 0 var(--space-6);color:var(--color-text-secondary);font-size:var(--font-size-base);line-height:var(--line-height-relaxed)}.gate-email-icon{width:64px;height:64px;margin:0 auto var(--space-4);display:flex;align-items:center;justify-content:center;background-color:var(--color-accent-subtle);border-radius:var(--border-radius-full);color:var(--color-accent);font-size:var(--font-size-3xl)}.gate-resend-btn{display:inline-flex;align-items:center;gap:var(--space-2);padding:var(--space-3) var(--space-6);background-color:var(--color-accent);color:var(--color-text-inverse);border:none;border-radius:var(--border-radius-md);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);cursor:pointer;transition:background-color var(--transition-fast)}.gate-resend-btn:hover:not(:disabled){background-color:var(--color-accent-hover)}.gate-resend-btn:disabled{opacity:.6;cursor:not-allowed}.gate-sign-out{display:block;margin:var(--space-4) auto 0;background:none;border:none;color:var(--color-text-tertiary);font-size:var(--font-size-sm);cursor:pointer;transition:color var(--transition-fast)}.gate-sign-out:hover{color:var(--color-text-primary)}.gate-subscribe-btn{width:100%;padding:var(--space-3) var(--space-6);background-color:var(--color-accent);color:var(--color-text-inverse);border:none;border-radius:var(--border-radius-md);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);cursor:pointer;transition:background-color var(--transition-fast)}.gate-subscribe-btn:hover:not(:disabled){background-color:var(--color-accent-hover)}.gate-subscribe-btn:disabled{opacity:.6;cursor:not-allowed}.gate-portal-link{display:block;margin-top:var(--space-4);color:var(--color-accent);font-size:var(--font-size-sm);text-decoration:none;cursor:pointer;background:none;border:none}.gate-portal-link:hover{text-decoration:underline}.demo-overlay{position:fixed;bottom:0;left:0;right:0;padding:var(--space-4) var(--space-6);background:linear-gradient(transparent,var(--color-background) 40%);z-index:var(--z-sticky);pointer-events:none}.demo-banner{max-width:600px;margin:0 auto;padding:var(--space-4) var(--space-6);background-color:var(--color-surface-elevated);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-lg);text-align:center;pointer-events:auto}.demo-banner p{margin:0 0 var(--space-3);color:var(--color-text-primary);font-size:var(--font-size-base);font-weight:var(--font-weight-medium)}.demo-cta-btn{padding:var(--space-2) var(--space-6);background-color:var(--color-accent);color:var(--color-text-inverse);border:none;border-radius:var(--border-radius-md);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);cursor:pointer;transition:background-color var(--transition-fast)}.demo-cta-btn:hover{background-color:var(--color-accent-hover)}.trial-banner{display:flex;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-1) var(--space-4);background-color:var(--color-info-subtle);color:var(--color-text-primary);font-size:var(--font-size-xs)}.trial-banner.warning{background-color:var(--color-warning-subtle)}.trial-banner-text{font-weight:var(--font-weight-medium)}.trial-upgrade-btn{padding:var(--space-1) var(--space-3);background-color:var(--color-accent);color:var(--color-text-inverse);border:none;border-radius:var(--border-radius-sm);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);cursor:pointer;transition:background-color var(--transition-fast)}.trial-upgrade-btn:hover{background-color:var(--color-accent-hover)}.gate-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;gap:var(--space-4);color:var(--color-text-secondary)}.gate-verifying{display:flex;flex-direction:column;align-items:center;gap:var(--space-3)}.gate-verifying-text{color:var(--color-text-secondary);font-size:var(--font-size-sm)}@media(max-width:480px){.gate-card{max-width:calc(100% - var(--space-6));padding:var(--space-5)}}.app-header{display:flex;justify-content:space-between;align-items:center;height:var(--header-height);padding:0 var(--space-4);background-color:var(--color-surface);border-bottom:var(--border-width) solid var(--color-border);z-index:var(--z-sticky)}.header-left{display:flex;align-items:center;gap:var(--space-4)}.header-left h2{color:var(--color-text-primary);margin:0;font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);letter-spacing:-.02em}.header-right{display:flex;align-items:center;gap:var(--space-3)}.sign-in-button{padding:var(--space-2) var(--space-4);background-color:var(--color-accent);color:var(--color-text-inverse);border:none;border-radius:var(--border-radius-md);cursor:pointer;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);transition:background-color var(--transition-fast);height:36px}.sign-in-button:hover{background-color:var(--color-accent-hover)}.sign-in-button:active{background-color:var(--color-accent-active)}.sign-in-button:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.mobile-menu-btn{display:none;align-items:center;justify-content:center;width:36px;height:36px;padding:0;background:transparent;border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-sm);color:var(--color-text-primary);cursor:pointer;transition:all var(--transition-fast)}.mobile-menu-btn:hover{background-color:var(--color-surface-elevated)}.mobile-menu-btn:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}@media(max-width:768px){.mobile-menu-btn{display:flex}}.auth-skeleton{width:36px;height:36px;border-radius:50%;background:var(--color-surface-elevated);animation:pulse 1.5s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}@media(max-width:768px){.app-header{padding:0 var(--space-3)}.header-left h2{font-size:var(--font-size-lg)}.header-left{gap:var(--space-3)}}@media(max-width:480px){.header-left h2{font-size:var(--font-size-base)}.header-left{gap:var(--space-2)}.sign-in-button{padding:var(--space-2) var(--space-3);font-size:var(--font-size-xs)}}.path-display{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3);background-color:var(--color-surface-elevated);border-radius:var(--border-radius-md);border:var(--border-width) solid var(--color-border)}.path-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em}.path{display:flex;flex-wrap:wrap;gap:var(--space-1);align-items:center;font-size:var(--font-size-sm);color:var(--color-text-primary)}.breadcrumb-item{display:inline-block;padding:var(--space-1) var(--space-2);border-radius:var(--border-radius-sm);transition:all var(--transition-fast);background-color:var(--color-surface);color:var(--color-text-primary)}.breadcrumb-item:not(.active){cursor:pointer;background-color:var(--color-surface)}.breadcrumb-item:not(.active):hover{background-color:var(--color-accent-subtle);color:var(--color-accent)}.breadcrumb-item:not(.active):focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.breadcrumb-item.active{background-color:var(--color-accent);color:var(--color-text-inverse);font-weight:var(--font-weight-medium)}.breadcrumb-separator{color:var(--color-text-tertiary);font-weight:var(--font-weight-normal);margin:0 var(--space-1)}.breadcrumb-placeholder{font-size:var(--font-size-sm);color:var(--color-text-tertiary);font-style:italic}@media(max-width:768px){.path-display{padding:var(--space-2)}.path{font-size:var(--font-size-xs)}.breadcrumb-item{padding:var(--space-1);font-size:var(--font-size-xs)}}.node-info-box{display:flex;flex-direction:column;gap:var(--space-3);padding:var(--space-4);background-color:var(--color-surface-elevated);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);box-shadow:var(--shadow-md);animation:slideIn var(--transition-base)}@keyframes slideIn{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.node-info-header{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-2)}.node-info-header h4{margin:0;font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);flex:1}.node-info-close{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background-color:transparent;border:none;border-radius:var(--border-radius-sm);color:var(--color-text-tertiary);font-size:var(--font-size-xl);line-height:1;cursor:pointer;transition:all var(--transition-fast);flex-shrink:0}.node-info-close:hover{background-color:var(--color-surface);color:var(--color-text-primary)}.node-info-close:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.node-info-desc{margin:0;font-size:var(--font-size-sm);line-height:var(--line-height-relaxed);color:var(--color-text-secondary)}.node-info-points{padding:var(--space-2) var(--space-3);background-color:var(--color-accent-subtle);border-radius:var(--border-radius-sm);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary)}.node-info-reqs{display:flex;flex-direction:column;gap:var(--space-2);margin:0;padding:0;list-style:none}.node-info-reqs li{position:relative;padding-left:var(--space-4);font-size:var(--font-size-sm);line-height:var(--line-height-relaxed);color:var(--color-text-secondary)}.node-info-reqs li:before{content:"•";position:absolute;left:var(--space-2);color:var(--color-accent);font-weight:var(--font-weight-bold)}@media(max-width:768px){.node-info-box{padding:var(--space-3);gap:var(--space-2)}.node-info-header h4{font-size:var(--font-size-base)}.node-info-desc,.node-info-points,.node-info-reqs li{font-size:var(--font-size-xs)}}.react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px) translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px) translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) )}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:5px;height:5px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));translate:-50% -50%}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}.zoom-controls{position:absolute;top:var(--space-4);left:var(--space-4);display:flex;gap:var(--space-2);align-items:center;padding:var(--space-2);background-color:var(--color-surface);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);box-shadow:var(--shadow-md);z-index:var(--z-dropdown)}.zoom-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;background-color:transparent;border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-sm);color:var(--color-text-primary);font-size:var(--font-size-lg);font-weight:var(--font-weight-medium);line-height:1;cursor:pointer;transition:all var(--transition-fast)}.zoom-btn:hover:not(:disabled){background-color:var(--color-accent-subtle);border-color:var(--color-accent);color:var(--color-accent)}.zoom-btn:active:not(:disabled){background-color:var(--color-accent);color:var(--color-text-inverse)}.zoom-btn:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.zoom-btn:disabled{opacity:.4;cursor:not-allowed}.zoom-level{font-size:var(--font-size-xs);color:var(--color-text-secondary);font-weight:var(--font-weight-medium);min-width:40px;text-align:center}@media(max-width:768px){.zoom-controls{top:var(--space-2);left:var(--space-2);padding:var(--space-1);gap:var(--space-1)}.zoom-btn{width:28px;height:28px;font-size:var(--font-size-base)}.zoom-level{font-size:.65rem;min-width:32px}}.node-tooltip{position:fixed;z-index:var(--z-tooltip);pointer-events:none;display:flex;flex-direction:column;gap:var(--space-1);padding:var(--space-2) var(--space-3);background-color:var(--color-surface-elevated);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);box-shadow:var(--shadow-lg);max-width:200px;animation:tooltipFadeIn var(--transition-fast) ease}@keyframes tooltipFadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.node-tooltip__bid{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-primary)}.node-tooltip__team{font-size:var(--font-size-xs);color:var(--color-text-secondary)}.node-tooltip__position{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.node-tooltip__hint{font-size:var(--font-size-xs);color:var(--color-accent);font-style:italic;margin-top:var(--space-1)}.chat-button{position:fixed;bottom:var(--space-6);right:var(--space-4);width:56px;height:56px;border-radius:50%;background-color:var(--color-accent);border:none;cursor:pointer;box-shadow:var(--shadow-lg);transition:all var(--transition-fast);z-index:var(--z-fixed);display:flex;align-items:center;justify-content:center}@media(min-width:769px){.chat-button{right:calc(var(--sidebar-width) + var(--space-4))}}.chat-button img{filter:brightness(0) invert(1)}.chat-button-label{position:absolute;right:calc(100% + var(--space-2));white-space:nowrap;background-color:var(--color-surface-elevated);color:var(--color-text-primary);padding:var(--space-1) var(--space-3);border-radius:var(--border-radius-md);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);box-shadow:var(--shadow-md);pointer-events:none;opacity:0;transform:translate(var(--space-2));transition:opacity var(--transition-fast),transform var(--transition-fast)}.chat-button:hover .chat-button-label{opacity:1;transform:translate(0)}.chat-button:hover{background-color:var(--color-accent-hover);transform:scale(1.05)}.chat-button:active{background-color:var(--color-accent-active);transform:scale(.95)}.chat-button:focus-visible{outline:2px solid var(--color-accent);outline-offset:4px}.chat-button-loading{opacity:.5;cursor:not-allowed}.chat-button-loading:hover{transform:none}.chat-panel{position:fixed;bottom:calc(56px + var(--space-4) + var(--space-4));right:var(--space-4);width:400px;max-width:calc(100vw - var(--space-8));height:500px;max-height:calc(100vh - 200px);background-color:var(--color-surface);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-2xl);display:flex;flex-direction:column;z-index:var(--z-fixed);opacity:0;transform:translateY(var(--space-4));animation:slideUp var(--transition-base) forwards}@keyframes slideUp{to{opacity:1;transform:translateY(0)}}.chat-header{padding:var(--space-4);border-bottom:var(--border-width) solid var(--color-border);display:flex;justify-content:space-between;align-items:center;flex-shrink:0}.chat-header h3{margin:0;font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-primary)}.chat-header-actions{display:flex;gap:var(--space-2);align-items:center}.chat-new-conversation{padding:var(--space-2);background-color:transparent;border:none;border-radius:var(--border-radius-sm);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background-color var(--transition-fast);opacity:.7}.chat-new-conversation img{filter:brightness(0) invert(1)}body.dark-mode .chat-new-conversation img{filter:brightness(1) invert(0)}.chat-new-conversation:hover{background-color:var(--color-surface-elevated);opacity:1}.chat-new-conversation:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.chat-close{background-color:transparent;border:none;color:var(--color-text-tertiary);font-size:var(--font-size-2xl);cursor:pointer;width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast);line-height:1}.chat-close:hover{background-color:var(--color-surface-elevated);color:var(--color-text-primary);transform:rotate(90deg)}.chat-close:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.chat-confirm-bar{display:flex;justify-content:space-between;align-items:center;padding:var(--space-2) var(--space-4);background-color:var(--color-warning-subtle);border-bottom:var(--border-width) solid var(--color-warning);font-size:var(--font-size-sm);color:var(--color-text-primary);flex-shrink:0}.chat-confirm-actions{display:flex;gap:var(--space-2)}.chat-confirm-yes{padding:var(--space-1) var(--space-3);background-color:var(--color-error);color:var(--color-text-inverse);border:none;border-radius:var(--border-radius-sm);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);cursor:pointer;transition:background-color var(--transition-fast)}.chat-confirm-yes:hover{opacity:.9}.chat-confirm-no{padding:var(--space-1) var(--space-3);background-color:transparent;border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-sm);font-size:var(--font-size-xs);color:var(--color-text-secondary);cursor:pointer;transition:all var(--transition-fast)}.chat-confirm-no:hover{background-color:var(--color-surface)}.chat-messages{flex:1;overflow-y:auto;padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-3)}.chat-messages::-webkit-scrollbar{width:8px}.chat-messages::-webkit-scrollbar-track{background:transparent}.chat-messages::-webkit-scrollbar-thumb{background-color:var(--color-border);border-radius:var(--border-radius-full)}.chat-messages::-webkit-scrollbar-thumb:hover{background-color:var(--color-text-tertiary)}.chat-message{max-width:80%;padding:var(--space-3) var(--space-4);border-radius:var(--border-radius-md);word-wrap:break-word;line-height:var(--line-height-relaxed)}.chat-message.user{align-self:flex-end;background-color:var(--color-accent);color:var(--color-text-inverse)}.chat-message.assistant{align-self:flex-start;background-color:var(--color-surface-elevated);border:var(--border-width) solid var(--color-border);color:var(--color-text-primary)}.chat-message p{margin:0;margin-bottom:var(--space-2)}.chat-message p:last-child{margin-bottom:0}.chat-message code{background-color:var(--color-surface);padding:var(--space-1) var(--space-2);border-radius:var(--border-radius-sm);font-size:var(--font-size-xs)}.chat-message pre{background-color:var(--color-surface);padding:var(--space-3);border-radius:var(--border-radius-sm);overflow-x:auto;margin:var(--space-2) 0}.chat-message pre code{padding:0;background:none}.chat-message ul,.chat-message ol{margin:var(--space-2) 0;padding-left:var(--space-6)}.chat-message li{margin-bottom:var(--space-1)}.chat-tool-indicator{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);background-color:var(--color-info-subtle);border:var(--border-width) solid var(--color-info);border-radius:var(--border-radius-sm);font-size:var(--font-size-sm);color:var(--color-text-secondary);font-style:italic;max-width:80%;align-self:flex-start}.chat-tool-indicator img{flex-shrink:0}.typing{font-style:italic;opacity:.7;color:var(--color-text-tertiary);animation:pulse 1.5s ease-in-out infinite}@keyframes pulse{0%,to{opacity:.7}50%{opacity:.3}}.chat-retry-button{margin-top:var(--space-2);padding:var(--space-1) var(--space-2);font-size:var(--font-size-xs);background-color:var(--color-surface);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-sm);cursor:pointer;color:var(--color-text-primary);transition:all var(--transition-fast)}.chat-retry-button:hover{background-color:var(--color-accent-subtle);border-color:var(--color-accent)}.chat-retry-button:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.chat-input-form{padding:var(--space-4);border-top:var(--border-width) solid var(--color-border);display:flex;gap:var(--space-2);flex-shrink:0}.chat-input-form input{flex:1;padding:var(--space-3);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);background-color:var(--color-surface-elevated);color:var(--color-text-primary);font-size:var(--font-size-sm);transition:all var(--transition-fast)}.chat-input-form input::placeholder{color:var(--color-text-tertiary)}.chat-input-form input:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-subtle)}.chat-input-form input:disabled{opacity:.5;cursor:not-allowed}.chat-input-form button{padding:var(--space-3) var(--space-6);background-color:var(--color-accent);color:var(--color-text-inverse);border:none;border-radius:var(--border-radius-md);cursor:pointer;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);transition:background-color var(--transition-fast)}.chat-input-form button:hover:not(:disabled){background-color:var(--color-accent-hover)}.chat-input-form button:active:not(:disabled){background-color:var(--color-accent-active)}.chat-input-form button:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.chat-input-form button:disabled{opacity:.5;cursor:not-allowed}@media(max-width:768px){.chat-button{bottom:var(--space-3);right:var(--space-3);width:48px;height:48px}.chat-panel{bottom:calc(48px + var(--space-3) + var(--space-3));right:var(--space-3);left:var(--space-3);width:auto;max-width:none;height:400px}.chat-header{padding:var(--space-3)}.chat-header h3{font-size:var(--font-size-base)}.chat-messages{padding:var(--space-3);gap:var(--space-2)}.chat-message{font-size:var(--font-size-sm);padding:var(--space-2) var(--space-3)}.chat-input-form{padding:var(--space-3)}.chat-input-form input,.chat-input-form button{padding:var(--space-2);font-size:var(--font-size-xs)}}@media(max-width:480px){.chat-panel{position:fixed;top:var(--header-height);bottom:0;left:0;right:0;height:auto;max-height:none;border-radius:0;border:none}.chat-button{bottom:var(--space-2);right:var(--space-2)}}.search-bar{position:relative;width:100%}.search-input-wrapper{position:relative;display:flex;align-items:center}.search-input{width:100%;padding:var(--space-2) var(--space-3);padding-right:var(--space-8);background-color:var(--color-surface-elevated);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);font-size:var(--font-size-sm);color:var(--color-text-primary);transition:all var(--transition-fast)}.search-input::placeholder{color:var(--color-text-tertiary)}.search-input:hover{border-color:var(--color-text-tertiary)}.search-input:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-subtle)}.search-spinner{position:absolute;right:var(--space-3);width:16px;height:16px;border:2px solid var(--color-border);border-top-color:var(--color-accent);border-radius:50%;animation:spin .6s linear infinite}.search-results{position:absolute;top:calc(100% + var(--space-1));left:0;right:0;max-height:300px;overflow-y:auto;background-color:var(--color-surface-elevated);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);box-shadow:var(--shadow-lg);z-index:var(--z-dropdown);animation:fadeIn var(--transition-fast)}@keyframes fadeIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.search-results::-webkit-scrollbar{width:8px}.search-results::-webkit-scrollbar-track{background:transparent}.search-results::-webkit-scrollbar-thumb{background-color:var(--color-border);border-radius:var(--border-radius-full)}.search-results::-webkit-scrollbar-thumb:hover{background-color:var(--color-text-tertiary)}.search-result-item{display:flex;flex-direction:column;gap:var(--space-1);padding:var(--space-3);border-bottom:var(--border-width) solid var(--color-border-subtle);cursor:pointer;transition:background-color var(--transition-fast)}.search-result-item:last-child{border-bottom:none}.search-result-item:hover{background-color:var(--color-surface)}.search-result-item:focus,.search-result-item--active{outline:none;background-color:var(--color-accent-subtle)}.search-result-bid{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-primary)}.search-result-path{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.search-result-description{font-size:var(--font-size-xs);color:var(--color-text-secondary);line-height:var(--line-height-snug)}.search-no-results{padding:var(--space-4);text-align:center;font-size:var(--font-size-sm);color:var(--color-text-tertiary)}@media(max-width:768px){.search-input{padding:var(--space-2);font-size:var(--font-size-xs)}.search-results{max-height:200px}.search-result-item{padding:var(--space-2)}.search-result-bid{font-size:var(--font-size-xs)}.search-result-path,.search-result-description{font-size:.65rem}}.notifications-container{position:fixed;top:calc(var(--header-height) + var(--space-4));right:var(--space-4);display:flex;flex-direction:column;gap:var(--space-2);z-index:var(--z-toast);pointer-events:none;max-width:400px}.notification{display:flex;align-items:flex-start;gap:var(--space-3);padding:var(--space-3) var(--space-4);background-color:var(--color-surface-elevated);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);box-shadow:var(--shadow-lg);pointer-events:auto;animation:slideInRight var(--transition-base)}@keyframes slideInRight{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}.notification-success{border-left:4px solid var(--color-success);background-color:var(--color-success-subtle)}.notification-error{border-left:4px solid var(--color-error);background-color:var(--color-error-subtle)}.notification-warning{border-left:4px solid var(--color-warning);background-color:var(--color-warning-subtle)}.notification-info{border-left:4px solid var(--color-info);background-color:var(--color-info-subtle)}.notification-message{flex:1;font-size:var(--font-size-sm);line-height:var(--line-height-relaxed);color:var(--color-text-primary)}.notification-close{display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;background-color:transparent;border:none;border-radius:var(--border-radius-sm);color:var(--color-text-tertiary);font-size:var(--font-size-lg);line-height:1;cursor:pointer;transition:all var(--transition-fast);flex-shrink:0}.notification-close:hover{background-color:var(--color-surface);color:var(--color-text-primary)}.notification-close:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}@media(max-width:768px){.notifications-container{top:calc(var(--header-height) + var(--space-2));right:var(--space-2);left:var(--space-2);max-width:none}.notification{padding:var(--space-2) var(--space-3)}.notification-message{font-size:var(--font-size-xs)}}.legend{position:fixed;bottom:var(--space-4);left:var(--space-4);z-index:var(--z-fixed)}.legend-toggle{width:48px;height:48px;border-radius:50%;background-color:var(--color-surface-elevated);border:var(--border-width) solid var(--color-border);color:var(--color-accent);font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);cursor:pointer;box-shadow:var(--shadow-md);transition:all var(--transition-fast);display:flex;align-items:center;justify-content:center}.legend-toggle:hover{background-color:var(--color-accent);color:#fff;transform:scale(1.05);box-shadow:var(--shadow-lg)}.legend-toggle:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.legend-panel{position:absolute;bottom:calc(100% + var(--space-2));left:0;width:320px;max-height:calc(100vh - 120px);overflow-y:auto;background-color:var(--color-surface-elevated);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-xl);animation:legendSlideUp var(--transition-base)}@keyframes legendSlideUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.legend-header{display:flex;justify-content:space-between;align-items:center;padding:var(--space-4);border-bottom:var(--border-width) solid var(--color-border);position:sticky;top:0;background-color:var(--color-surface-elevated);z-index:1}.legend-header h3{margin:0;font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-primary)}.legend-close{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background-color:transparent;border:none;border-radius:var(--border-radius-sm);color:var(--color-text-tertiary);font-size:var(--font-size-2xl);line-height:1;cursor:pointer;transition:all var(--transition-fast)}.legend-close:hover{background-color:var(--color-surface);color:var(--color-text-primary)}.legend-section{padding:var(--space-4);border-bottom:var(--border-width) solid var(--color-border-subtle)}.legend-section:last-of-type{border-bottom:none}.legend-section h4{margin:0 0 var(--space-3) 0;font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em}.legend-item{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2) 0}.legend-item span{font-size:var(--font-size-sm);color:var(--color-text-secondary)}.legend-node{display:flex;align-items:center;justify-content:center;position:relative;min-width:48px;height:32px;padding:var(--space-1) var(--space-2);border-radius:var(--border-radius-full);border:2px solid transparent;font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);flex-shrink:0;box-shadow:var(--shadow-sm)}.legend-node--ns{background-color:var(--graph-ns-background);border-color:var(--graph-ns-border);color:var(--graph-ns-text)}.legend-node--ew{background-color:var(--graph-ew-background);border-color:var(--graph-ew-border);color:var(--graph-ew-text)}.legend-node--path{border-color:var(--graph-path-highlight);border-width:3px;box-shadow:0 0 8px #2563eb4d}.legend-node--dimmed{opacity:.7}.legend-badge{position:absolute;display:flex;align-items:center;justify-content:center;border-radius:50%;font-weight:var(--font-weight-bold);line-height:1}.legend-badge--position{bottom:-4px;right:-4px;width:16px;height:16px;background-color:inherit;border:2px solid inherit;font-size:9px}.legend-badge--expand{top:-4px;right:-4px;width:14px;height:14px;background-color:var(--color-accent);color:#fff;font-size:10px}.legend-item--kbd{gap:var(--space-4)}kbd{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 var(--space-2);background-color:var(--color-surface);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-sm);font-family:var(--font-family-mono);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);box-shadow:0 1px 2px #0000001a}.legend-tip{padding:var(--space-3) var(--space-4);background-color:var(--color-accent-subtle);border-top:var(--border-width) solid var(--color-border-subtle);font-size:var(--font-size-xs);line-height:var(--line-height-relaxed);color:var(--color-text-secondary)}.legend-tip strong{color:var(--color-text-primary)}@media(max-width:768px){.legend{bottom:var(--space-20);left:var(--space-2)}.legend-toggle{width:44px;height:44px}.legend-panel{width:calc(100vw - var(--space-8));max-height:calc(100vh - 160px)}}.sidebar{display:flex;flex-direction:column;height:100%;background-color:var(--color-surface);border-left:var(--border-width) solid var(--color-border);overflow:hidden}.sidebar__content{display:flex;flex-direction:column;gap:var(--space-4);padding:var(--space-4);overflow-y:auto;overflow-x:hidden;height:100%}.sidebar-section{display:flex;flex-direction:column;gap:var(--space-2)}.sidebar-section__header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-2) var(--space-3);background-color:transparent;border:none;color:var(--color-text-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);text-align:left;cursor:default;-webkit-user-select:none;user-select:none;border-radius:var(--border-radius-sm)}.sidebar-section__header--collapsible{cursor:pointer;transition:background-color var(--transition-fast)}.sidebar-section__header--collapsible:hover{background-color:var(--color-surface-elevated)}.sidebar-section__header--collapsible:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.sidebar-section__title{flex:1;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-secondary)}.sidebar-section__icon{font-size:var(--font-size-xs);color:var(--color-text-tertiary);transition:transform var(--transition-fast);transform:rotate(-90deg)}.sidebar-section__icon--open{transform:rotate(0)}.sidebar-section__content{display:flex;flex-direction:column;gap:var(--space-2)}.sidebar-section+.sidebar-section{border-top:var(--border-width) solid var(--color-border-subtle);padding-top:var(--space-4)}@media(max-width:768px){.sidebar{display:none}}.mobile-drawer__backdrop{position:fixed;inset:0;background-color:#00000080;z-index:var(--z-modal-backdrop);animation:fadeIn var(--transition-base)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.mobile-drawer{position:fixed;bottom:0;left:0;right:0;background-color:var(--color-surface);border-top-left-radius:var(--border-radius-lg);border-top-right-radius:var(--border-radius-lg);box-shadow:var(--shadow-xl);z-index:var(--z-modal);display:flex;flex-direction:column;transition:height var(--transition-base),transform var(--transition-base);will-change:transform,height}.mobile-drawer__handle{display:flex;justify-content:center;align-items:center;padding:var(--space-3);cursor:grab;touch-action:none}.mobile-drawer__handle:active{cursor:grabbing}.mobile-drawer__handle-bar{width:48px;height:4px;background-color:var(--color-border);border-radius:var(--border-radius-full)}.mobile-drawer__content{flex:1;overflow-y:auto;overflow-x:hidden;padding:var(--space-4);padding-top:0}.mobile-drawer--collapsed{height:10vh}.mobile-drawer--half{height:50vh}.mobile-drawer--full{height:90vh}@media(min-width:769px){.mobile-drawer,.mobile-drawer__backdrop{display:none}}@media(prefers-reduced-motion:reduce){.mobile-drawer{transition:none}.mobile-drawer__backdrop{animation:none}}.footer-links{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-4);border-top:var(--border-width) solid var(--color-border-subtle);margin-top:auto}.footer-links__copyright{font-size:var(--font-size-xs);color:var(--color-text-tertiary);margin:0}.footer-links__nav{display:flex;align-items:center;gap:var(--space-2)}.footer-links__link{font-size:var(--font-size-xs);color:var(--color-text-tertiary);text-decoration:none;transition:color var(--transition-fast)}.footer-links__link:hover{color:var(--color-accent)}.footer-links__link:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px;border-radius:var(--border-radius-sm)}.footer-links__separator{color:var(--color-text-disabled);font-size:var(--font-size-xs)}:root{--color-background: #ffffff;--color-surface: #f8f9fa;--color-surface-elevated: #ffffff;--color-border: #dee2e6;--color-border-subtle: #e9ecef;--color-text-primary: #212529;--color-text-secondary: #495057;--color-text-tertiary: #6c757d;--color-text-disabled: #adb5bd;--color-text-inverse: #ffffff;--color-accent: #0d6efd;--color-accent-hover: #0b5ed7;--color-accent-active: #0a58ca;--color-accent-subtle: #e7f1ff;--color-success: #198754;--color-success-subtle: #d1e7dd;--color-warning: #ffc107;--color-warning-subtle: #fff3cd;--color-error: #dc3545;--color-error-subtle: #f8d7da;--color-info: #0dcaf0;--color-info-subtle: #cff4fc;--color-node-pass: #198754;--color-node-weak: #fd7e14;--color-node-forcing: #dc3545;--color-node-conventional: #0d6efd;--color-node-natural: #6c757d;--color-node-default: #495057;--node-start: #fd7e14;--node-opening: #0d6efd;--node-response: #0a58ca;--node-continuation: #4dabf7;--node-final: #198754;--node-opponent: #dc3545;--link-color: rgba(150, 150, 150, .6);--link-active: #ffd700;--graph-ns-text: #ffffff;--graph-ew-text: #ffffff;--graph-red-suit: #ff6b6b;--graph-ns-background: #1976d2;--graph-ew-background: #dc3545;--graph-ns-border: #1976d2;--graph-ew-border: #d32f2f;--graph-path-highlight: #2563eb;--graph-search-highlight: #4caf50;--graph-link-default: #999;--graph-edge-active: #1976d2;--graph-edge-inactive: #777;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-16: 64px;--space-20: 80px;--font-family-base: "Roboto", -apple-system, BlinkMacSystemFont, "Segoe UI", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-family-mono: "Monaco", "Courier New", monospace;--font-size-xs: .75rem;--font-size-sm: .875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-size-3xl: 1.875rem;--font-size-4xl: 2.25rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-snug: 1.375;--line-height-normal: 1.5;--line-height-relaxed: 1.625;--line-height-loose: 2;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .06);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 10px 10px -5px rgba(0, 0, 0, .04);--shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, .25);--border-width: 1px;--border-width-thick: 2px;--border-radius-sm: 4px;--border-radius-md: 8px;--border-radius-lg: 12px;--border-radius-xl: 16px;--border-radius-full: 9999px;--z-base: 0;--z-dropdown: 100;--z-sticky: 200;--z-fixed: 300;--z-modal-backdrop: 400;--z-modal: 500;--z-popover: 600;--z-toast: 700;--z-tooltip: 800;--transition-fast: .15s ease;--transition-base: .2s ease;--transition-slow: .3s ease;--transition-slower: .5s ease;--header-height: 56px;--sidebar-width: 320px;--max-content-width: 1440px}body.dark-mode{--color-background: #1a1d23;--color-surface: #242830;--color-surface-elevated: #2d3139;--color-border: #3d4149;--color-border-subtle: #32353d;--color-text-primary: #e9ecef;--color-text-secondary: #ced4da;--color-text-tertiary: #adb5bd;--color-text-disabled: #6c757d;--color-text-inverse: #212529;--color-accent: #4dabf7;--color-accent-hover: #74c0fc;--color-accent-active: #339af0;--color-accent-subtle: #1c4a6b;--color-success: #51cf66;--color-success-subtle: #2b5336;--color-warning: #ffd43b;--color-warning-subtle: #66541a;--color-error: #ff6b6b;--color-error-subtle: #663333;--color-info: #4dabf7;--color-info-subtle: #1c4a6b;--color-node-pass: #51cf66;--color-node-weak: #ff922b;--color-node-forcing: #ff6b6b;--color-node-conventional: #4dabf7;--color-node-natural: #adb5bd;--color-node-default: #ced4da;--node-start: #ff922b;--node-opening: #4dabf7;--node-response: #339af0;--node-continuation: #74c0fc;--node-final: #51cf66;--node-opponent: #ff6b6b;--graph-ns-text: #ffffff;--graph-ew-text: #ffffff;--graph-red-suit: #ff8787;--graph-ns-background: #2563eb;--graph-ew-background: #dc2626;--graph-ns-border: #60a5fa;--graph-ew-border: #f87171;--graph-path-highlight: #3b82f6;--graph-search-highlight: #51cf66;--graph-link-default: #666;--graph-edge-active: #4dabf7;--graph-edge-inactive: #666;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .4), 0 2px 4px -1px rgba(0, 0, 0, .3);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .5), 0 4px 6px -2px rgba(0, 0, 0, .4);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .6), 0 10px 10px -5px rgba(0, 0, 0, .5);--shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, .7)}@media(prefers-reduced-motion:reduce){:root{--transition-fast: .01ms;--transition-base: .01ms;--transition-slow: .01ms;--transition-slower: .01ms}}*,*:before,*:after{box-sizing:border-box}*{margin:0;padding:0}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;transition:background-color var(--transition-base),color var(--transition-base)}img,picture,video,canvas,svg{display:block;max-width:100%}input,button,textarea,select{font:inherit}button{background:none;border:none;cursor:pointer;font-family:inherit}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}ul,ol{list-style:none}a{text-decoration:none;color:inherit}*:focus{outline:none}*:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px;border-radius:var(--border-radius-sm)}:focus:not(:focus-visible){outline:none}html{scroll-behavior:smooth}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}button,a,input[type=button],input[type=submit],input[type=reset],label[for],select{cursor:pointer}:disabled{cursor:not-allowed}.app-layout{display:grid;grid-template-areas:"header header" "main sidebar";grid-template-columns:1fr var(--sidebar-width);grid-template-rows:var(--header-height) 1fr;height:100vh;width:100vw;overflow:hidden;background-color:var(--color-background)}.app-layout__header{grid-area:header;z-index:var(--z-sticky)}.app-layout__main{grid-area:main;position:relative;overflow:hidden}.app-layout__sidebar{grid-area:sidebar;overflow:hidden}.app-layout--no-sidebar{grid-template-areas:"header" "main";grid-template-columns:1fr}@media(max-width:768px){.app-layout{grid-template-areas:"header" "main";grid-template-columns:1fr;grid-template-rows:var(--header-height) 1fr}.app-layout__sidebar{display:none}}.container{width:100%;max-width:var(--max-content-width);margin-left:auto;margin-right:auto;padding-left:var(--space-4);padding-right:var(--space-4)}@media(min-width:768px){.container{padding-left:var(--space-6);padding-right:var(--space-6)}}.flex{display:flex}.flex-col{display:flex;flex-direction:column}.flex-row{display:flex;flex-direction:row}.flex-wrap{flex-wrap:wrap}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.flex-none{flex:none}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.gap-1{gap:var(--space-1)}.gap-2{gap:var(--space-2)}.gap-3{gap:var(--space-3)}.gap-4{gap:var(--space-4)}.gap-6{gap:var(--space-6)}.gap-8{gap:var(--space-8)}.grid{display:grid}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.p-0{padding:0}.p-1{padding:var(--space-1)}.p-2{padding:var(--space-2)}.p-3{padding:var(--space-3)}.p-4{padding:var(--space-4)}.p-6{padding:var(--space-6)}.p-8{padding:var(--space-8)}.px-2{padding-left:var(--space-2);padding-right:var(--space-2)}.px-3{padding-left:var(--space-3);padding-right:var(--space-3)}.px-4{padding-left:var(--space-4);padding-right:var(--space-4)}.px-6{padding-left:var(--space-6);padding-right:var(--space-6)}.py-2{padding-top:var(--space-2);padding-bottom:var(--space-2)}.py-3{padding-top:var(--space-3);padding-bottom:var(--space-3)}.py-4{padding-top:var(--space-4);padding-bottom:var(--space-4)}.py-6{padding-top:var(--space-6);padding-bottom:var(--space-6)}.m-0{margin:0}.m-auto{margin:auto}.mx-auto{margin-left:auto;margin-right:auto}.hidden{display:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}@media(max-width:768px){.hidden-mobile{display:none}}@media(min-width:769px){.hidden-desktop{display:none}}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.relative{position:relative}.absolute{position:absolute}.fixed{position:fixed}.sticky{position:sticky}.w-full{width:100%}.h-full{height:100%}.min-h-0{min-height:0}.max-w-full{max-width:100%}.text-xs{font-size:var(--font-size-xs)}.text-sm{font-size:var(--font-size-sm)}.text-base{font-size:var(--font-size-base)}.text-lg{font-size:var(--font-size-lg)}.text-xl{font-size:var(--font-size-xl)}.text-2xl{font-size:var(--font-size-2xl)}.text-3xl{font-size:var(--font-size-3xl)}.font-normal{font-weight:var(--font-weight-normal)}.font-medium{font-weight:var(--font-weight-medium)}.font-semibold{font-weight:var(--font-weight-semibold)}.font-bold{font-weight:var(--font-weight-bold)}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-primary{color:var(--color-text-primary)}.text-secondary{color:var(--color-text-secondary)}.text-tertiary{color:var(--color-text-tertiary)}.text-disabled{color:var(--color-text-disabled)}.text-accent{color:var(--color-accent)}.text-success{color:var(--color-success)}.text-warning{color:var(--color-warning)}.text-error{color:var(--color-error)}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.underline{text-decoration:underline}.no-underline{text-decoration:none}.line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bg-background{background-color:var(--color-background)}.bg-surface{background-color:var(--color-surface)}.bg-surface-elevated{background-color:var(--color-surface-elevated)}.bg-accent{background-color:var(--color-accent)}.bg-accent-subtle{background-color:var(--color-accent-subtle)}.bg-success{background-color:var(--color-success)}.bg-success-subtle{background-color:var(--color-success-subtle)}.bg-warning{background-color:var(--color-warning)}.bg-warning-subtle{background-color:var(--color-warning-subtle)}.bg-error{background-color:var(--color-error)}.bg-error-subtle{background-color:var(--color-error-subtle)}.border{border:var(--border-width) solid var(--color-border)}.border-t{border-top:var(--border-width) solid var(--color-border)}.border-r{border-right:var(--border-width) solid var(--color-border)}.border-b{border-bottom:var(--border-width) solid var(--color-border)}.border-l{border-left:var(--border-width) solid var(--color-border)}.border-subtle{border-color:var(--color-border-subtle)}.border-accent{border-color:var(--color-accent)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--border-radius-sm)}.rounded-md{border-radius:var(--border-radius-md)}.rounded-lg{border-radius:var(--border-radius-lg)}.rounded-xl{border-radius:var(--border-radius-xl)}.rounded-full{border-radius:var(--border-radius-full)}.shadow-sm{box-shadow:var(--shadow-sm)}.shadow-md{box-shadow:var(--shadow-md)}.shadow-lg{box-shadow:var(--shadow-lg)}.shadow-xl{box-shadow:var(--shadow-xl)}.shadow-2xl{box-shadow:var(--shadow-2xl)}.shadow-none{box-shadow:none}.transition-fast{transition:all var(--transition-fast)}.transition-base{transition:all var(--transition-base)}.transition-slow{transition:all var(--transition-slow)}.transition-colors{transition-property:color,background-color,border-color;transition-duration:var(--transition-base);transition-timing-function:ease}.transition-opacity{transition-property:opacity;transition-duration:var(--transition-base);transition-timing-function:ease}.transition-transform{transition-property:transform;transition-duration:var(--transition-base);transition-timing-function:ease}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.opacity-100{opacity:1}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed}.cursor-default{cursor:default}.interactive{transition:all var(--transition-fast);cursor:pointer}.interactive:hover{opacity:.8}.interactive:active{opacity:.6}.btn-interactive{transition:all var(--transition-fast);cursor:pointer}.btn-interactive:hover{background-color:var(--color-accent-hover)}.btn-interactive:active{background-color:var(--color-accent-active);transform:scale(.98)}.btn-interactive:disabled{opacity:.5;cursor:not-allowed}.btn-interactive:disabled:hover{background-color:var(--color-accent);transform:none}.scrollbar-thin{scrollbar-width:thin;scrollbar-color:var(--color-border) transparent}.scrollbar-thin::-webkit-scrollbar{width:8px;height:8px}.scrollbar-thin::-webkit-scrollbar-track{background:transparent}.scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--color-border);border-radius:var(--border-radius-full)}.scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--color-text-tertiary)}.skip-link{position:absolute;top:-40px;left:0;background:var(--color-accent);color:var(--color-text-inverse);padding:var(--space-2) var(--space-4);text-decoration:none;border-radius:var(--border-radius-md);z-index:9999;transition:top var(--transition-fast)}.skip-link:focus{top:var(--space-2)}.panel{background-color:var(--color-surface);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);padding:var(--space-4)}.panel-elevated{background-color:var(--color-surface-elevated);box-shadow:var(--shadow-md);border-radius:var(--border-radius-md);padding:var(--space-4)}.panel-flat{background-color:var(--color-surface);border-radius:var(--border-radius-md);padding:var(--space-4)}.divider{height:1px;background-color:var(--color-border);border:none}.divider-vertical{width:1px;height:100%;background-color:var(--color-border)}#graph{width:100%;height:100%}.bid-node{display:flex;align-items:center;justify-content:center;position:relative;min-width:56px;height:36px;padding:var(--space-1) var(--space-3);border-radius:var(--border-radius-full);border:2px solid transparent;font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);cursor:pointer;transition:all var(--transition-fast);white-space:nowrap;box-shadow:var(--shadow-sm)}.bid-node--NS{background-color:var(--graph-ns-background);border-color:var(--graph-ns-border);color:var(--graph-ns-text)}.bid-node--EW{background-color:var(--graph-ew-background);border-color:var(--graph-ew-border);color:var(--graph-ew-text)}.bid-node--neutral{background-color:var(--color-surface-elevated);border-color:var(--color-border);color:var(--color-text-primary)}.bid-node--in-path{border-color:var(--graph-path-highlight);box-shadow:0 0 12px #2563eb66;border-width:3px}.bid-node--highlighted{border-color:var(--graph-search-highlight);box-shadow:0 0 8px var(--graph-search-highlight)}.bid-node--dimmed{opacity:.7}.bid-node:hover{transform:scale(1.08);box-shadow:var(--shadow-md);z-index:10}.bid-node--dimmed:hover{opacity:.9}.bid-node__label{pointer-events:none}.bid-node__label .hearts,.bid-node__label .diamonds{color:var(--graph-red-suit)}.bid-node__label .spades,.bid-node__label .clubs{color:inherit}.bid-node__position{position:absolute;bottom:-6px;right:-6px;width:20px;height:20px;border-radius:50%;background-color:inherit;border:2px solid inherit;font-size:11px;font-weight:var(--font-weight-bold);display:flex;align-items:center;justify-content:center;pointer-events:none;line-height:1}.bid-node__recommended{position:absolute;top:-8px;left:-8px;font-size:14px;color:#fbbf24;filter:drop-shadow(0 1px 2px rgba(0,0,0,.3));pointer-events:none;animation:pulse 2s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.1)}}.bid-node__expand{position:absolute;top:-6px;right:-6px;width:16px;height:16px;border-radius:50%;background-color:var(--color-accent);color:#fff;font-size:11px;font-weight:var(--font-weight-bold);display:flex;align-items:center;justify-content:center;pointer-events:none;line-height:1}.bid-node__handle{width:1px!important;height:1px!important;min-width:0!important;min-height:0!important;border:none!important;background:transparent!important;opacity:0}.react-flow{background-color:var(--color-background)}.react-flow .react-flow__edges{width:100%;height:100%;pointer-events:none}.react-flow__edge-text{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);fill:var(--color-text-primary)}.react-flow__edge-textbg{fill:var(--color-surface);fill-opacity:.95;rx:4px}.react-flow__node.selected .bid-node{outline:none;box-shadow:var(--shadow-md)}.path .hearts,.path .diamonds,.node-info-box .hearts,.node-info-box .diamonds,.suit-heart,.suit-diamond,.breadcrumb-item .hearts,.breadcrumb-item .diamonds{fill:var(--graph-red-suit);color:var(--graph-red-suit)}.path .spades,.path .clubs,.node-info-box .spades,.node-info-box .clubs,.suit-spade,.suit-club,.breadcrumb-item .spades,.breadcrumb-item .clubs{color:var(--color-text-primary)}.loading{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;gap:var(--space-4)}.loading p{color:var(--color-text-secondary);font-size:var(--font-size-base)}.graph-skeleton{display:flex;align-items:center;justify-content:center;width:100%;height:100%;gap:var(--space-4)}.skeleton-node{width:80px;height:40px;border-radius:var(--border-radius-full);background:linear-gradient(90deg,var(--color-surface-elevated) 25%,var(--color-surface) 50%,var(--color-surface-elevated) 75%);background-size:200% 100%;animation:shimmer 1.5s infinite}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@media(max-width:768px){#graph{width:100vw;height:calc(100vh - var(--header-height))}.bid-node{min-width:64px;height:40px;font-size:var(--font-size-sm);padding:var(--space-2) var(--space-3)}.bid-node__position{width:18px;height:18px;font-size:10px}.bid-node__expand{width:14px;height:14px;font-size:10px}.bid-node:active{transform:scale(1.05)}}body{font-family:var(--font-family-base);font-size:var(--font-size-base);line-height:var(--line-height-normal);color:var(--color-text-primary);background-color:var(--color-background);margin:0;padding:0;overflow:hidden}h1,h2,h3,h4,h5,h6{font-weight:var(--font-weight-semibold);line-height:var(--line-height-tight);color:var(--color-text-primary)}h1{font-size:var(--font-size-3xl)}h2{font-size:var(--font-size-2xl)}h3{font-size:var(--font-size-xl)}h4{font-size:var(--font-size-lg)}h5,h6{font-size:var(--font-size-base)}a{color:var(--color-accent);text-decoration:none;transition:color var(--transition-fast)}a:hover{color:var(--color-accent-hover)}a:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px;border-radius:var(--border-radius-sm)}code,pre{font-family:var(--font-family-mono);font-size:var(--font-size-sm)}::selection{background-color:var(--color-accent-subtle);color:var(--color-text-primary)}@keyframes spin{to{transform:rotate(360deg)}}.spinner{display:inline-block;width:1em;height:1em;border:2px solid var(--color-border);border-top-color:var(--color-accent);border-radius:50%;animation:spin .6s linear infinite}@media print{*{background:#fff!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}pre,blockquote{border:1px solid #999;page-break-inside:avoid}img{page-break-inside:avoid}h2,h3{page-break-after:avoid}}
